尚未偵測到更新。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.