01 — Enterprise system
Operations Platform
An end-to-end ERP running a two-plant textile business — stock inward, order punch, approvals, cutting, inter-plant shipping, delivery challans and a per-garment retail production line — used daily by 150+ people across Delhi and Noida.
Sole engineer — requirements gathered on the shop floor, data model, Postgres RPCs, UI and releases.
- Stock mismatches reduced
- 97 %97%
- Holds, availability views and trigger-based deduction replaced manual stock adjustments.
- Challan errors since go-live
- 00
- Scan-to-challan with an accountant verification gate before goods move.
- Order punch → delivery challan
- ≤ 30 min≤30min
- Single plant; ~1 hour cross-plant. Stock and bundle availability is instant — previously this time went into manually confirming what was in stock.
- Fabric stock recovered
- 1,790 m1,790m
- Reconciliation audit put physically present fabric back on the books after silent import failures.
- Plants
- 2
- Daily users
- 150+
- Orders / month
- ~300
- Migrations
- 280+
- TanStack Start
- React 19
- TypeScript
- PostgreSQL
- Supabase
- Cloudflare Workers
- Bun
Rebuilt stage by stage while both plants ran on it daily — additive, idempotent migrations, a repo-vs-live schema drift check, and an append-only audit trail.
How it helps the business
- 01Inventory that matches the floor97% fewer stock mismatches; overselling is surfaced before approval instead of at the cutting table; ~1,790 m of real stock reconciled back onto the books.
- 02Order to challan in under 30 minutesPunch → delivery challan in ≤ 30 min for one plant, ~1 hour across plants.
- 03Approvals that can't half-saveAn approval either fully happens or doesn't; every stage change is audited.
- 04One number, end to endEvery bundle is traceable from order line to customer document.
- 05Scan-to-challan dispatchZero challan errors since go-live — the GST document lists only what physically left the building.
- 06Paper registers → a live production lineAny garment's full history is one scan away, from order punch to delivery.
- 07Built for the shop floorCutters and tailors use the system without training manuals.
Live · login required — link on request
02 — B2B platform
Private B2B Catalogue
A private B2B fabric catalogue for wholesale buyers — live stock by bundle and cut length, online ordering and instant proforma invoices — wired directly to the ERP so stock is never updated by hand.
Sole engineer and designer — product, UI/UX, graphics, web + iOS app, edge workers and release.
- Active buyers
- 250 +250+
- Approved wholesale buyers on web and iOS.
- Orders placed in-app / month
- 180 +180+
- Buyers order directly against live stock — no calls, no chat re-typing.
- Manual stock updates
- 00
- Stock flows straight from the ERP — no more phone calls or WhatsApp messages to confirm availability.
- Proforma invoice
- 1 click1click
- Generated as a PDF from the order, on demand.
- Platforms
- Web + iOS
- Edge workers
- 3
- Active buyers
- 250+
- TanStack Start
- React 19
- TypeScript
- Supabase
- PostgreSQL
- Cloudflare Workers
- Capacitor
- Bun
One codebase ships to web and iOS via Capacitor; serverless edge workers handle admin actions, notifications and PDF generation; signed (HMAC) webhooks between the database and the notifier.
How it helps the business
- 01Stock without the phone callsZero manual stock updates; buyers check availability themselves, anytime.
- 02Order online, not over chatOrders enter the pipeline structured and correct, with no re-keying.
- 03Proforma invoice on demandBuyers get a proforma the moment they need it.
- 04Access control from inside the appThe business controls exactly who sees what, without a developer.
- 05Back-in-stock, automaticallyInterested buyers are notified the moment stock returns.
- 06Web and iOS from one codebasePublished on the App Store, maintained alongside the web app.
03 — AB Measure — bespoke measurement system
Measurement App
A bespoke measurement system for a couture label — garment-ready measurement sheets, mandatory reference photos and voice notes, captured on a phone at the client's side and printed straight onto the production job card.
Sole engineer and designer — measurement schema with the master tailors, mobile-first UI, PDF cutting sheets, Android build and ERP integration.
- Records captured / month
- 250 +250+
- Measured on a phone at the client's side, in the fitting room.
- Legacy register entries digitised
- 1,000 +1,000+
- Bulk-imported from paper registers with the original serial number kept searchable.
- Structured measurement fields
- 7373
- 37 menswear + 36 womenswear — upper body, bottom, lengths and construction specs, plus custom fields.
- Overwritten measurements
- 00
- Append-only and versioned: a re-measure creates a new version, history is never lost.
- Platforms
- Web + Android
- Garment sheets
- Menswear + Womenswear
- Records / month
- 250+
- React 19
- TypeScript
- Vite
- Tailwind CSS
- Supabase
- PostgreSQL
- Cloudflare Workers
- Capacitor
Versioned, append-only records enforced by database triggers; an EAV value model so new garments and custom fields need no migration; offline-safe auto-drafts; shares one database with the ERP so the job card reads the latest sheet at print time.
How it helps the business
- 01Paper registers → a searchable recordAny client's measurements are one search away, including years-old register entries.
- 02No guessing on the cutting floorThe pattern master works from exact, labelled values — never a guess.
- 03Photos and voice, not just numbersThe floor sees the client the way the measurer did.
- 04History that can't be overwrittenEvery change is a new version; the full fitting history stays intact.
- 05Straight onto the job cardZero re-copying between measurement and production.
- 06Built for the fitting roomCapture anywhere; nothing lost if the app closes mid-fitting.
Shipped · in daily use · link on request
04 — Shopify storefronts — two couture labels
Commerce Storefronts
Two Shopify storefronts for an Indian couture house — a made-to-measure flagship and a contemporary ready-to-wear line — custom-built in Liquid with no third-party apps, mixing price-on-request pieces with direct checkout and feeding custom-size orders into the measurement system.
Sole developer and designer — theme architecture, Liquid sections, design system, made-to-measure flow, performance and releases.
- Storefronts shipped
- 22
- A made-to-measure flagship and a separate ready-to-wear line, each with its own design system.
- Third-party apps
- 00
- Every feature built natively in Liquid — faster pages, no per-app fees, nothing breaking on app updates.
- Products on price-on-request
- 116116
- A tag switches a product from checkout to enquiry — no developer needed.
- Made-to-measure fields
- 1919
- Captured at checkout and matched to the measurement system's schema.
- Storefronts
- 2
- Third-party apps
- 0
- Shopify OS 2.0
- Liquid
- JavaScript
- CSS
- Shopify CLI
- GTM
- Meta Ads
Everything native in the theme — no app scripts on the storefront; tag-driven merchandising so staff switch a product between checkout and enquiry without code; changes previewed locally with Shopify CLI and pushed only once confirmed.
How it helps the business
- 01Price on request, without a plugin116 products switched to enquiry by tag; the team changes it without code.
- 02Made-to-measure at checkoutOnline custom orders arrive structured and ready for production.
- 03Enquiry to conversation in one tapA buyer reaches the atelier from any product in one tap.
- 04Two brands, one engineering baseA second storefront launched on a proven base.
- 05Fast, app-free pagesLighter pages that marketing can still measure.
- 06Safe releases on a live storeRedesigns shipped to a live store without downtime.
05 — Mobile web app · Capture pipeline
Swatch Scanner
A capture-and-catalogue tool for physical samples — photograph a swatch, OCR reads the article number off its label, and the image is saved against that article; works one at a time or in bulk.
Sole engineer and designer — capture flow, detection with manual fallback, storage model, bulk upload and deployment.
- Swatches catalogued
- 1,000 +1,000+
- Each image filed against its article number, single capture or bulk.
- Capture → saved
- 1 shot1shot
- Photograph the swatch; OCR reads the article number off the label and files the image against it.
- Typing when detected
- 00
- Manual entry only appears when detection is unsure.
- Upload mode
- BulkBulk
- Drop a folder of swatch photos; each is matched to its article in one pass.
- React 19
- TypeScript
- Vite
- Tailwind CSS
- Claude API (OCR)
- Cloudflare Workers
- Bun
OCR never blocks the user — a confident read that matches the article-number pattern saves instantly, an uncertain one drops to a pre-filled manual field; uploads are idempotent per article so re-scans replace, not duplicate.
How it helps the business
- 01From photo to filed in one stepEvery sample image is findable by its article number.
- 02Detection with a safety netFast on the happy path, never wrong on the hard one.
- 03Bulk when the backlog is bigA whole backlog catalogued in one session.
USE CASES
- ·Digitising a physical sample library into a searchable catalogue
- ·Feeding product images into B2B catalogues and storefronts
- ·Stock audits — photograph and match items against records
- ·Onboarding new inventory batches in minutes instead of hours
06 — Open-source fork · Extended
Encrypted QR
Password-protected QR codes — encrypt a message into a QR that only someone with the password can read. An open-source project I forked and redesigned end to end for a cleaner, faster encrypt → share → decrypt experience.
UI redesign and UX customisation on top of an MIT-licensed open-source base — original encryption logic by kangabru, credited.
Fork of kangabru/encrypt-qr-codes (MIT). Encryption logic is the original author's; the interface and flow are my redesign.
- Type
- Open-source forkOpen-source fork
- Licence
- MITMIT
- My scope
- UI + UXUI + UX
- Next.js 14
- React 18
- TypeScript
- Tailwind CSS
- Formik
- ZXing / qr-scanner
- Jest
- Vercel
How it helps the business
- 01A redesigned interfaceApproachable enough to share with anyone who needs to send a private code.
- 02A clearer encrypt → share → decrypt flowFewer wrong turns from first visit to decrypted message.
- 03Open source, properly creditedA clean, licence-compliant contribution on top of an existing project.