|
|
# Italiano Vivo — Especificação do Produto (v1)
|
|
|
|
|
|
App de italiano **situacional-first**, com voz livre, scoring de **inteligibilidade** ("errado mas entendido" conta como sucesso), treino de **estratégias de comunicação** (circunlóquio, pedir a palavra que falta) e **modo viagem offline**. Do extremo básico (A0/Pre-A1) ao avançado (C1), ancorado nos *can-do statements* do CEFR / ALTE Social & Tourist Can-Dos.
|
|
|
|
|
|
## 1. Por que este app existe (lacunas comprovadas na pesquisa)
|
|
|
|
|
|
| Dor | Estado do mercado | Nossa resposta |
|
|
|
|---|---|---|
|
|
|
| Avaliação binária ❌/✅ | Babbel/Duolingo/Speakly marcam fala correta como errada; nenhum separa precisão de sentido | Scoring em 3 eixos: **Sentido transmitido / Naturalidade / Precisão gramatical**. Saída padrão: *"Quase lá — o italiano diria: …"*, nunca "Errado" |
|
|
|
| Vocabulário temático solto | Babbel começa com queijo de cabra; Duolingo prende o aluno no path | Dia 1: aluno escolhe as próprias situações-âncora ("quero pedir um lanche", "preciso reclamar do aquecedor") |
|
|
|
| Falta de estratégia quando a palavra some | Zero apps de italiano treinam circunlóquio (evidência: Coluzzi 2022; Dörnyei 1995) | Módulo dedicado **"Salvavita"**: *Come si dice…?*, *Può ripetere più lentamente?*, descrever sem nomear. Penaliza **abandonar a mensagem**, não o erro |
|
|
|
| Syllabus gramatical (presente→congiuntivo) | Todos os grandes | Unidades = **missões comunicativas** (aeroporto, farmácia, hotel…). Gramática entra como insumo da missão, nunca como capítulo |
|
|
|
| Voz livre sem memória | Apps de IA conversacional: "no vocab list, no grammar log, no review schedule" | Conversa livre → extrai as frases que quebraram → rebuild → reaparecem espaçadas **dentro de uma situação nova** |
|
|
|
| Offline confiável + áudio-only | Só Pimsleur é hands-free, e 9% das reviews negativas citam offline quebrado | PWA com Service Worker + catálogo 100% local; TTS/áudio empacotados; IA só quando online, com degradação suave |
|
|
|
| ASR hostil ao aprendiz | Monossílabos ignorados, correções circulares | ASR via LLM multimodal (tolerante a sotaque) + botão **"isso estava certo"** que vira dado de re-treino; sensível a geminadas (*pala/balla*, *nono/nonna*) |
|
|
|
| Billing predatório | Queixa nº1 (renovação silenciosa, expiração antecipada) | **Compra única por trilha** ou lifetime. Sem streak-guilt, sem conteúdo removido |
|
|
|
|
|
|
## 2. Persona e escopo
|
|
|
- **Henrique viajante**: foi à Itália, travou no balcão. Quer o básico de criança ("io voglio / io ho bisogno / mi scusi, non so come si dice") encaixado em contexto real, progredindo até conversa adulta.
|
|
|
- Escopo **tudo**: viajante + expat/burocracia (permesso, ASL, banca, affitto), porque há exigência legal objetiva (B1 cidadania CILS/CELI) e disposição a pagar por resultado mensurável.
|
|
|
|
|
|
## 3. Metodologia implementada (mecânica de app)
|
|
|
|
|
|
| Princípio | Mecânica |
|
|
|
|---|---|
|
|
|
| Aquisição natural (como criança) | Fase 1 só áudio+imagem, sem escrita; texto desbloqueado após N exposições; produção cedo porém curta |
|
|
|
| Comprehensible input i+1 | Diálogos com % de cognatos controlado pelo nível; missão seguinte libera com comprehension ≥ ~80% |
|
|
|
| Chunks / lexical approach | Unidade mínima = bloco pronto (`Mi scusi, non ho capito — può ripetere più lentamente?`), nunca palavra isolada |
|
|
|
| CLT / Task-Based Learning | Cada missão tem **critério de sucesso comunicativo** ("marque uma visita médica sem inglês"). O app avalia a meta atingida, depois expõe os gaps |
|
|
|
| Output practice (Swain) | Após conversa livre: extrair 3 frases tentadas-e-quebradas → rebuild → re-gravar → reencontrar 3 dias depois |
|
|
|
| SRS | Revisão de **frases-chunks** (SM-2 simplificado), reintroduzidas dentro de diálogo novo, não como flashcard morto |
|
|
|
| Shadowing | Modo carro/corrida: áudio nativo em velocidade real, gravação sobreposta, medição de lag; protocolo Arguelles (blind → transcript → read+shadow) |
|
|
|
| Estratégias de comunicação (CS) | Minijogo "descreva sem nomear" cronometrado; cartões de resgate; auto-repair pontuado positivamente |
|
|
|
| CEFR can-do | Badge = **"Você agora consegue: reclamar de um item com defeito"**, com verificação por voz. Pre-A1 → B2/C1 |
|
|
|
|
|
|
## 4. Trilhas e missões (espinha dorsal)
|
|
|
|
|
|
**Trilha Bambino (A0–A1)** — núcleo da ideia: quero/não quero, tenho/preciso, gosto, dói, é grande/pequeno, mais/menos, isto/aquilo, números, sim/não/forse, e principalmente os **salvavidas**: *come si dice…? / non capisco / ripeta piano / come si scrive? / scusi, non conosco la parola*.
|
|
|
|
|
|
**Trilha Viaggio (A1–B2)** — aeroporto e alfândega · check-in de voo · táxi/ônibus/trem · hotel (checar, reclamar do quarto, pedir extra) · bar e restaurante (pedir, alergia, conta, gorjeta, reserva) · supermercado/padaria/lanche ("vorrei un panino con…" + descrever o que não sei o nome) · farmácia e médico (sintomas, dor, dosagem) · banco e câmbio · aluguel de carro · compras e devolução · reclamar/negociar/recusar · fazer amizade/small talk · emergência e polícia · telefone/online burocrático.
|
|
|
|
|
|
**Trilha Vivere (B1–C1)** — questura/permesso, ASL/sanità, SPID, comune/anagrafe, casa e landlord, scuola dei figli, lavoro, preparazione CILS/CELI B1 cittadinanza.
|
|
|
|
|
|
Cada missão = `scenario` com: objetivos can-do, chunks essenciais, diálogos-âncora (áudio), armadilhas reais (tu vs Lei, cortesia italiana, "magari/dai/vabbè"), role-play de voz livre, e checklist de sobrevivência offline.
|
|
|
|
|
|
## 5. Motor de feedback (o diferencial)
|
|
|
|
|
|
Pipeline por tentativa de fala:
|
|
|
1. **ASR** (qwen omni-flash, tolerante a sotaque) → transcrição + confusão provável.
|
|
|
2. **Judge** (qwen3.8-max) produz JSON estruturado:
|
|
|
- `meaning_conveyed`: full | partial | failed
|
|
|
- `naturalness`: score + versão que um italiano diria
|
|
|
- `grammar`: erros classificados (grave=gera mal-entendido / leve / cosmético)
|
|
|
- `next_move`: continuação do diálogo como italiano faria
|
|
|
- `rescue_card`: se o aluno travou por falta de palavra → ensina o salvavita aplicável
|
|
|
3. **Regra de ouro:** `meaning_conveyed=full` ⇒ missão avança mesmo com erros graves leves; feedback sempre termina com a frase reconstruída para repetir.
|
|
|
4. Botão "isto estava certo" → registra dissidência (dataset futuro de calibração).
|
|
|
|
|
|
## 6. Arquitetura técnica
|
|
|
|
|
|
```
|
|
|
cursoitaliano/
|
|
|
app/ # PWA React+Vite+TS (IndexedDB/Dexie, Workbox SW, MediaRecorder, Web Speech playback)
|
|
|
src/lib/ai.ts # cliente OpenAI-compatible -> LiteLLM (http://10.8.0.1:4000/v1)
|
|
|
src/engine/ # judge, scoring, srs, mission graph
|
|
|
src/content/ # JSONs gerados (missões, chunks, diálogos, salvavidas)
|
|
|
server/ # Node TS: /transcribe /judge /tts /generate-mission (cache + rate-limit + fallback chain)
|
|
|
content/ # pipeline de geração (Node) -> JSON versionado no repo
|
|
|
audio/ # assets TTS pré-gerados (por missão)
|
|
|
SPEC.md README.md .env.example
|
|
|
```
|
|
|
|
|
|
- **IA**: tudo via LiteLLM local (sem custo PAYG): chat/judge `qwen3.8-max`, drills rápidos `qwen3.8-flash`, voz/ASR `qwen3-omni-flash` (audio base64), TTS via Edge TTS vozes `it-IT-ElsaNeural`/`it-IT-DiegoNeural` (geração em lote, pacote offline; fallback Web Speech API).
|
|
|
- **Offline**: catálogo, chunks, diálogos e áudio empacotados no build + IndexedDB; role-play de voz exige rede; **phrasebook de resgate e SRS funcionam 100% offline**; fila de tentativas para julgamento quando voltar a conexão.
|
|
|
- **Segurança**: chave do proxy fora do bundle — `.env` no `server/`, app fala só com o próprio server; `.env` no .gitignore; `.env.example` sem segredo.
|
|
|
|
|
|
## 7. MVP (o que está sendo construído agora)
|
|
|
1. Repo inicializado, config, scripts.
|
|
|
2. Conteúdo gerado: trilha Bambino completa (12 unidades) + Viaggio M1–M6 (aeroporto, táxi/trem, hotel, restaurante, bar/lanche, farmácia/médico), cada uma com can-dos, 12–20 chunks, 2 diálogos, role-play prompts, salvavidas.
|
|
|
3. Server com `/judge` (3-eixos), `/transcribe` (omni), `/tts`.
|
|
|
4. App PWA: home por missões, player de diálogo com áudio, **cabine de voz** (gravar → judge → feedback "quase lá"), minijogo "descreva sem nomear", SRS de chunks, modo resgate offline.
|
|
|
5. README com rodar-local, arquitetura e roadmap (trilhas restantes, shadowing mode, CILS prep, Android nativo).
|
|
|
|
|
|
## 8. Roadmap pós-MVP
|
|
|
- Missões 7–15 da trilha Viaggio + trilha Vivere inteira (geração pelo mesmo pipeline).
|
|
|
- Modo carro/shadowing com medição de lag, análise fonêmica de geminadas.
|
|
|
- Export de erro como currículo (log de interlíngua + revisão adaptativa).
|
|
|
- Trilha CILS/CELI B1 (cidadania) com simulado.
|
|
|
- Wrapper Android (Capacitor) com áudio offline por pacote.
|
|
|
- Calibração do judge com os votos "isto estava certo".
|