Přehled

PDF jídelní lístky se obtížně aktualizují a na telefonu se často špatně čtou. Do SmartMenu restaurace nahraje PDF nebo fotografie lístku a OpenAI API z nich vytáhne strukturovaný obsah. Majitel pak může výsledek opravit, upravit jeho vzhled, vytvořit QR kódy na stoly a spravovat předplatné.
Majitel restaurace spravuje obsah v dashboardu. Host otevře veřejný lístek naskenováním QR kódu. Stejný systém jsem navrhl pro jednu kavárnu i pro franšízu s více pobočkami.
Hlavní funkce

Správa předplatného a platby
Hlavní technickou výzvou bylo implementovat robustní systém předplatného pomocí Stripe. Vybudoval jsem víceúrovňový přístupový model, který vynucuje limity na počet aktivních jídelních lístků a odemyká prémiové funkce a přístup k OpenAI API.
- Zpracování webhooků: Automatická synchronizace mezi událostmi Stripe a databází Supabase zajišťuje okamžitou aktualizaci stavu uživatelů po platbě nebo zrušení.
- Omezení funkcí: Aktivní tarif určuje, zda může uživatel odstranit vodoznak „Powered by" nebo otevřít pokročilou analytiku.
Veřejné stránky
Hosté často otevírají lístek přes mobilní připojení. Veřejné stránky (/m/[slug]) proto používají Next.js Server Components. Většina práce proběhne na serveru a prohlížeč dostane jen malé množství JavaScriptu.
Dashboard pro restaurace
V dashboardu uživatel upravuje položky, kategorie, alergeny a vzhled lístku. Najde v něm také analytiku a fakturaci.

Bezpečná databázová architektura
Bezpečnost je řešena pomocí Supabase a PostgreSQL Row Level Security (RLS).
- Izolace dat: RLS politiky zajišťují, že majitelé restaurací mohou upravovat pouze vlastní data.
- Logika v databázi: Kontroly předplatného, například oprávnění odstranit vodoznak, probíhají v databázi a nespoléhají na frontend.
Použité technologie
- Frontend: Next.js 16, Tailwind CSS, Lucide Icons
- Backend: Supabase (PostgreSQL, Auth, Storage)
- API: OpenAI API pro parsování a generování obsahu menu
- Platby: Stripe (Checkout, Billing Portal, Webhooks)
- Nasazení: Vercel
Co jsem se naučil
Projekt mi dal praktickou zkušenost s onboardingem, limity použití a opakovanými platbami. Také jsem si ověřil, že kontroly předplatného se lépe zabezpečují a udržují v databázi než ve frontendu.