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

6.9 KiB

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

.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.