8.6 KiB
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:
- ASR (qwen omni-flash, tolerante a sotaque) → transcrição + confusão provável.
- Judge (qwen3.8-max) produz JSON estruturado:
meaning_conveyed: full | partial | failednaturalness: score + versão que um italiano diriagrammar: erros classificados (grave=gera mal-entendido / leve / cosmético)next_move: continuação do diálogo como italiano fariarescue_card: se o aluno travou por falta de palavra → ensina o salvavita aplicável
- 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. - 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ápidosqwen3.8-flash, voz/ASRqwen3-omni-flash(audio base64), TTS via Edge TTS vozesit-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 —
.envnoserver/, app fala só com o próprio server;.envno .gitignore;.env.examplesem segredo.
7. MVP (o que está sendo construído agora)
- Repo inicializado, config, scripts.
- 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.
- Server com
/judge(3-eixos),/transcribe(omni),/tts. - 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.
- 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".