A Next.js application that empowers Indian artisans through AI-driven voice onboarding, multilingual storytelling, and authenticity verification.
- π― Voice Onboarding: Native language voice recording for artisans
- π€ AI Authenticity Verification: 94% accuracy in detecting handmade products
- π Multilingual Support: AI-generated stories in 7+ languages
- π Digital Craft Passport: Blockchain-verified authenticity certificates
- π° Fair AI Pricing: ML-powered price recommendations
- π Admin Dashboard: Review queue for product approvals
- ποΈ Marketplace: Browse and purchase authentic handmade products
- π OAuth Authentication: Login with Google and Facebook
- Framework: Next.js 14
- Styling: Tailwind CSS
- Language: JavaScript
- Fonts: Inter, Poppins, Noto Sans Devanagari
- Framework: Django 6.0
- API: Django REST Framework
- Authentication: JWT + OAuth (Google, Facebook)
- Database: SQLite (development) / PostgreSQL (production)
AI-Powered Verified Handmade Marketplace for Indian Artisans
Empowering India's artisan community through voice onboarding, AI-driven authenticity verification, multilingual storytelling, and a fair digital marketplace β all in one platform.
- Overview
- Key Features
- Architecture
- Tech Stack
- Project Structure
- Getting Started
- API Reference
- Design System
- Environment Variables
- Contributing
- License
Artify Bharat is a full-stack, three-tier web platform built to bridge the gap between India's skilled artisan community and modern digital commerce. Artisans can onboard using voice recordings in their native language, which are transcribed and transformed into compelling product stories using Google Gemini AI. Buyers get a curated, verified marketplace where every product comes with an AI-authenticated Digital Craft Passport.
| Feature | Description |
|---|---|
| ποΈ Voice Onboarding | Artisans record their story in any Indian language; AssemblyAI transcribes and Gemini rewrites it into a rich English narrative |
| π€ AI Story Generation | Google Gemini AI auto-generates 120-word historical & emotional product descriptions |
| π Verified Marketplace | Buyers browse authentic, AI-verified handmade products with filters, search, and categories |
| π§Ύ Digital Craft Passport | Each product gets a unique page with its artisan's story and provenance |
| π¬ AI Chatbot | LangGraph-powered shopping assistant with tool-calling support for product search |
| π Artisan Dashboard | Real-time stats: total sales, active orders, product count, AI verification rate |
| ποΈ Cart & Orders | Full shopping cart (UUID-based) and order management with payment status tracking |
| π Admin Panel | Django admin with full control over products, orders, users, and categories |
| π JWT Authentication | Secure stateless authentication for artisans, buyers, and admins |
| π Address Management | Persistent delivery address tied to each user account |
Artify Bharat follows a microservice-oriented, three-tier architecture:
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND β
β Next.js 16 + Tailwind CSS β
β ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
β β Artisan β β Buyer β β Product β β
β β Pages β β Pages β β Passport β β
β ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β HTTP / Axios
ββββββββββββββ΄ββββββββββββββ
β β
βββββββββΌβββββββββ ββββββββββββΌβββββββββββββββββ
β BACKEND β β MICROSERVICES β
β Django 6 + β β FastAPI + LangChain + β
β DRF + JWT β β Gemini AI + AssemblyAI β
β β β β
β - Auth β β POST /process_audio β
β - Products β β β Transcription (AAI) β
β - Orders β β β Story Gen (Gemini) β
β - Cart β β β
β - Customers β β GET /story/{product} β
β - Artisans β β β Product Story β
βββββββββ¬βββββββββ βββββββββββββββββββββββββββββ
β
βββββββββΌβββββββββ
β SQLite DB β
β (dev) / β
β PostgreSQL β
β (prod) β
ββββββββββββββββββ
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 16 | React framework with SSR/SSG |
| React | 18 | UI component library |
| Tailwind CSS | 3.x | Utility-first styling |
| Axios | 1.x | HTTP client for API calls |
| Noto Sans Devanagari | - | Hindi / multilingual font support |
| Technology | Version | Purpose |
|---|---|---|
| Django | 6.0 | Web framework |
| Django REST Framework | 3.16 | REST API toolkit |
| SimpleJWT | 5.5 | JWT-based authentication |
| drf-nested-routers | 0.95 | Nested API routes (e.g. products β images) |
| django-filter | 25.x | Query-param-based filtering |
| django-cors-headers | 4.9 | CORS middleware |
| django-phonenumber-field | 8.4 | Phone number validation |
| Celery | 5.6 | Async task queue |
| Redis | 7.x | Celery message broker |
| Pillow | 12.x | Image processing |
| Gunicorn | 24.x | Production WSGI server |
| Technology | Version | Purpose |
|---|---|---|
| FastAPI | 0.128 | High-performance async API |
| AssemblyAI | 0.48 | Voice-to-text transcription (Universal-2 model) |
| LangChain | 1.2 | LLM orchestration |
| LangGraph | 1.0 | Stateful AI chatbot agent |
| langchain-google-genai | 4.2 | Google Gemini AI integration |
| Whoosh | 2.7 | Local full-text product search indexing |
| python-dotenv | 1.2 | Environment variable management |
artify-bharat/
β
βββ frontend/ # Next.js web application
β βββ components/ # Reusable UI components
β β βββ Header.js # Navigation header
β β βββ Footer.js # Site footer
β β βββ AppLayout.js # Dashboard layout wrapper
β βββ pages/ # Next.js file-based routing
β β βββ index.js # Homepage (landing page)
β β βββ _app.js # App wrapper
β β βββ _document.js # Custom HTML document
β β βββ artisan/
β β β βββ onboard.js # Voice onboarding interface
β β β βββ dashboard.js # Artisan analytics dashboard
β β β βββ orders.js # Artisan order management
β β βββ buyer/
β β β βββ marketplace.js # Product browsing & discovery
β β βββ product/
β β β βββ [id].js # Digital Craft Passport (product page)
β β βββ login/
β β β βββ index.js # User authentication
β β βββ signup/
β β βββ index.js # User registration
β βββ utils/ # Helper utilities
β βββ styles/ # Global CSS styles
β βββ tailwind.config.js # Tailwind configuration
β βββ package.json
β
βββ backend/ # Django REST API
β βββ core/ # Custom User model
β β βββ models.py # User (email-based, with phone)
β βββ store/ # Core marketplace app
β β βββ models.py # Product, Artisan, Customer, Order, Cart...
β β βββ views.py # ViewSets & API views
β β βββ serializers.py # DRF serializers
β β βββ urls.py # URL routing (nested routers)
β β βββ filters.py # Product filtering
β β βββ permissions.py # Custom permissions
β β βββ signals/ # Django signals (e.g., order_created)
β β βββ pagination.py # Default pagination settings
β β βββ tests/ # Unit tests
β βββ marketplace/ # Project-level Django config
β βββ manage.py
β βββ pyproject.toml
β
βββ microservices/ # FastAPI AI microservice
β βββ main.py # FastAPI app & route definitions
β βββ utils/
β βββ transcription.py # AssemblyAI voice transcription
β βββ story_generation.py # Gemini AI story & product narrative
β βββ chatbot.py # LangGraph AI chatbot agent
β βββ search.py # Whoosh full-text product search
β βββ tools.py # Chatbot tool definitions
β
βββ vercel.json # Vercel deployment config
βββ README.md
- Node.js 18+
- Python 3.13+
- uv (Python package manager) β
pip install uv - Redis (for Celery, optional in development)
- API Keys:
- Google AI Studio β
GOOGLE_API_KEY - AssemblyAI β
ASSEMBLYAI_API_KEY - Google Cloud Console β OAuth 2.0 Client ID for Google Login
- Google AI Studio β
To enable Google login, you need to configure OAuth 2.0 credentials:
- Go to Google Cloud Console
- Create a new project or select an existing one
- Navigate to APIs & Services β Credentials
- Click Create Credentials β OAuth 2.0 Client ID
- Configure the OAuth consent screen if prompted
- For Application type, select Web application
- Add Authorized JavaScript origins:
http://localhost:3000(for development)- Your production domain (e.g.,
https://yourdomain.com)
- Add Authorized redirect URIs:
http://localhost:3000(for development)- Your production domain
- Copy the Client ID and save it
Add to environment variables:
Backend (backend/.env):
GOOGLE_CLIENT_ID=your_google_client_id_here.apps.googleusercontent.comFrontend (frontend/.env.local):
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your_google_client_id_here.apps.googleusercontent.comRequired Python packages (already in pyproject.toml):
cd backend
uv add google-auth google-auth-oauthlib python-dotenvcd frontend
npm install
npm run devThe frontend will be available at http://localhost:3000
Available scripts:
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLintcd backend
# Install dependencies with uv
uv sync
# Apply database migrations
uv run python manage.py migrate
# (Optional) Seed sample data
uv run python manage.py seed_db
# Start the development server
uv run python manage.py runserverThe Django API will be available at http://localhost:8000
To access the admin panel, create a superuser:
uv run python manage.py createsuperuserThen visit: http://localhost:8000/admin/
cd microservices
# Create a .env file from the example
cp .env.example .env
# Add your API keys to .env
# Install dependencies
uv sync
# Start the FastAPI server
uv run fastapi dev main.pyThe microservices API will be available at http://localhost:8001
Interactive API docs: http://localhost:8001/docs
| Method | Endpoint | Description |
|---|---|---|
POST |
/store/signup/ |
Register as artisan or buyer |
POST |
/store/login/ |
Login with email & password |
POST |
/store/logout/ |
Logout current user |
POST |
/api/token/ |
Get JWT access & refresh tokens |
POST |
/api/token/refresh/ |
Refresh JWT access token |
Signup payload:
{
"userRole": "artisan",
"firstName": "Rahul",
"lastName": "Sharma",
"email": "rahul@example.com",
"password": "securepassword",
"phone": "+919876543210",
"address": "123, Craft Lane",
"city": "Jaipur",
"state": "Rajasthan",
"pincode": "302001",
"craftSpecialty": "Blue Pottery",
"experience": 12,
"bio": "Third-generation potter from Jaipur..."
}| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/store/products/ |
List all products (with filters) | Public |
POST |
/store/products/ |
Create a new product | Artisan |
GET |
/store/products/{id}/ |
Get product details | Public |
PUT/PATCH |
/store/products/{id}/ |
Update product | Artisan |
DELETE |
/store/products/{id}/ |
Delete product | Artisan |
GET |
/store/products/titles/ |
Get all product titles (for search) | Auth |
GET |
/store/products/{id}/images/ |
Get product images | Public |
POST |
/store/products/{id}/images/ |
Upload product image | Artisan |
Query Filters:
?search=blue+potteryβ Full-text search on title & description?ordering=unit_priceβ Sort by price (or-unit_pricefor descending)?category_id=3β Filter by category
| Method | Endpoint | Description |
|---|---|---|
POST |
/store/carts/ |
Create a new cart |
GET |
/store/carts/{uuid}/ |
Get cart with items & total |
POST |
/store/carts/{uuid}/items/ |
Add item to cart |
PATCH |
/store/carts/{uuid}/items/{id}/ |
Update item quantity |
DELETE |
/store/carts/{uuid}/items/{id}/ |
Remove item from cart |
GET |
/store/orders/ |
List orders (scoped by user role) |
POST |
/store/orders/ |
Place an order from cart |
| Method | Endpoint | Description | Auth |
|---|---|---|---|
GET |
/store/stats/ |
Get artisan dashboard stats | Artisan |
GET |
/store/customers/me/ |
Get current customer profile | Auth |
PUT |
/store/customers/me/ |
Update customer profile | Auth |
GET |
/store/categories/ |
List all categories | Public |
| Method | Endpoint | Description |
|---|---|---|
POST |
/process_audio |
Upload audio β Transcription + Artisan Story |
GET |
/story/{product_name} |
Generate a product history story |
Audio Processing Response:
{
"text": "Transcribed voice recording text...",
"story": "Refined 120-word English narrative about the artisan's craft..."
}Artify Bharat uses a warm, earthy color palette that reflects the richness of Indian craftsmanship:
| Token | Value | Usage |
|---|---|---|
| Primary | #c2794d |
Terracotta β CTAs, highlights |
| Secondary | #8b6f47 |
Earth brown β accents |
| Background | #f8f6f3 |
Warm cream β page background |
| Text | #3d3021 |
Dark brown β body text |
Typography:
- Poppins β Display headings
- Inter β Body copy and UI
- Noto Sans Devanagari β Hindi & multilingual content
ARTISAN_EMAIL=artisan@domain.com
ARTISAN_PASS=yourpassword
BUYER_EMAIL=buyer@domain.com
BUYER_PASS=yourpasswordGOOGLE_API_KEY=your_google_gemini_api_key
ASSEMBLYAI_API_KEY=your_assemblyai_api_key
| Route | Page | Description |
|---|---|---|
/ |
Homepage | Landing page with hero, features & stats |
/signup |
Sign Up | Role-based registration (artisan/buyer) |
/login |
Login | Email & password authentication |
/buyer/marketplace |
Marketplace | Browse & search verified products |
/artisan/onboard |
Voice Onboarding | Record story, list products |
/artisan/dashboard |
Dashboard | Analytics: sales, orders, stats |
/artisan/orders |
Orders | Track and manage incoming orders |
/product/[id] |
Product Passport | Individual product + artisan story |
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Please ensure your code follows the existing style and all tests pass before submitting.
This project is licensed under the MIT License β see the LICENSE file for details.
Built with β€οΈ for India's artisan community
For support, open an issue or contact support@artifybharat.com