Discover one-of-a-kind handcrafted furniture from verified Indian artisans. Or upload your own design and get it made — exactly as you imagined.
Upload reference photos (optional) · JPG, PNG · Max 5 files
Upload references or describe design. Include dimensions, material & budget.
Team reviews feasibility in 24hrs, assigns best-fit verified manufacturer.
Manufacturer provides base quote. Platform adds margin. Final price shown to you.
Advance confirms order. Balance due before item ships. All held in escrow.
Assigned porter handles pickup & delivery with WhatsApp tracking.
Custom pieces: 50% advance non-refundable. Admin handles all disputes.
Uploads photos + sets base price. Admin adds 40–50% margin. Live after approval via WhatsApp + email.
Quality check by CraftSpace team. Only verified pieces reach buyers. Rejected items get feedback.
Full amount held in escrow. Instant notifications to porter, manufacturer, and admin via WhatsApp.
Assigned porter collects and delivers. Porter fee released on delivery confirmation. Per-delivery payment.
7-day return window. No return = manufacturer paid automatically. Admin keeps 40% platform margin.
Pays manufacturer base + 40–50% platform margin via UPI, card, or net banking. Amount held securely.
Held in EscrowFunds held for 7 days post-delivery. Porter paid same-day. If return raised, Admin investigates — manufacturer protected.
Return Window: 7 DaysAfter 7-day window: manufacturer receives their full base price. Admin keeps margin. Auto-transfer or admin trigger.
Auto TransferAdmin reviews every photo and pricing before listing goes live. Quality is non-negotiable.
Manufacturers keep 60%. Paid automatically after 7-day window. No chasing, no delays.
All buyer payments held until delivery. Returns handled by admin — manufacturers protected.
Real-time updates to all parties — buyer, manufacturer, porter — via WhatsApp at every step.
| Column | Type | Constraint | Description |
|---|---|---|---|
| manufacturer_id | UUID/INT | PK·AUTO | Unique manufacturer identifier |
| full_name | VARCHAR(120) | NOT NULL | Full legal name |
| workshop_name | VARCHAR(120) | Studio name shown to buyers | |
| VARCHAR(15) | NOT NULL·UNIQUE | Primary notification channel | |
| VARCHAR(200) | NOT NULL·UNIQUE | For approval & payout emails | |
| city | VARCHAR(80) | Based-in city | |
| bank_account_no | VARCHAR(20) ENCRYPTED | For bank transfer payouts | |
| ifsc_code | VARCHAR(11) | Bank IFSC | |
| upi_id | VARCHAR(100) | UPI for instant payouts | |
| status | ENUM | DEFAULT 'pending' | pending / active / suspended |
| total_earnings | DECIMAL(12,2) | DEFAULT 0 | Cumulative paid out |
| created_at | TIMESTAMP | AUTO |
| Column | Type | Constraint | Description |
|---|---|---|---|
| product_id | UUID/INT | PK·AUTO | |
| manufacturer_id | FK→manufacturers | NOT NULL | Uploader |
| title | VARCHAR(200) | NOT NULL | SEO product title |
| slug | VARCHAR(220) | UNIQUE | URL-friendly SEO slug |
| category | ENUM | NOT NULL | bed/sofa/table/chair/wardrobe/cabinet/shelf/decor |
| material | VARCHAR(100) | Primary wood/material | |
| description | TEXT | Full description (SEO meta) | |
| images | JSON ARRAY | Array of uploaded image URLs | |
| manufacturer_price | DECIMAL(10,2) | NOT NULL | Base price from manufacturer |
| margin_pct | DECIMAL(5,2) | DEFAULT 40.00 | Platform margin % (40 or 50) |
| platform_fee | DECIMAL(10,2) | COMPUTED | = manufacturer_price × margin_pct/100 |
| listed_price | DECIMAL(10,2) | COMPUTED | = manufacturer_price + platform_fee → shown to buyer |
| approval_status | ENUM | DEFAULT 'pending' | pending/approved/rejected/live |
| approved_by | FK→admins | Which admin approved | |
| approved_at | TIMESTAMP | ||
| meta_title | VARCHAR(60) | SEO title override (60 chars) | |
| meta_description | VARCHAR(160) | SEO meta description (160 chars) | |
| created_at | TIMESTAMP | AUTO |
| Column | Type | Constraint | Description |
|---|---|---|---|
| buyer_id | UUID/INT | PK·AUTO | |
| full_name | VARCHAR(120) | NOT NULL | |
| VARCHAR(200) | UNIQUE | ||
| phone | VARCHAR(15) | NOT NULL | WhatsApp for order updates |
| delivery_address | TEXT | ||
| city | VARCHAR(80) | ||
| pincode | VARCHAR(10) | ||
| total_orders | INT | DEFAULT 0 | |
| total_spent | DECIMAL(12,2) | DEFAULT 0 | |
| created_at | TIMESTAMP | AUTO |
| Column | Type | Constraint | Description |
|---|---|---|---|
| order_id | VARCHAR(20) | PK · CS-2025-0001 | Human-readable order number |
| buyer_id | FK→buyers | NOT NULL | |
| product_id | FK→products | NOT NULL | |
| manufacturer_id | FK→manufacturers | NOT NULL | |
| porter_id | FK→porters | Assigned after purchase | |
| amount_paid | DECIMAL(10,2) | NOT NULL | Total buyer paid (listed_price) |
| manufacturer_payout | DECIMAL(10,2) | COMPUTED | manufacturer_price from product |
| platform_margin | DECIMAL(10,2) | COMPUTED | platform_fee from product |
| porter_fee | DECIMAL(8,2) | 1% of order, min ₹200, max ₹800 | |
| net_platform_revenue | DECIMAL(10,2) | COMPUTED | platform_margin − porter_fee |
| order_status | ENUM | DEFAULT 'placed' | placed/confirmed/in_transit/delivered/return_raised/completed/cancelled |
| payment_status | ENUM | DEFAULT 'pending' | pending/paid/failed/refunded |
| delivered_at | TIMESTAMP | Confirmed delivery time | |
| return_window_ends | TIMESTAMP | delivered_at + 7 days | |
| manufacturer_paid_at | TIMESTAMP | Payout timestamp | |
| porter_paid_at | TIMESTAMP | ||
| placed_at | TIMESTAMP | AUTO |
| Column | Type | Constraint | Description |
|---|---|---|---|
| porter_id | UUID/INT | PK·AUTO | |
| full_name | VARCHAR(120) | NOT NULL | |
| phone | VARCHAR(15) | UNIQUE | WhatsApp for delivery alerts |
| city | VARCHAR(80) | Operating city | |
| vehicle_type | VARCHAR(60) | Tempo/truck/bike | |
| payment_mode | ENUM | DEFAULT 'per_delivery' | per_delivery / monthly |
| upi_id | VARCHAR(100) | Instant UPI payments | |
| status | ENUM | DEFAULT 'active' | active/on_leave/suspended |
| total_deliveries | INT | DEFAULT 0 | |
| total_earned | DECIMAL(10,2) | DEFAULT 0 | |
| rating | DECIMAL(3,2) | Avg. out of 5 | |
| created_at | TIMESTAMP | AUTO |
| Column | Type | Constraint | Description |
|---|---|---|---|
| txn_id | VARCHAR(30) | PK · TXN-20250001 | |
| order_id | FK→orders | NOT NULL | |
| txn_type | ENUM | NOT NULL | buyer_payment / manufacturer_payout / porter_payment / refund / platform_earning |
| amount | DECIMAL(10,2) | NOT NULL | |
| direction | ENUM | NOT NULL | credit/debit from platform view |
| from_entity_id | VARCHAR | buyer_id / platform | |
| to_entity_id | VARCHAR | manufacturer_id / porter_id / buyer_id | |
| payment_gateway_ref | VARCHAR(100) | Razorpay/PayU reference ID | |
| status | ENUM | DEFAULT 'pending' | pending/processing/completed/failed |
| notes | TEXT | Admin notes / reason | |
| created_at | TIMESTAMP | AUTO | |
| completed_at | TIMESTAMP |
| Column | Type | Constraint | Description |
|---|---|---|---|
| return_id | UUID/INT | PK·AUTO | |
| order_id | FK→orders | NOT NULL | |
| buyer_id | FK→buyers | NOT NULL | |
| manufacturer_id | FK→manufacturers | NOT NULL | Notified but NOT responsible |
| reason | ENUM | NOT NULL | damaged/wrong_item/quality_issue/changed_mind/other |
| buyer_images | JSON ARRAY | Photos submitted by buyer | |
| admin_decision | ENUM | approved_full/approved_partial/rejected | |
| refund_amount | DECIMAL(10,2) | Amount returned to buyer | |
| manufacturer_deduction | DECIMAL(10,2) | Deducted if manufacturer's fault | |
| platform_absorbs | DECIMAL(10,2) | Platform absorbs if buyer's fault | |
| return_porter_id | FK→porters | Porter for return pickup | |
| status | ENUM | DEFAULT 'raised' | raised/under_review/pickup_scheduled/picked_up/inspected/refunded/rejected |
| raised_at | TIMESTAMP | AUTO | |
| resolved_at | TIMESTAMP | ||
| admin_notes | TEXT | Internal only — not shown to parties |
| Column | Type | Constraint | Description |
|---|---|---|---|
| custom_order_id | VARCHAR(20) | PK · CS-CUS-0001 | |
| buyer_id | FK→buyers | NOT NULL | |
| furniture_type | VARCHAR(80) | NOT NULL | |
| description | TEXT | NOT NULL | Buyer's design description |
| reference_images | JSON ARRAY | Buyer reference photos | |
| budget_range | VARCHAR(50) | ||
| assigned_manufacturer_id | FK→manufacturers | Admin assigns after review | |
| manufacturer_quote | DECIMAL(10,2) | Manufacturer's base quote | |
| final_price | DECIMAL(10,2) | Quote + platform margin | |
| advance_paid | DECIMAL(10,2) | 50% at order confirmation | |
| balance_paid | DECIMAL(10,2) | 50% before dispatch | |
| return_eligible | BOOLEAN | DEFAULT FALSE | Custom items NOT returnable by default |
| status | ENUM | DEFAULT 'submitted' | submitted/reviewing/quoted/advance_paid/in_production/balance_due/dispatched/delivered/completed/cancelled |
| created_at | TIMESTAMP | AUTO |
Within 7 days via website. Upload photos, select reason. Manufacturer NOT contacted initially.
Admin reviews evidence. Approves or rejects. Manufacturer notified only as observer.
Porter collects from buyer. Porter paid for return trip too.
Condition assessed at CraftSpace hub. Decision on fault and refund amount made.
Full or partial refund to buyer. Manufacturer charged only if their fault. Platform absorbs rest.
Defect or wrong item: manufacturer payout reduced. Buyer refunded fully. Manufacturer still gets ~70% if item resellable.
₹500–1000 deducted for delivery + inspection. Manufacturer paid in full. Item relisted in showroom.
Porter accountability or platform absorbs. Manufacturer always paid in full.
The teak bed arrived perfectly packed. Admin handled my return request for a small chip with zero hassle — refund in 3 days. Incredible service.
I submitted a custom sofa design with reference photos. Got a quote in 24 hours, and the finished piece looked exactly like my sketch. Mind blown.
I receive my payment automatically after 7 days. No chasing, no calls. My 60% lands in my UPI before I even think about it. Best platform in 15 years.