尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 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.查看完整 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.