There's a huge gap between a project that "handles payments" in a demo and a system that takes a stranger's real money, settles it through a bank, and can't afford to get it wrong. I've shipped the second kind — a food-delivery marketplace running live in production, taking real orders.
That's Saturdays, and the engineering that mattered was all in the one path a customer will never forgive you for breaking: checkout.
The part nobody sees is the part that counts
A storefront is easy. A menu is easy. The reliability of the ordering-to-payment flow is where a food-delivery product lives or dies, because that's the only part a customer cannot forgive getting wrong. So that's where the engineering went.
Saturdays is a React + TypeScript front end built on MUI and Radix primitives — accessible, composable, keyboard-navigable as the surface area grew. But the interesting problems were underneath the UI.
Two gateways, one button
The hardest requirement: a customer should never be able to tell how many payment providers sit behind the button. Saturdays integrates both Stripe (cards) and PhonePe (India-native UPI) behind a single, unified checkout. Those two rails have completely different flows, states, and failure modes — the work was presenting them as one coherent, trustworthy experience while keeping their handling correct and separate underneath.
Cards and UPI feel like the same button. The mess is absorbed on the customer's behalf, which is exactly where complexity belongs.
Treating payments as the critical path
Every failure-sensitive state in the payment step is handled deliberately rather than optimistically — because "it usually works" is not a standard you can ship when real money moves. Orders sync to the restaurant-operations backend over REST and webhooks, so a placed order becomes a live kitchen ticket without a human re-keying it — and getting that sync trustworthy over webhooks, not just working on the happy path, is the difference between a storefront and an operations platform.
Why this is the work I'm proudest of
Anyone can build something that looks finished. Shipping something that runs — that serves live traffic, moves real money through two independent gateways, and stays reliable when a customer is mid-checkout — is a different discipline entirely. It's where "it works on my machine" stops being good enough and engineering actually starts.
The full architecture, the payment integration, and the cross-product sync are on the project page.
👉 See it live: www.divyakush.com/projects/saturdays
Divyakush Punjabi — Full-Stack & AI Systems Engineer
🌐 https://www.divyakush.com · 💼 LinkedIn · 💻 GitHub
Top comments (0)