parmaryash.com delhi, india / utc+5:30

Yash
Parmar

I build backend systems and ship products end to end.

I designed, built and deployed Vakoza, a live multi-tenant AI WhatsApp receptionist, on my own. By day I build an inventory and operations system for hotels and restaurants at CSAT Systems.

systems currently running
loading the lattice scroll
01 / vakoza

A live multi-tenant SaaS I designed, built and deployed on my own.

Vakoza answers inbound WhatsApp enquiries and books appointments for clinics in India. It is deployed and Meta-verified. vakoza.com

stack
Node.js, Express, Supabase with Row Level Security, Railway.
channel
WhatsApp Business API on Meta's official channel under the ISV model. Meta Business Verification completed, and Embedded Signup shipped so clients connect an existing number through Coexistence.
conversation
Google Gemini handles the logic in Hindi, Hinglish and English. ElevenLabs for voice.
billing
Webhook-driven Cashfree subscriptions.
isolation
Tenant isolation enforced at the database layer, with a full security and architecture review before launch.
how it was built
An AI-assisted workflow, Claude Code, ChatGPT and Gemini across architecture, implementation and review.
Vakoza admin dashboard, clients list
dashboard, clients
Vakoza dashboard, clinic overview
dashboard, clinic overview

How a message becomes a booking

Meta posts the inbound message to a signed webhook. The handler resolves the tenant from the WhatsApp business number before anything else runs, so every query after that point is scoped to one clinic by a Row Level Security policy rather than by application code I could forget to write. Gemini gets the conversation with only that tenant's context, its services, its hours, its booked slots, which keeps the prompt small and the reply cheap. Writes go back through the same tenant boundary, and Cashfree subscription events arrive on a separate verified webhook so billing state never depends on the conversation succeeding.

The part worth defending is the ordering: tenant first, then model. Getting that backwards is how multi-tenant products leak. The lattice at the top of this page is that idea drawn: one tenant lit, the rest dark, because the database refuses the read.

request path tap a stage
inbound message meta signs the webhook tenant resolved from the business number, first row level security scope enforced in the database gemini replies hindi, hinglish, english booked, then billed cashfree on its own webhook
02 / other work

Smaller things I have built outside the two above, sites I designed and shipped, and automation workflows I run in n8n.

02 / work

Software Developer, CSAT Systems

May 2024 to present, Delhi

I work on an inventory and operations management system for hotels and restaurants, on .NET 8, ASP.NET Core MVC, Entity Framework Core 8, MySQL and Crystal Reports.

  • 01Build and maintain both production layers, the REST API on .NET 8 and the Razor web layer with an HTTP proxy, which together drive the whole inventory and operations workflow.
  • 02Implemented inventory transaction types end to end, purchase requisition, GRN, sales order, production, consumption, internal transfer, wastage, quality inspection, with audit trails and secured endpoints.
  • 03Built and integrated the Crystal Reports layer, stock valuation, ledger summaries, supplier-wise reports, pending orders, expiry tracking, GST registers, which client management uses as its primary reporting interface.
  • 04Implemented FIFO/LIFO lot allocation including lot-split, transfer-out and receipt logic, following the costing method configured per outlet.

The one that was actually hard

Lot allocation. Stock leaves a warehouse in pieces: a transfer takes part of one lot, a sale takes the rest of it plus part of the next, and each outlet may be costing FIFO or LIFO. So the allocator cannot just pick a lot, it has to split one, carry the remainder forward, and post a cost for each piece that still reconciles against the valuation report.

I ended up treating allocation as its own step that returns a list of lot-and-quantity pairs, and let the transaction types call it rather than each implementing their own version. The receipt, transfer-out and split paths then had one place to be correct instead of eight.

03 / how i work

I use AI tooling as a development workflow, not as autocomplete. Claude Code, ChatGPT, Gemini, Perplexity and DeepSeek, with scoped context engineering, token-efficient prompting and an eye on cost.

That is how a production SaaS got shipped by one person: architecture argued out first, implementation reviewed against it, security checked before launch. The judgement about what to build and what to reject stays mine.

04 / skills
languages, frameworks
C#, .NET 8, ASP.NET Core MVC, ASP.NET Web API, Entity Framework Core 8, LINQ, JavaScript, Node.js, Express
frontend
jQuery, Bootstrap, HTML5, CSS3, Razor views, AJAX, DataTables, Select2
databases
MySQL, Supabase
reporting
Crystal Reports 13, parameterized report design, runtime integration, multi-page layouts
apis, auth
REST API design, JWT bearer authentication, OAuth, Swagger and OpenAPI, HTTP proxying, webhooks
integrations
WhatsApp Business API, Meta Embedded Signup, Google Gemini API, ElevenLabs, Cashfree, Razorpay
tools
Git, GitHub, Visual Studio 2022, Postman, IIS, Railway, Notion
05 / education

B.Tech, Computer Science. Graphic Era Hill University, Dehradun. 2020 to 2023

Diploma, Computer Science. Subharti University, Meerut. 2017 to 2020