Skip to content

Restaurant platform

Tam Cuisine

A full-stack restaurant platform for an Ibadan restaurant: reservations with real availability, catering requests, online ordering and an admin dashboard.

In DevelopmentFull StackProduct Design

Code-complete and building cleanly; awaiting payment keys, business details and a production deployment.

Source is private
Period
Aug 2026
Status
In Development
Role
Full-stack engineering, Product design
Built with
Next.js 16, TypeScript

The problem

Why this needed to exist

A busy local restaurant takes bookings, catering enquiries and orders by phone and chat. Nothing is in one place, and nobody can see availability without asking.

Who it’s for

  • Diners booking tables or ordering
  • Clients requesting catering
  • Restaurant staff and administrators

The solution

How it works

One platform with three roles — customer, staff and admin. Customers book against real availability, order from the menu and receive invoices; staff and admins manage reservations, catering and orders from a dashboard.

Implemented

What’s actually built

  • Reservations with an availability engine

    Bookings are checked against seating and duration rules and land in the database in real time.

  • Menu to checkout

    Cart, Paystack checkout (initialise → redirect → verify), invoice PDF and email confirmation, with idempotent order finalisation shared between the webhook and the confirmation page.

  • Catering requests

    A dedicated request flow for events.

  • Role-gated admin

    Customer, staff and admin roles enforced with row-level security in Postgres.

My role

What I did

Full implementation: schema, RLS policies, storage, payment flow, reservation logic, customer account and admin dashboard.

Responsibilities

  • Full-stack engineering
  • Product design
  • Database & auth

Stack (verified from source)

  • Next.js 16
  • TypeScript
  • Supabase (Postgres, Auth, Storage, RLS)
  • Paystack
  • Resend

Decisions

Technical and design choices

  1. 01

    Paystack over Stripe

    Stripe does not settle naira for Nigerian merchants, so the payment layer was switched to Paystack.

  2. 02

    Finalise orders idempotently

    The same fulfilment function runs from the webhook and from the confirmation page, so local development completes orders without a public webhook URL and production never double-fulfils.

Lessons

What I took away

  • Local payment rails shape architecture as much as any framework choice.

What’s next

Planned — not built

Planned work

  • Production deployment with live payment keys
  • Real business hours, seating and contact details
  • Replacing placeholder review text with real reviews

Current limits, stated plainly

  • Some business details and testimonials are placeholders until supplied by the restaurant.