|
2 | 2 |
|
3 | 3 | ## What This Is |
4 | 4 |
|
5 | | -Lumio è una piattaforma di studio basata su flashcard che sfrutta l'AI per trasformare concetti in sessioni di apprendimento interattive con ripetizione spaziata. App nativa Android (React Native/Expo) bilingue IT/EN con branding Lumio, ripetizione spaziata SM-2 (carte scadute prima, nuove dopo), sessioni di studio configurabili con cap RPC, dashboard compatta con griglia 2x2 stat cards e tempo relativo, pulsante studio circolare icon-only, navigazione carte nei repository, storico sessioni con conteggio carte, gestione errori sync con aggiornamento token in-app, autenticazione dual-mode (Google OAuth + email/password con verifica OTP), account linking bidirezionale (Google ↔ email), password reset via OTP, e landing page con versione dinamica per il download dell'APK. Il contenuto viene dai repository Git, le domande sono pre-generate dal sistema. Il versioning è derivato da STATE.md (GSD milestone) tramite CI pipeline. |
| 5 | +Lumio è una piattaforma di studio basata su flashcard che sfrutta l'AI per trasformare concetti in sessioni di apprendimento interattive con ripetizione spaziata. Due frontend: app nativa Android (React Native/Expo) per lo studio e web app React SPA (deck.lumio.toto-castaldi.com) per la creazione di deck e carte. L'app Android è bilingue IT/EN con branding Lumio, ripetizione spaziata SM-2, sessioni configurabili con cap RPC, dashboard compatta 2x2, card browse, storico sessioni, gestione errori sync, autenticazione dual-mode (Google OAuth + email/password), account linking bidirezionale, e password reset via OTP. Il deck builder web permette di creare/modificare deck e carte in markdown con editor live preview, committate via edge function su un repo Git condiviso. Il contenuto viene dai repository Git, le domande sono pre-generate dal sistema. Docora sincronizza e genera domande AI per entrambi i flussi (repo utente e repo condiviso). |
6 | 6 |
|
7 | 7 | ## Core Value |
8 | 8 |
|
@@ -93,22 +93,18 @@ Gli utenti studiano concetti tramite quiz generati dall'AI — il contenuto vien |
93 | 93 | - ✓ Tempo relativo localizzato IT/EN su "Ultimo studio" ("ieri", "2 giorni fa", "yesterday", "2 days ago") — v2.3 |
94 | 94 | - ✓ "Ultimo studio" non navigabile (rimosso tap → storico sessioni) — v2.3 |
95 | 95 | - ✓ Pulsante studio circolare centrato con sola icona play (60px, nessun testo) — v2.3 |
| 96 | +- ✓ Web app React SPA con auth Supabase condivisa (Google OAuth + email/password) — v3.0 |
| 97 | +- ✓ Layout responsive con sidebar deck list e area editor principale — v3.0 |
| 98 | +- ✓ Dark mode e i18n IT/EN nel deck builder web — v3.0 |
| 99 | +- ✓ CRUD deck (crea, rinomina, elimina con conferma) — v3.0 |
| 100 | +- ✓ CRUD carte con editor markdown, live preview, toolbar, metadata form — v3.0 |
| 101 | +- ✓ Edge function deck-commit con 8 azioni GitHub API e isolamento path utente — v3.0 |
| 102 | +- ✓ Docora sync repo condiviso per generazione AI — v3.0 |
| 103 | +- ✓ Deploy produzione deck.lumio.toto-castaldi.com con SSL e CI/CD — v3.0 |
96 | 104 |
|
97 | 105 | ### Active |
98 | 106 |
|
99 | | -(Defining requirements for v3.0) |
100 | | - |
101 | | -## Current Milestone: v3.0 Deck Builder Web |
102 | | - |
103 | | -**Goal:** Web app React SPA su deck.lumio.toto-castaldi.com dove utenti autenticati creano deck e carte in markdown, committate via edge function su un repo Git Lumio condiviso, sincronizzate da Docora per generazione AI. |
104 | | - |
105 | | -**Target features:** |
106 | | -- React SPA con auth Supabase condivisa (Google OAuth + email/password) |
107 | | -- CRUD deck e carte con editor markdown nel browser |
108 | | -- Salvataggio via edge function → GitHub API commit su repo condiviso Lumio |
109 | | -- Struttura repo: `/{user_id}/{deck_name}/` — ogni utente gestisce solo i suoi contenuti |
110 | | -- Docora sincronizza e genera domande AI come per i repo normali |
111 | | -- Deploy su deck.lumio.toto-castaldi.com |
| 107 | +(Defining requirements for next milestone) |
112 | 108 |
|
113 | 109 | **Future milestones:** |
114 | 110 | - v3.1: Deck Discovery — ricerca fulltext repo/deck pubblici nell'app mobile |
@@ -140,33 +136,36 @@ Gli utenti studiano concetti tramite quiz generati dall'AI — il contenuto vien |
140 | 136 | - Custom password policy (oltre default Supabase) — 6 char minimo sufficiente per app studio personale |
141 | 137 | - Bilingual email templates — Supabase invia un template per tipo; EN singola lingua accettabile |
142 | 138 | - SMTP configuration — config dashboard produzione, non codice |
| 139 | +- Studio/quiz nel browser — l'app mobile è l'esperienza di studio, nessuna duplicazione |
| 140 | +- Editor WYSIWYG — conflitto con code blocks e math; markdown + preview è consolidato |
| 141 | +- Collaborazione real-time — singolo sviluppatore, uso personale |
| 142 | +- Upload immagini nelle carte — complessità Git binari; URL esterni supportati |
| 143 | +- UI versioning carte — Git fornisce lo storico; costruire UI è complesso e raramente necessario |
| 144 | +- Autosave — save manuale prima; autosave aggiunge complessità commit |
| 145 | +- Ricerca fulltext carte — scala non lo richiede; navigazione gerarchica sufficiente |
143 | 146 |
|
144 | 147 | ## Context |
145 | 148 |
|
146 | | -**Stato attuale (post v2.3):** |
147 | | -- Monorepo pnpm: apps/android (Expo/React Native), apps/landing (static HTML), packages/core, packages/shared |
148 | | -- Backend Supabase: auth (Google OAuth + email/password), DB, storage, edge functions, Docora webhook + study_sessions + card_review_schedule tables |
149 | | -- Tech stack: Expo SDK 54, React Native 0.81, react-navigation, @lumio/core, i18n-js, react-native-marked, supermemo@2.0.23, vitest@4.0.18 |
150 | | -- CI/CD: lint → build-apk → deploy-landing → deploy-migrations → deploy-functions (version from STATE.md) |
| 149 | +**Stato attuale (post v3.0):** |
| 150 | +- Monorepo pnpm: apps/android (Expo/React Native), apps/deck-builder (Vite/React SPA), apps/landing (static HTML), packages/core, packages/shared |
| 151 | +- Backend Supabase: auth (Google OAuth + email/password), DB, storage, edge functions (deck-commit con 8 azioni GitHub API), Docora webhook + study_sessions + card_review_schedule tables |
| 152 | +- Tech stack Android: Expo SDK 54, React Native 0.81, react-navigation, @lumio/core, i18n-js, react-native-marked, supermemo@2.0.23 |
| 153 | +- Tech stack Deck Builder: Vite 7, React 19, react-router 7, Tailwind 4, @uiw/react-md-editor 4, vitest |
| 154 | +- CI/CD: lint-and-typecheck → build-apk → deploy-landing → deploy-deck-builder → deploy-migrations → deploy-functions |
151 | 155 | - Versioning: STATE.md milestone → extract-version.cjs → version.ts, APK versionName, landing page, edge function |
152 | | -- Auth: dual-mode Google OAuth + email/password con OTP verification, password reset, account linking bidirezionale |
153 | | -- App bilingue IT/EN con branding Lumio, ripetizione spaziata SM-2, sessioni configurabili con cap RPC, dashboard compatta 2x2 con tempo relativo e pulsante circolare, card browse, study history con conteggio carte, studio forward-only, sync error handling con token update in-app |
154 | | -- ~20,600 LOC (TS/TSX/SQL) |
155 | | -- 11 milestones shipped: v1.1 (native app), v1.2 (polish & i18n), v1.3 (bugfix & UX), v1.4 (card browse & stats), v1.5 (study UX fixes), v1.6 (sync error handling), v1.7 (GSD versioning), v2.0 (spaced repetition), v2.1 (email auth), v2.2 (session limits), v2.3 (dashboard polish) |
156 | | - |
157 | | -**v3.0 planning context:** |
158 | | -- Nuova app web React SPA in `apps/deck-builder` nel monorepo |
159 | | -- Stesso progetto Supabase (auth condivisa, stesse tabelle) |
160 | | -- Edge function per commit su repo GitHub condiviso tramite GitHub API |
161 | | -- Docora gestisce sync/generazione AI anche per il repo condiviso |
162 | | -- Deploy separato su deck.lumio.toto-castaldi.com |
| 156 | +- Auth condivisa: dual-mode Google OAuth + email/password, OTP verification, password reset, account linking bidirezionale |
| 157 | +- App Android bilingue IT/EN con branding Lumio, SM-2, sessioni configurabili, dashboard 2x2, card browse, study history, sync error handling |
| 158 | +- Deck builder web bilingue IT/EN con dark mode, deck CRUD, card authoring con markdown editor, live preview, toolbar |
| 159 | +- ~49,200 LOC (TS/TSX/CSS/SQL) — ~20,600 Android + ~28,600 deck-builder |
| 160 | +- 12 milestones shipped: v1.1 → v2.3 (mobile), v3.0 (deck builder web) |
163 | 161 |
|
164 | 162 | ## Constraints |
165 | 163 |
|
166 | | -- **Platform**: Solo Android |
167 | | -- **Distribution**: APK diretto via GitHub Releases |
| 164 | +- **Platform**: Android (studio) + Web (deck authoring) |
| 165 | +- **Distribution**: APK diretto via GitHub Releases, web app via CI/CD SCP |
168 | 166 | - **Backend**: Supabase (auth, DB, storage, edge functions) |
169 | | -- **Build**: Expo prebuild + Gradle (no EAS Build) |
| 167 | +- **Build Android**: Expo prebuild + Gradle (no EAS Build) |
| 168 | +- **Build Web**: Vite 7 production build |
170 | 169 | - **Auth**: Google OAuth + email/password (no social login beyond Google) |
171 | 170 |
|
172 | 171 | ## Key Decisions |
@@ -244,6 +243,16 @@ Gli utenti studiano concetti tramite quiz generati dall'AI — il contenuto vien |
244 | 243 | | Always relative time (no absolute date fallback) | Simpler code, consistent UX — even "years ago" is relative | ✓ Good — v2.3 | |
245 | 244 | | 60px circular play button (borderRadius 30) | Middle of 56-64 range, visually prominent centered CTA | ✓ Good — v2.3 | |
246 | 245 | | Removed unused i18n keys after button text removal | Clean codebase, no orphaned translations | ✓ Good — v2.3 | |
| 246 | +| Vite 7 + React 19 + Tailwind 4 for deck builder | Modern stack, fast builds, Tailwind utility-first CSS | ✓ Good — v3.0 | |
| 247 | +| Shared Supabase project for web and mobile | Single auth, single DB, no user sync complexity | ✓ Good — v3.0 | |
| 248 | +| Edge function for GitHub commits (not direct API) | Server-side path isolation, API key protection | ✓ Good — v3.0 | |
| 249 | +| UUID prefix path isolation in shared repo | User can only write to `/{user_id}/` directory | ✓ Good — v3.0 | |
| 250 | +| .gitkeep for empty deck directories | Git doesn't track empty dirs; .gitkeep creates presence | ✓ Good — v3.0 | |
| 251 | +| localStorage-backed timestamps for deck sort | GitHub API has no directory timestamps; client-side proxy | ✓ Good — v3.0 | |
| 252 | +| yaml package over gray-matter for browser | gray-matter requires Buffer polyfill in browser | ✓ Good — v3.0 | |
| 253 | +| Responsive MDEditor: split desktop, toggle mobile | Optimal UX per viewport via matchMedia | ✓ Good — v3.0 | |
| 254 | +| HTTP-only Nginx template, Certbot adds SSL on server | SSL config is server-specific, not repo-portable | ✓ Good — v3.0 | |
| 255 | +| deploy-deck-builder parallels deploy-landing in CI | Independent apps, no build dependency between them | ✓ Good — v3.0 | |
247 | 256 |
|
248 | 257 | --- |
249 | | -*Last updated: 2026-03-11 after v3.0 milestone start* |
| 258 | +*Last updated: 2026-03-13 after v3.0 milestone* |
0 commit comments