# AmiCibi — Piano

PWA privata per sapere cosa (non) mangiano amici e parenti quando vengono a cena.

## Decisioni prese

| Tema | Scelta |
|---|---|
| Stack | Next.js (App Router) + TypeScript + Tailwind, su Vercel (Node runtime) |
| DB | Turso (libSQL) + Drizzle ORM, migrazioni versionate |
| Repo | GitHub privata `paoloalby/amicibi`, collegata a Vercel (push su `main` = deploy produzione, branch = preview) |
| Dominio | sottodominio `*.vercel.app` |
| Import | dati dal PDF, classificati automaticamente, poi verifica manuale |
| Modalità cena | sì, nella v1 |
| Allergeni | suggerimenti di cibi tipici per elemento, lista scelta per persona |

## Modello dati

- `people`: id, nome, note, `share_token` (128 bit, base64url, rigenerabile), `updated_at`, `updated_by` (`casa` | `amico`)
- `items`: id, person_id, `kind` (`allergy` | `intolerance` | `dislike` | `favorite`), label, `parent_id` (per i cibi sotto un allergene), sort
  - Allergia = item `allergy` (es. "Nichel") con figli (es. "Pomodori", "Mandorle")
- Dizionario suggerimenti allergeni (Nichel, Glutine, Lattosio, Frutta a guscio, Crostacei, Uova, Solfiti…) come file statico nel codice, non in DB

## Schermate

1. **Login** — utente/password da env (`APP_USER`, `APP_PASSWORD`), cookie di sessione firmato (`SESSION_SECRET`) di lunga durata, così sull'iPhone non si rientra ogni volta. Rate limit sui tentativi.
2. **Elenco amici** — ricerca live (nome + ingredienti: cercando "nichel" escono le persone coinvolte), badge colorati con i conteggi per categoria, segnale "modificato dall'amico" sulle schede aggiornate tramite link.
3. **Scheda persona** — quattro sezioni:
   - Allergie (rosso): elemento → cibi che lo contengono
   - Intolleranze (ambra)
   - Gusti personali, non mangia (neutro)
   - Piatti preferiti (verde)
   Modifica inline con chip aggiungi/rimuovi, salvataggio automatico. Azioni: copia link condivisibile, condividi (share sheet iOS), rigenera link, elimina persona.
4. **Pagina amico `/p/<token>`** — stessa scheda, modificabile senza login, solo quella persona. Nessuna navigazione verso il resto. Testo introduttivo amichevole.
5. **Modalità cena** — selezioni gli invitati, vedi un riepilogo unico: allergie in cima (chi + cosa), poi intolleranze, poi gusti; in fondo i piatti preferiti in comune. Pensata per usarla mentre si fa la spesa.

## Privacy e sicurezza

- Tutto dietro login tranne `/p/<token>` e gli asset della PWA
- `noindex, nofollow` ovunque: meta tag, header `X-Robots-Tag`, `robots.txt` che blocca tutto
- Token non indovinabili, revocabili rigenerandoli; la pagina amico può modificare solo la propria persona (controllo lato server)
- Validazione input lato server (Zod), nessun dato esposto via API pubbliche

## PWA e brand

- Wordmark: "Ami**Ci**bi", con il "Ci" condiviso tra Amici e Cibi evidenziato come cerniera tra le due parole
- Icona: monogramma "Ci" su fondo caldo; set completo (favicon SVG/ICO, apple-touch-icon 180, maskable 192/512)
- `manifest.webmanifest`, standalone, theme color, splash iOS, safe-area per notch e home indicator
- Design: mobile-first, toni caldi da tavola apparecchiata, tipografia leggibile, tap target grandi, dark mode

## Fasi

1. Setup: repo privata, Next.js, Turso DB (dev + prod), Drizzle, progetto Vercel collegato, env
2. Schema, migrazioni, seed dai dati del PDF
3. Auth + middleware + noindex
4. Elenco con ricerca live, scheda, modifica
5. Link condivisibile e pagina amico
6. Modalità cena
7. Brand, icone, manifest, rifinitura UI/UX
8. Test su iPhone (installazione in home), deploy produzione

## Dati da verificare dopo l'import

- Lorenzo Limongi (riga rossa: Uova, Fagiolini) → importati come **Allergia**
- Lorenzo Salvalaglio, seconda riga (verde ma scritta "no") → importata come **Preferiti**
- Nichel (Angelica: pomodori, mandorle; Valentina) → **Allergia**; Glutine (Valentina) → **Intolleranza**
- "Marta sì: TUTTO" → nota nella scheda, non un piatto
