Mirobody
The canonical registry of human health — roughly two thousand standardized indicators, clinical and lifestyle, resolved into one language.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗MVP Next.js per un planner alimentare assistito da logica locale deterministica.
npm install
npm run dev
npm test # Vitest: unit (src), API route (tests/api), componenti jsdom (tests/components)
npm run test:unit
npm run test:api
npm run test:components
npm run test:ai-eval
npm run test:e2e # Playwright pubblico + autenticato (se E2E_TEST_EMAIL/PASSWORD presenti)
npm run test:e2e:production # smoke contro https://dietsprintai.com (o PLAYWRIGHT_BASE_URL)
npm run lint
npm run build
npm run db:backup
Il progetto Supabase originale non esiste piu': la procedura per ricrearlo, riapplicare lo schema e riallineare le variabili Vercel e' in docs/supabase-restore.md. Finche' non viene ripristinato, registrazione, login e salvataggio piani in produzione non funzionano; planner e risultati Free restano operativi.
//onboarding/planner/results/pricing/register/login/forgot-password/account/account/privacy/admin/users/admin/privacy/admin/templates/legal/disclaimerIl comportamento con condizioni mediche selezionate nel planner e' controllato da NEXT_PUBLIC_MEDICAL_SCREENING_MODE:
warn (default): il piano viene generato come bozza con un avviso di review medica in cima.block: planner, salvataggio (POST /api/plans) e generazione AI (POST /api/plans/generate) rifiutano il profilo con errore 422.La decisione definitiva va presa con legale e nutrizionista; la checklist di go-live e' in docs/go-live-checklist.md.
Le sessioni dell'app sono gestite da Auth.js (next-auth@5) con strategia JWT. Supabase Auth continua a gestire utenti, password, conferma email e recupero password. Il token Supabase resta nel cookie cifrato Auth.js e viene usato lato server per rispettare le policy RLS.
Genera e configura un segreto server-only:
AUTH_SECRET=
Non esporre il magic link come metodo di login.
In Supabase vai su Authentication > Providers > Email e abilita:
Per conferma account, in Confirm signup usa:
<a href="{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=signup">Conferma account</a>
Per recupero password, in Reset password usa:
<a href="{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=recovery&next=/account/password">Reimposta password</a>
In Authentication > URL Configuration imposta:
https://dietsprintai.comhttps://dietsprintai.com/auth/confirmhttps://www.dietsprintai.com/auth/confirmhttps://appdietasprint.vercel.app/auth/confirmhttp://127.0.0.1:3000/auth/confirmIl progetto usa database e autenticazione Supabase quando le variabili pubbliche Supabase sono configurate.
Le email applicative usano Resend lato server. Le email di conferma account e recupero password usano Resend tramite il custom SMTP di Supabase Auth.
Configurazione SMTP Supabase:
Host: smtp.resend.com
Porta: 465
Username: resend
Mittente: Diet Sprint AI <[email protected]>
La password SMTP e' una API key Resend con permesso di invio sul dominio dietsprintai.com. Non salvarla nel repository.
Variabili server-only:
RESEND_API_KEY=
RESEND_FROM_EMAIL="Diet Sprint AI <[email protected]>"
PRIVACY_NOTIFICATION_EMAIL=
Lo snapshot iniziale vive in supabase/schema.sql. Le migrazioni versionate vivono in supabase/migrations.
La procedura operativa per backup e restore vive in docs/backup-restore-runbook.md.
La procedura preview/staging vive in docs/preview-staging.md.
La checklist security, accessibilita e performance vive in docs/security-accessibility-performance.md.
Le tabelle MVP sono:
user_profilesmeal_plansprivacy_consentsdata_subject_requestsstripe_purchasesdata_subject_request_audit_eventsadmin_meal_templatesTutte hanno Row Level Security attiva. Le policy consentono agli utenti autenticati di accedere solo ai propri dati.
Comandi database:
npm run db:backup
npm run db:restore -- backups/supabase-YYYY-MM-DD.dump
Il backlog interno vive su /admin/backlog ed e' protetto lato server. La voce di menu appare solo agli utenti admin.
La sorgente dati della UI backlog e' src/lib/productBacklog.ts; il riepilogo markdown unico vive in PROJECT_SUMMARY_AND_BACKLOG.md.
Pannelli admin disponibili:
/admin/users: ricerca utenti e sblocco Free/Premium per supporto./admin/privacy: coda richieste GDPR con audit trail append-only./admin/templates: catalogo template pasti e CRUD dei template gestiti in database.Per creare l'admin rdladmin:
Opzione consigliata, script locale:
set NEXT_PUBLIC_SUPABASE_URL=https://PROJECT_REF.supabase.co
set SUPABASE_SERVICE_ROLE_KEY=service-role-key
set [email protected]
set ADMIN_USERNAME=rdladmin
npm run admin:create
Lo script chiedera' la password senza salvarla nel repository. In PowerShell usa $env:NOME_VARIABILE="valore" al posto di set.
Opzione manuale:
{
"username": "rdladmin",
"role": "admin"
}
[email protected]
ADMIN_USERNAMES=rdladmin
Non salvare password admin in codice, README o variabili pubbliche NEXT_PUBLIC_*.
This is the beginning of the README. Read the rest at the original. Read the full README ↗