Ordina i tuoi smashburger e ritirali all'orario che scegli. Paghi online e salti la fila.
Translation pending
CommerceTypeScript · JavaScriptGitHub @mattewinflamesOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Web app di ordine-e-ritiro per Cheebo (smashburgeria a Roma): il cliente compone il suo ordine, sceglie una fascia di ritiro, paga online e riceve un codice di ritiro; il personale gestisce ordini, cassa, incassi e menù da un pannello admin. Cuore del sistema è un motore di capacità della piastra (13 patty per finestra da 10 minuti) che rende i tempi di ritiro affidabili e impedisce l'overbooking.Read the full README ↗
Web app di ordine-e-ritiro per Cheebo (smashburgeria a Roma): il cliente compone il suo ordine, sceglie una fascia di ritiro, paga online e riceve un codice di ritiro; il personale gestisce ordini, cassa, incassi e menù da un pannello admin. Cuore del sistema è un motore di capacità della piastra (13 patty per finestra da 10 minuti) che rende i tempi di ritiro affidabili e impedisce l'overbooking.
Stack: Vite · React 18 · TypeScript · Firebase (Firestore + Auth) · Stripe · funzioni serverless su Vercel.
Cliente (/) — sfoglia il menù, configura i panini (formato, menu con bibita,
extra, rimozioni, sostituzioni), aggiunge special a disponibilità limitata,
sceglie l'orario di ritiro, paga con Stripe Checkout e ottiene codice di
ritiro, indirizzo con "come arrivare" e conferma via WhatsApp.
Admin (/admin) — pannello a schede:
La cassa e gli export non sono documenti fiscali: nessuna trasmissione di corrispettivi. Il collegamento al registratore telematico (POS-RT) è un lavoro a parte.
Il client non invia mai i prezzi, solo la configurazione del carrello. Il server è l'unico a fissare prezzi e capacità, e la conferma arriva dal webhook, non dal redirect del browser:
POST /api/create-booking — ricalcola dal menù reale, in transazione occupa
piastra e stock, crea un hold con scadenza, apre Stripe Checkout, torna l'URL./pagamento/ok?session_id=….POST /api/stripe-webhook (sola fonte di verità): su
checkout.session.completed crea l'ordine e il codice di ritiro; su
checkout.session.expired rilascia lo slot.GET /api/order-status finché il webhook conferma.src/
lib/ dominio e accesso dati
dispatch.ts motore piastra (puro, testato)
schedule.ts calendario dei servizi e sessioni prenotabili
menu.ts modello prodotto, configuratore, carrello
booking.ts resolveCart: ricalcolo autoritativo lato server (puro, testato)
orders.ts prenotazione/stream Firestore + startCheckout
menuStore.ts CRUD del menù
settings.ts impostazioni dell'attività (settings/app)
export.ts report incassi
firebase.ts init Firebase + costanti del locale
whatsapp.ts messaggio e link wa.me
pages/
Prenotazioni.tsx sito cliente
AdminCassa.tsx pannello admin a schede
EsitoPagamento.tsx esito del pagamento con polling
main.tsx router (/, /admin, /pagamento/ok, /pagamento/annullato)
api/ funzioni serverless (Vercel + Firebase Admin + Stripe)
create-booking.ts order-status.ts stripe-webhook.ts
_lib/ admin.ts stripe.ts holds.ts
scripts/ seed / reset / verifica-regole (girano da Node)
firestore.rules regole di sicurezza
tests/rules.test.mjs test delle regole (richiede l'emulatore Firestore)
/api)npm install
Copia il template e compila con i valori del tuo progetto:
cp .env.example .env.local
Le VITE_* sono pubbliche (finiscono nel bundle client). STRIPE_SECRET_KEY,
STRIPE_WEBHOOK_SECRET, FIREBASE_SERVICE_ACCOUNT e APP_URL sono solo server.
firebase deploy --only firestore:rules.npm run seed (richiede l'enforcement App Check temporaneamente spento).Le funzioni /api sono servite da vercel dev, non dal dev server di Vite. Su
Windows è comodo dev.bat, che carica le env server in sessione e avvia Vercel:
vercel dev # serve app + funzioni su http://localhost:3000
In una finestra separata, l'inoltro del webhook Stripe:
stripe listen --forward-to localhost:3000/api/stripe-webhook
Prova il flusso con la carta di test 4242 4242 4242 4242.
Nota:
vercel devnon inietta.env.localnelle funzioni serverless — vanno caricate nell'ambiente della shell prima dell'avvio (dev.batlo fa).
npm test # test unitari del dominio (non serve Firebase: il motore è puro)
npm run build # type-check + build di produzione
Il type-check delle funzioni serverless è separato:
npx tsc -p api/tsconfig.json
I test delle regole (tests/rules.test.mjs) richiedono l'emulatore Firestore
(npm run test:rules, serve Java 11+).
https://<dominio>/api/stripe-webhook (con il suo whsec_).APP_URL = dominio di produzione..env, .env.local, service account) non sono versionati
(.gitignore); nel repo c'è solo .env.example con i placeholder.sessions/orders all'admin e holds è server-only.