BACK TO SELECTED WORK
0→1 · SOLO DESIGN & BUILD
First home-food delivery app in Sivakasi, Tamil Nadu

Vidya's Kitchen

The problem

In Sivakasi, home food still moves through WhatsApp and memory — a sentence to the kitchen, no receipt, no slot, no driver handoff. Swiggy lists restaurants; nobody had built for a home kitchen that cooks to order.

The solution

I shipped the first dedicated product in town: order in plain language on WhatsApp or a PWA, one priced ticket through kitchen board and driver app — 15 km radius, 24 hours to cook, same bill everywhere.

Skip the restaurant. Home-cooked, hygienic food from Vidya's Kitchen — order in one WhatsApp message or the app, delivered to your door in Sivakasi.

This case study follows one thread: why Sivakasi is different → how customers order → how the kitchen runs → what we had to decide along the way.

TimelineFeb 2026 scoping · Mar–Sep 2026 build · Live in production
RoleSolo product designer & developer
MarketSivakasi, Tamil Nadu
Live site
01Why generic delivery apps fail here

Before any screen: each stage of the journey — and why a dark-store playbook does not map to home-cooked food in Sivakasi.

StageGoalPainFixWhy not Swiggy?
DiscoverFind what the kitchen cooks todayChat history is the menu. New customers do not know gravy names or sizes.Installable PWA with photos and sizes. WhatsApp welcome includes a one-line order example.Generic apps assume a searchable restaurant list. Here the menu lives in yesterday's chat and word of mouth — discovery had to work inside WhatsApp first.
OrderSay dish, size, day, and meal without a formFree text is messy. “Chicken” is five gravies in this kitchen.Bot keeps the specific dish name; photo cards when several match. App uses a size drawer: 500gm, 1kg, or both.Not “pick category → subcategory”. Customers already send one Tamil-English sentence — the product had to parse that, not replace it with menus.
PayKnow the full amount before payingFees feel like a surprise on the bank screen — trust breaks on the last tap.Full bill before confirm: items, offer, Rs 20 packing, Rs 35 delivery, 5% GST on food. Razorpay online or cash at door.Cash at the door is normal here. Payment status and food status are separate — a box can be on the bike before Razorpay clears.
FulfillKnow the box is moving“Where is my order?” should not need an order number nobody wrote down.Same reference on app, bot, kitchen board, and driver job. Live status inside the 15 km Sivakasi radius.No call centre. The customer, kitchen owner and driver all share one phone-led thread — ops had to mirror that, not invent ticket numbers.
ReturnFix a bad box or cancel in timeA complaint that names a dish gets mistaken for a new order.Cancel until 12 hours before slot. “Something wrong” picks order by dish and date, then files a note for the kitchen.Cook-to-order means 24 hours to prep. Cancel rules are the product promise — not a hidden policy page.
↳Why home food · WhatsApp first

Not another meal outside

Delicious, clean, hygienic home food — cooked the way a family kitchen would, delivered to your door in Sivakasi.

For bachelors, working professionals, and families who are tired of restaurant grease. The headline feature: pack a full order into one WhatsApp sentence — dish, qty, day, meal, payment — and get a server-priced confirm card. No app store required.

WhatsApp bot · live product · main differentiator

One message. Full order.

I have not seen another food-ordering bot do this: a returning customer sends one sentence — dish, quantity, day, meal, payment — and the server returns a priced confirm card with their saved address. Typing is optional: tap Quick Reorder for frequent items, or say “Hi” for Menu and Help. Nothing is booked until Confirm.

  • One sentence → full bill
  • Not menu trees · not forms
  • Quick Reorder · zero typing
  • Server-priced · Confirm to book
Highlight
WhatsApp one-message order parsed into itemized confirm card

One sentence → itemized bill · saved address · Confirm

Returning path
WhatsApp greeting for returning customer with quick action buttons

“Hi” → Quick Reorder · Menu · Help

No typing
WhatsApp quick reorder sheet with frequently ordered dishes

Tap Quick Reorder → your usual frequent items

↳Customer PWA · installable app

Customer PWA · installable · live

Same menu · same bill · map pin on your phone

Installable PWA — OTP login, drop a Mapbox pin inside the 15 km radius, save Home and Work. Returning users land on a personalised home feed with kitchen picks and a one-tap link back to WhatsApp.

  • OTP · no password
  • Map pin · saved places
  • Sivakasi radius enforced
  • Hey, {name} · kitchen picks
Step 01
PWA login with pre-filled name and mobile number

Hey, Santhosh → Send OTP

Step 02
OTP entry with digits filled in

Enter the OTP · sent to saved number

Step 03
Map pin picker with saved addresses and Sivakasi delivery note

Map pin · Home / Work · Confirm location

Step 04
Personalised PWA home with location, kitchen picks, and Vidya Bot

Midday feast? · Hey, Santhosh · kitchen picks

↳Kitchen ops · dashboard & driver

Act 03 · After the order confirms

Kitchen dashboard & driver handoff

WhatsApp and the PWA get the customer to Confirm — then the same order row hits the kitchen board, gets assigned, and goes out on the road. No duplicate entry, no phone calls to the driver.

Kitchen dashboard

Vidya sees new → preparing → ready on one board. Revenue and festival pricing sit on the same login — the nightly AI pricing agent proposes changes; she approves every percent before it goes live.

  • Accept · reject pipeline
  • Revenue & meal mix
  • AI pricing · festival mode

Driver app

Drivers log in with a kitchen-issued PIN. Jobs appear when food is ready — navigate, call the customer, mark cash or UPI, swipe to delivered. Kitchen gets the same status the customer sees in the PWA.

  • PIN login
  • Live job queue
  • Cash · UPI · delivered
02Information architecture & user flows

Four surfaces — PWA, WhatsApp, kitchen dashboard, driver app — branch from one Supabase order record. Scroll to watch each diagram build in.

Information architecture

One order record · Supabase

Four surfaces · same prices, slots, and reference on every screen

PWACustomer PWA
01Home / menu · chicken, egg, mutton + photos
02Dish → cart → schedule (date + breakfast / lunch / dinner)
03Address · map pin in Sivakasi, saved places, order for someone else
04Pay · full bill, Razorpay or cash at door → orders & live tracking
WhatsAppWhatsApp bot
01Welcome + one-line order example in chat
02Route support / complaint / food · draft dish, size, day, meal
03Server prices draft · confirm card with packing, delivery, GST
04Payment link or cash · track · call kitchen · file complaint
DashboardKitchen dashboard
01Live orders board · revenue by meal
02Move ticket · paid → preparing → ready → dispatch
03AI pricing cards · festival offers · approve every percent
04Drivers · reviews · complaints · WhatsApp inbox
DriverDriver app
01Phone login · OTP
02Assigned jobs · same order reference as customer chat
03Mapbox navigation to drop pin inside radius
04Mark delivered or not delivered · cash collection if needed

User flows

Start

One sentence · dish · qty · day · meal · payment

Decision 02
Quick Reorder or type?
Step 03Tap usual from frequent list · no typing required
Step 04Server parses sentence · matches menu · prices draft
Step 05Saved address · confirm card · nothing booked yet
Decision 06
Confirm order?
OutcomeSame ticket · kitchen board · receipt in thread

Horizontal flow · scroll if needed · switch tab to replay

03Six problems worth solving

Each block is one decision — what broke, why it was hard, what we tried, what worked, and the outcome.

01

Design for chat, not the App Store

WhatsApp

Sivakasi already orders on WhatsApp. I built for that first.

What happenedCustomers message the kitchen, name a gravy, and wait for a person. No local app existed to copy.

Why it was hardTrust lives in the chat, not in an install prompt. One builder, so every wrong bet cost build time.

First try · failedA menu-driven bot with lists and “pick 1-5”. Tidy, and it broke on the first normal sentence.

What workedTwo doors, one system. The PWA handles browsing, the map pin and the receipt. WhatsApp handles “mutton gravy 500gm tomorrow dinner, cash”: the bot fills the order and asks only for what is missing.

OutcomeThe product meets the town where it already orders. The app is the upgrade, not the gate.

02

“Call the kitchen” opened an empty cart

WhatsApp

One inbox, four intentions.

What happenedOrders, complaints, tracking and call requests all arrive as plain text. “Call the kitchen” returned an empty cart. “Black pepper chicken gravy, 8th oct lunch, 500gm, cash” collapsed into a generic chicken list and dropped the date, meal and payment.

Why it was hardThe bot must decide what a message is before it replies, with nobody watching at midnight.

First try · failedSend anything long or food-like to the AI. It sounded flexible and misrouted the simplest jobs.

What workedA fixed order of doors: support, commands, complaints, then food sentences. During checkout, a side question gets answered and the pending step is asked again.

Outcome“Call the kitchen” shows recent orders by dish and date with a call button. Named dishes keep size, day, meal and payment. I fixed it by reproducing bad sentences in tests.

03

The AI drafts. The kitchen prices.

WhatsApp

A wrong total is a charge, not a UX bug.

What happenedThe risk was a model path creating an order that was not a real basket, such as an empty order with an invented total. With Razorpay behind it, that is real money.

Why it was hardCustomers want the bot to just take the order, but confirming cannot feel like a form.

First try · failedGiving the model more control over building the order. Quicker to demo, unsafe to ship.

What workedThe model only fills a draft. The server matches the dish, reads the menu price, adds Rs 20 packing, Rs 35 delivery and 5% GST on food, and checks the slot. Nothing is written until the customer confirms. The app and WhatsApp use the same function.

OutcomeOne bill everywhere. The bot can mishear a dish, but it cannot invent a price.

04

24 hours to cook, 12 to cancel

PWA

Delivery apps trained people to expect “now”. This kitchen cooks to order.

What happenedIngredients are bought per order, so “30 minutes” would have broken the kitchen on day one.

Why it was hardThe rule had to hold in the app, the bot and the dashboard, or customers would find the weakest door.

What workedBreakfast, lunch and dinner slots, booked at least 24 hours ahead. Self-serve cancel until 12 hours before the slot. A paid online cancel is refunded in full: food, packing, delivery and GST. Cash was never charged.

OutcomeThe kitchen preps against a real calendar, and the customer sees the reason inside the order.

05

Four surfaces, one ticket

Dashboard

“Where is my order?” should never need an order number.

What happenedCustomer, kitchen, driver and bot could each describe a different order for the same phone number. A cash order can be on the bike before payment.

Why it was hardFood status and payment status are different. One status field would lie to someone.

First try · failedAsking customers to remember an order number. It failed in real chats.

What workedOne reference on every surface. Food moves one way: waiting for payment, paid, confirmed, preparing, ready, out for delivery, delivered. Payment is tracked separately. Undelivered is a real status.

OutcomeA phone call, a WhatsApp thread and the dashboard all point at the same order.

06

Festival week, planned a week early

Dashboard

Discount the wrong dish and you buy complaints.

What happenedFestival weeks fill fast, and a decision made the morning of is too late. A quiet dish and a badly rated dish look identical on a sales chart.

Why it was hardThe kitchen will not read spreadsheets at night, and I did not want a model setting a percent on its own.

First try · failedTreating low sales as the only signal. That would have discounted a poorly rated dish.

What workedOne nightly job at 2:00 IST. About 7 days before a festival it raises a card with the dates and a suggested percent (20% with no history). A liked dish with under 3 orders in 7 days gets a suggestion. A rating under 3.0 is flagged as a quality issue and cannot be approved as an offer. Nothing goes live until the kitchen approves.

OutcomeThe week before a festival becomes a decision, not a scramble. Bad dishes stay off the promo list.

04Design system

Three product surfaces plus the marketing landing — same Outfit type, different jobs. Values below trace to the design-system PDF token index and measured harness specs.

Light glass at home — soft neutrals and #BD2320 primary so food photography leads; button 56px / radius 20 from PDF harness.

Icons
Phosphor
Radius
16–28 cards · 20 primary
Touch
56px primary
design-system.pdf · C.* tokens

Outfit

Ag500
Ag600
Ag700
Ag800
Ag900

Vidya's Kitchen — home meals in Sivakasi.

Customer PWA home screen with meal schedule and browse menu entry points.

Customer · Home.

Design system PDF — cover
Design system PDF — components
Design system PDF

8 pages · 1.9 MB · v2.2

05Ops visibility · Tableau

The in-app board handles today’s tickets. Tableau is the weekly read — meal mix and dish-level rupees from the same order data the kitchen already trusts, so Vidya can spot patterns before the nightly pricing cards fire.

  • Meals · order rupees

    Dinner carries the most revenue in this slice, then lunch, then breakfast — useful when planning prep and driver windows, not just menu photos.

  • Dishes · item rupees

    Gravies and specials rank by rupees, not order count alone — Mom’s Recipe chicken gravy and chilly chicken gravy sit at the top; wings and smaller gravies trail, which is exactly what the pricing agent should not treat as “the same dish.”

  • Why both

    Dashboard = act now. Tableau = compare weeks. AI pricing suggestions still need a human approve — this chart is context, not autopilot.

Tableau · Supabase-fed exports
Tableau dashboard — meals and dishes by order rupees
Live export · meals + top dishes by rupees
06Stack & architecture

Client codebase is confidential. The explorer and sync-contract path are portfolio illustrations — not files in the repo. Structure and rules are redacted; no API keys or live order data.

Skills

  • TypeScript
  • React 19
  • Next.js 15
  • Tailwind CSS 4
  • Figma

Tools

  • Supabase
  • Razorpay
  • Firebase Auth
  • Twilio OTP
  • Mapbox
  • WhatsApp API
  • OpenAI
  • Google Gemini
  • Vercel
  • Tableau

Project structure · conceptual

vidyas-kitchen — VS Code

Explorer

vidyas-kitchen
surfaces
TScustomer-pwa.tsx
TSwhatsapp-bot.ts
TSkitchen-dashboard.tsx
TSdriver-app.tsx
core
TSnext.config.ts
supabase
SQLschema.sql
integrations
TSrazorpay.ts
TSauth.ts
TSmaps.ts
TSai-models.ts
pipeline
MDsync-contract.md
TSorder-flow.ts
order-flow.ts
Click folders to expand · click files to preview · not the real repo layout

Sync contract · redacted snippet

system/sync-contract.mdRedacted

Portfolio illustration — this path is not in the client repo.

Four KEY marks: never create an order · never set a price · write only after confirm · one row for every surface

07What I can stand behind
  • ✓Live at vidyaskitchenhome.com — customer PWA, kitchen dashboard, driver app, and WhatsApp bot share one system.
  • ✓WhatsApp and the app use the same prices, slots, and order record.
  • ✓Bot misroutes were reproduced and covered with tests before treated as fixed.
  • ✓A home kitchen can take a slot order, cook to it, dispatch a driver, and answer “where is my order?” without a marketplace in the middle.

Vidya's Kitchen

Designed & developed by Simon Santhosh

Feb 2026 scoping · Mar–Sep 2026 build · Live in production

Back to work ↑