Skip to content
All work
Client Project · LiveRestaurant

My Favorite Diner

A diner website whose staff run the whole thing themselves — menu, prices, photographs, bookings and mailshots — without anyone touching code.

Website + Online Booking + Admin Panel

Overview

My Favorite Diner is an American bar and grill on Thappraya Road in Jomtien, Pattaya. The site is the restaurant's shopfront and its back office at once: a menu-led marketing website with a gallery, guest reviews and online table booking on the front, and a private admin panel behind it where the team edits all of it. A menu of 108 dishes across 12 sections, every price in baht, every photograph — all of it is editable from a phone by someone who has never seen a line of code.

Sector
Restaurant
Client
My Favorite Diner Bar and Grill
Location
Jomtien Complex, Pattaya, Thailand
Year
2025
Scope
Website + Online Booking + Admin Panel
myfavoritediner.com

Visit the live site

The problem

A restaurant menu is never finished. Prices move, dishes come off, a new burger goes on for the season, and the photograph the kitchen took last night is better than the one on the site. If every one of those edits has to go through a developer, the menu online drifts away from the menu on the table within a month — and the bookings that arrive by phone and Facebook message while the floor is busy quietly get lost.

The challenge

The panel had to be genuinely usable by busy floor staff on a phone, mid-service, or it would be abandoned and the site would go stale. Bookings had to reach the team through the channel they actually read — in Thailand that is LINE, not email. Guest data is personal data under Thailand's PDPA, so retention could not be an afterthought. And the site had to stay standing when a dependency did not: no restaurant should have a blank menu because a database is having a bad morning.

What we built

A Next.js site on Vercel with Supabase behind it, built so that the database is the menu — and so that nothing breaks when it isn't. Bookings write straight to Postgres, alert the staff LINE group within seconds, email the guest a confirmation with a private cancel link, and appear in a panel where they move from New to Confirmed to Done. Every piece of content on the public site has an editor behind it, and the whole thing degrades gracefully: with Supabase disconnected the site still serves a complete written-in menu rather than an error.

The system

01Marketing site with menu, gallery, reviews and location
02Online table booking with capacity limits and closed-day rules
03Private admin panel — menu, gallery, bookings, reviews, subscribers, promotions, settings
04LINE Messaging API alerts to the staff group on every booking and cancellation
05Transactional email for confirmations, cancellations and welcome messages
06Guest self-service cancellation by private link — no account, no phone call
07Moderated guest reviews with a staff approval queue
08Poster-first promotional mailshots with per-recipient unsubscribe
09System health monitor and plain-English activity log
10Nightly housekeeping for PDPA data retention

Key features

What it actually does.

01

The menu is the database

12 sections, 108 dishes, prices in baht, badges, per-section small print and around 110 dish photographs — all editable from the panel. Sections and dishes reorder with arrows rather than a number box, and a dish can be hidden with one press of the eye without losing it.

02

Bookings that actually reach someone

A request lands in the staff LINE group within seconds of being submitted, with the guest's name, party size, phone and notes, and a button straight to the panel. Email is the backup, not the primary. An alert never blocks the booking — the guest is told their table is requested the moment it saves.

03

Capacity and closed days, enforced server-side

The diner sets how many tables it accepts per day and which days it is closed. Those dates are struck through on the calendar, and the server refuses them anyway — so a guest with yesterday's page still open cannot slip past a setting that changed this morning.

04

Guests cancel themselves

Every confirmation carries a private cancel link. No account, no login, no phone call. The table is freed automatically and the restaurant is told, which is the difference between a no-show and a table that can be sold again.

05

Nothing a stranger writes goes live unapproved

Guest reviews land in a pending queue, notify the LINE group, and reach the homepage only when a human approves them. Submissions are rate-limited per address, and anything containing a web link is rejected outright — a link in a restaurant review is almost always advertising.

06

Mailshots that survive a double-click

Upload a poster, preview it exactly as subscribers will see it, send a test, then send to the list. A second click or a second tab is turned away rather than starting a second send, and every delivered address is recorded as it goes — so a batch that fails halfway can be finished without mailing anyone twice.

07

It tells you when it is broken

A monitor checks the database, the booking table, email configuration, whether a new booking would actually reach anybody, and how much of the LINE monthly allowance is left. Problems appear in plain English on the panel's home page, and /api/health returns 503 so an uptime monitor can watch it too.

08

Personal data does not pile up

Guest names, phone numbers and notes are personal data under Thailand's PDPA. A nightly job deletes bookings older than twelve months, forgets people who unsubscribed over a year ago, and trims the activity log — so retention is a property of the system rather than a policy nobody performs.

09

Built to be found

Restaurant and menu structured data covering every dish and price with THB offers, breadcrumbs, a sitemap, robots.txt and a branded share image. The phone number and address Google sees come from the panel's settings, so they stay in step automatically.

10

Fails soft, everywhere

With Supabase disconnected the site serves a complete written-in menu instead of an error. Without email configured, sending is skipped and logged rather than crashing a booking. The guest-facing path is designed to survive every dependency it has.

Screenshots

Desktop and mobile.

Captured from the running site at 1440px and 390px — the mobile set is the layout a phone genuinely gets, not a scaled-down desktop.

myfavoritediner.com
Desktop homepage with the diner's hero plate and booking call to action
The homepage — hero, address and a direct route to the menu
myfavoritediner.com
Desktop menu section showing burger cards with photographs and descriptions
The menu carousel — every section, dish and price served from the database
myfavoritediner.com
Desktop full menu page listing dishes by course
The full menu page, grouped into courses the staff define themselves
myfavoritediner.com
Desktop booking section with address, opening hours and the Book a Table form
Find the diner — opening hours, contact details and the booking form
myfavoritediner.com
Desktop gallery section showing the restaurant photo grid
The gallery — a photo grid the restaurant manages from the panel
myfavoritediner.com
Desktop about section introducing the restaurant
The story section, set in the diner's own type and colour

The result

What changes.

What the system changed about the way the business runs. These are described outcomes, not measured statistics.

The restaurant edits its own menu, prices and photographs — no developer in the loop, no drift between the site and the table
Table requests arrive around the clock and land where staff will see them, instead of competing with a busy service
Guests cancel themselves, so a freed table can be sold again rather than becoming a no-show
One panel replaces the scattering of chat threads, inboxes and printed menus the business ran on
Retention, moderation and deliverability are handled by the system rather than left to somebody to remember

Technology used

Next.js 16 (App Router)
TypeScript
Tailwind CSS
Supabase (Postgres, Auth, Storage)
Resend
LINE Messaging API
Vercel
Next project

Restaurant Digital System

Website + Booking + Email Automation

Want something like this for your business?

Tell us what is taking up your time. We will tell you honestly whether a system would help.

Start a Project