Files
transcript/docs/superpowers/plans/2026-06-10-transcription-app-mvp.md

208 lines
6.9 KiB
Markdown

# Aplicativo de Transcrição Desktop MVP Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Criar o esqueleto funcional de um app desktop Windows/Linux de transcrição offline-first com Tauri, Rust, TypeScript, modal editável, catálogo de modelo Parakeet GGUF Q8, sidecar CrispASR preparado e CI/CD.
**Architecture:** O frontend TypeScript renderiza a tela/modal e chama comandos Tauri. O backend Rust mantém módulos pequenos para settings, modelos, transcrição, injeção, áudio e tray. Integrações nativas arriscadas ficam atrás de contratos e stubs explícitos para evoluir sem quebrar a arquitetura.
**Tech Stack:** Tauri 2, Rust 1.95, TypeScript, Vite, Vitest, GitHub Actions.
---
## File Structure
```text
.github/workflows/ci.yml CI de lint/typecheck/test/build
.github/workflows/build.yml Builds desktop Windows/Linux manuais
.github/workflows/release.yml Release por tag v*.*.*
.gitignore Ignora builds, deps, modelos e segredos
README.md Visão geral, comandos e limitações
package.json Scripts frontend/Tauri
index.html Entrada Vite
src/main.ts Estado e eventos da UI
src/styles.css Modal/responsividade/acessibilidade
src/vite-env.d.ts Tipos Vite/Tauri
src-tauri/Cargo.toml Crates Rust/Tauri
src-tauri/build.rs Build script Tauri
src-tauri/tauri.conf.json Configuração Tauri e bundle
src-tauri/capabilities/default.json Permissões Tauri
src-tauri/icons/icon.png Ícone mínimo temporário
src-tauri/src/main.rs Entrada nativa
src-tauri/src/lib.rs Bootstrap Tauri
src-tauri/src/app_state.rs Estado compartilhado
src-tauri/src/ui_commands.rs Comandos Tauri
src-tauri/src/tray.rs Tray/menu
src-tauri/src/settings/mod.rs Settings e defaults
src-tauri/src/models/mod.rs Catálogo/status de modelos
src-tauri/src/transcription/mod.rs Contratos de transcrição
src-tauri/src/transcription/crispasr.rs Sidecar CrispASR preparado
src-tauri/src/transcription/openai.rs Adaptador OpenAI-compatible preparado
src-tauri/src/injection/mod.rs Contratos/fallback de inserção
src-tauri/src/audio/mod.rs Estado de gravação MVP
src-tauri/src/error.rs Erros serializáveis
```
## Task 1: Scaffolding do projeto
**Files:**
- Create: `.gitignore`
- Create: `package.json`
- Create: `index.html`
- Create: `src/vite-env.d.ts`
- Create: `src-tauri/Cargo.toml`
- Create: `src-tauri/build.rs`
- Create: `src-tauri/tauri.conf.json`
- Create: `src-tauri/capabilities/default.json`
- Create: `src-tauri/src/main.rs`
- Create: `src-tauri/src/lib.rs`
- [ ] **Step 1: Criar configuração base do frontend e Tauri**
Criar arquivos com scripts `dev`, `build`, `test`, `typecheck`, `tauri:dev` e `tauri:build`. Usar Tauri 2 e Vite.
- [ ] **Step 2: Instalar dependências npm**
Run: `npm install`
Expected: `package-lock.json` criado e dependências instaladas.
- [ ] **Step 3: Verificar build frontend vazio**
Run: `npm run typecheck && npm run build`
Expected: TypeScript e Vite passam.
## Task 2: Contratos backend e testes Rust
**Files:**
- Create: `src-tauri/src/error.rs`
- Create: `src-tauri/src/settings/mod.rs`
- Create: `src-tauri/src/models/mod.rs`
- Create: `src-tauri/src/transcription/mod.rs`
- Create: `src-tauri/src/transcription/crispasr.rs`
- Create: `src-tauri/src/transcription/openai.rs`
- Create: `src-tauri/src/injection/mod.rs`
- Create: `src-tauri/src/audio/mod.rs`
- Modify: `src-tauri/src/lib.rs`
- [ ] **Step 1: Escrever tipos e testes unitários primeiro**
Testes devem cobrir:
- modelo Parakeet Q8 existe no catálogo;
- idioma manual é opcional por padrão;
- Wayland retorna inserção parcial/manual;
- CrispASR sem modelo configurado retorna erro claro.
- [ ] **Step 2: Rodar testes para validar contratos**
Run: `cargo test --manifest-path src-tauri/Cargo.toml`
Expected: todos os testes passam após implementação mínima.
## Task 3: Comandos Tauri e estado do app
**Files:**
- Create: `src-tauri/src/app_state.rs`
- Create: `src-tauri/src/ui_commands.rs`
- Modify: `src-tauri/src/lib.rs`
- [ ] **Step 1: Expor comandos pequenos para frontend**
Comandos:
- `get_app_snapshot`
- `start_recording`
- `stop_recording_and_transcribe`
- `copy_ready_text`
- `request_insert_text`
- `list_models`
- `get_settings`
- `save_settings`
- [ ] **Step 2: Testar build Rust**
Run: `cargo test --manifest-path src-tauri/Cargo.toml`
Expected: comandos compilam e testes continuam passando.
## Task 4: UI do modal flutuante
**Files:**
- Create: `src/main.ts`
- Create: `src/styles.css`
- Modify: `index.html`
- [ ] **Step 1: Construir UI sem framework pesado**
Criar interface com:
- status;
- textarea editável;
- botões gravar/parar, continuar, copiar, inserir e salvar;
- painel de modelo/configuração resumida;
- mensagens de fallback.
- [ ] **Step 2: Testar frontend**
Run: `npm run typecheck && npm run test -- --run && npm run build`
Expected: typecheck, Vitest e build passam.
## Task 5: Tray, assets e empacotamento
**Files:**
- Create: `src-tauri/src/tray.rs`
- Create: `src-tauri/icons/icon.png`
- Modify: `src-tauri/src/lib.rs`
- Modify: `src-tauri/tauri.conf.json`
- [ ] **Step 1: Adicionar tray básico**
Menu:
- Mostrar app;
- Iniciar gravação;
- Sair.
- [ ] **Step 2: Verificar build Tauri até onde o ambiente permitir**
Run: `npm run tauri:build`
Expected: se dependências do sistema estiverem instaladas, build gera bundle; se faltar WebView/NSIS/AppImage tooling, documentar o bloqueio e manter `cargo test` + `npm run build` verdes.
## Task 6: CI/CD e documentação
**Files:**
- Create: `.github/workflows/ci.yml`
- Create: `.github/workflows/build.yml`
- Create: `.github/workflows/release.yml`
- Create: `README.md`
- [ ] **Step 1: Criar workflows**
CI roda em PR/push para `main`. Build é manual. Release roda em tags `v*.*.*` e publica artefatos.
- [ ] **Step 2: Documentar arquitetura e limitações**
README deve explicar:
- offline-first;
- modelo Parakeet GGUF Q8;
- CrispASR sidecar;
- suporte Windows/Linux;
- Wayland parcial;
- comandos locais.
- [ ] **Step 3: Verificação final**
Run:
- `npm run typecheck`
- `npm run test -- --run`
- `npm run build`
- `cargo test --manifest-path src-tauri/Cargo.toml`
Expected: todos passam.
## Self-review
- Spec coverage: cobre organização, modal, inserção, modelo offline, CrispASR sidecar e CI/CD.
- Placeholder scan: não há etapas com TBD/TODO; integrações fora do MVP estão explicitamente isoladas.
- Type consistency: comandos e módulos nomeados de forma consistente com a estrutura proposta.