Case Study
A subscription SaaS for restaurants: upload a menu, pick a theme, print one QR code — and never reprint a menu again. Built end to end, from the marketing site to the owner dashboard to Stripe billing.

The problem
Paper menus are a recurring tax on restaurants: every price change, seasonal dish or sold-out item means editing, reprinting and relaminating. The alternatives are either a PDF nobody can read on a phone or agency-built menu sites that cost more than the problem.
I wanted the self-serve version: a restaurant owner with no technical skills should get from signup to a live, good-looking digital menu in minutes, and updates should be instant and free from then on.
Key decisions
Every restaurant is a tenant with its own menus, themes and QR codes, isolated with Supabase row-level security. Auth, database and storage come from one platform, which kept the moving parts to a minimum.
Billing is not a bolt-on: plans, trials, upgrades and cancellation flow through Stripe subscriptions and webhooks that keep tenant entitlements in sync automatically.
Restaurant owners don't want a design tool — they want it to look good now. Menus render through polished visual themes the owner switches with one click, so every menu looks intentional with zero design work.
The QR points to a stable menu URL; content behind it updates live. Print the code once, laminate it, and the menu is whatever the dashboard says it is — that's the core product promise.
Scans and menu views feed a simple analytics view in the dashboard, so owners see whether the QR on table 7 actually gets used.
Stack
Next.js App Router on Vercel, Supabase for auth, Postgres and storage, Stripe for subscription billing.
The result
A live, self-serve platform: sign up, upload menu images, get a themed digital menu and a printable QR code in about five minutes, with analytics and billing handled. Restaurants stop paying the reprint tax, and the product runs itself — from free trial to paid plan — without me in the loop.
In the wild

Contact
Have a project in mind, or just want to say hi? My inbox is always open — I usually reply within a day.
Open to internships & freelance