A full restaurant platform for Karachi Chaat House
Everything a busy Chicago restaurant runs on: a custom site, online ordering with first-party delivery, a self-serve kiosk, a live digital menu board, and SMS loyalty at checkout. We designed and built it, and we have run it in production since April 2026. All of it is live, so you can check it yourself.
These numbers come from Google. Speed: Chrome UX Report via PageSpeed Insights — 75th percentile, mobile, all pages on karachichaathouse.com, Sep 4 – Oct 1, 2026. Search: Google Search Console, April 1 to September 28, 2026. Run the same speed test on PageSpeed Insights
The problem
A busy restaurant needs more than a website. It needs one system that takes orders online and at the counter, dispatches its own delivery, keeps the menu on the wall in sync with the register and rewards regulars. It has to stay fast and stay up through a midnight rush. When the rush hits, it tells guests the honest wait, a number the kitchen can keep. Off-the-shelf tools each cover one piece and leave the gaps between them to the staff.
The brief was one hand-built platform with no page builder or template and nothing rented, fed from a single source of truth at the point of sale. It had to pass Core Web Vitals on real phones and be hardened enough to move real money safely. Then we had to keep it running in production ourselves. That work is what we deliver as e-commerce & POS systems engineering and restaurant websites.
Who owns what
What we built
Custom Jamstack site
Designed and coded by hand, with original food photography and structured data on the menu. It's fast because of how it's built.
Ordering + first-party delivery
A Square-powered menu with online checkout. Delivery is dispatched through Uber Direct. Payment is taken at checkout. If Uber can’t dispatch, the order is refunded in full automatically. On delivery orders the whole tip is passed to Uber Direct as the courier’s tip.
Self-serve ordering kiosk
An in-store tablet that reads the same Square menu and pricing rules as the web and takes payment on its own card terminal, so the counter doesn't become the bottleneck at peak.
Live digital menu board
A three-screen menu wall plus a large-format ad loop, fed live from the point of sale. Change a price on the register and it changes on the wall. There's no second system to update.
SMS loyalty
Rewards redeem on all three self-serve channels, including the QR code on each table. Nobody gets sent to the counter to use them.
Structured for discovery
Every item on the menu page carries JSON-LD, including HalalDiet. Separate pages cover the menu, late-night food, catering and single dishes. The site is structured for search engines and machine-readable discovery.
What has to stay true
See it live
This is the platform in the room where it runs. Every surface below is live on Devon Ave. You can see it in person or at karachichaathouse.com.




The stack
Jamstack front end
Vanilla ES6+ with no framework. An enforcing Content-Security-Policy with an explicit source allowlist names, in the header, every origin the page may load from.
Square · Uber Direct
Square POS is the single source of truth for menu and payments. Uber Direct handles first-party delivery. Square computes the total that is charged, so the browser can't set its own. A stripped-down version of its price check is public: pricelock on GitHub.
Netlify · Supabase · Twilio
Git-connected CD with a verification gate in the build. If a check fails, nothing publishes. Supabase holds loyalty state and Twilio sends the SMS. Every release is checked on the live site.
Search evidence
We gave each thing people search for its own page: the menu, late-night food, catering and single dishes. Search Console later showed those pages appearing in Google on their own. Six of them are below, with the whole-site totals.
| Page | Clicks | Impressions | Average position |
|---|---|---|---|
| Whole site, 12 months | 2,044 | 169,325 | |
| Whole site since April 1, 2026 | 1,606 | 121,933 | |
| /order | 178 | 21,878 | 4.68 |
| /menu | 91 | 8,211 | 3.38 |
| /catering | 29 | 5,380 | 5.71 |
| /late-night | 24 | 5,964 | 3.45 |
| /biryani | 12 | 3,957 | 7.89 |
| /nihari | 10 | 10,266 | 8.30 |
First-party figures from a Search Console export downloaded October 1, 2026. They are not estimates from an SEO tool. April 2026 is the month this platform went live.
Limits
- The 12-month total includes about six months before this platform went live, when an older site was on the domain. The row from April 1 leaves those months out.
- Average position covers every query a page appeared for, brand searches included. It is not a ranking for any one search.
- Some of these pages earn few clicks. Search Console shows that they appear in Google. It cannot show that the page structure is the reason.
- Ordering pages read prices live from Square. The dish pages written for search carry prices from a Square snapshot that a test checks at release, so they can lag a price change until the next release.
- The tip is whatever the customer enters. The delivery fee comes from the browser and has to match the server’s own quote.
- The release gate checks files and runs regression tests at build time. It does not call Square or Uber, and a manual deploy from the command line would skip it.
- Speed figures come from a rolling 28-day Chrome window and will move. The dates are printed with them.
We run this one ourselves
We can build a project and hand it over in full, and the client owns the code outright. This one we also run in production, every day, which is why we show it. You don't have to trust a case study here. The site, the ordering, the kiosk flow, the menu board and the loyalty program are all live right now, and you can press every button yourself.
Verified every deploy
Each release goes through an automated verify-and-assert gate in the build. A failed check publishes nothing. The last good version stays up.
Money path, server-side
The server recomputes the subtotal, re-quotes the delivery fee and checks the loyalty caps before any charge.
Fast on real phones
Core Web Vitals measured on real visitors' devices pass. That is field data, the kind Google ranks on, and it is separate from any lab score.