- Go: middleware RequireAuth protege todas as rotas /api/*
- Go: POST /api/login valida APP_USERNAME/APP_PASSWORD e emite cookie HttpOnly 30 dias
- Go: GET /api/auth/me e POST /api/logout
- Vue: LoginView com design Arcade Neon
- Vue: router guard redireciona para /login se não autenticado
- Vue: api.ts redireciona para /login em qualquer 401
- docker-compose: APP_USERNAME e APP_PASSWORD como env vars
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Implementa o sistema visual Arcade Neon do neon-handoff/ em todo o app:
- tokens.css: tokens --fc-*, utilities (fc-pixel/mono/body/glow), form inputs/buttons globais
- AppHud.vue: HUD persistente com LV/XP/META + nav chips por rota
- BottomNav.vue: nav mobile com 5 rotas
- NeonPanel.vue, CharacterSprite.vue, XPBar.vue, HUDStat.vue: componentes base
- MonthSwitcher.vue, LevelUpModal.vue
- HomeView, CharacterView, TransactionsView, ImportView, CategoriesView,
AccountsView, SettingsView: reescritos com Arcade Neon
- sprites PNG (lv01–lv15) + sprite-data.json: cosméticos com temas de cor
- game.ts: equippedTheme getter para merge de cores do cosmético equipado
- 008_cosmetics.sql: seeds alinhados com sprite-data.json
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Runner agora checa schema_migrations antes de rodar cada SQL — sem
reexecução de seeds a cada startup. Quests: UNIQUE(title, quest_type).
Cosmetics: UNIQUE(name), tipos corrigidos para hair/shirt/pants/shoes.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
CRUD de contas (corrente/poupança/investimento/cartão) com saldo calculado
automaticamente. account_id nullable em transactions. Widget patrimônio no
dashboard. Tela /contas. Seletor de conta nas transações manuais.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Adiciona CRUD manual de transações (income/expense) com filtro mensal, CRUD de
recorrências fixas com verificação mensal de cobertura (±10% por categoria),
endpoint de ignore/unignore e telas Vue para Transações e Configurações.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Parser OFX tolerante ao formato SGML de bancos brasileiros (sem closing tags, BOM,
timezone suffix). Parser CSV com separador de campo/decimal configurável. Dedup por
FITID (OFX) ou date+amount+desc normalizado. Fluxo: POST /preview → revisão na UI
→ POST /confirm salva e loga. Migration 002 adiciona external_id com unique index.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
API REST /api/categories (GET/POST/PUT/DELETE) com regras de negócio:
categorias padrão não podem ser excluídas; categorias com transações vinculadas
também bloqueadas. Tela Vue com formulário inline de criação/edição, indicador
visual de categorias padrão e botão de exclusão condicional.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Monorepo com apps/api (Go 1.23 + chi + pgx) e apps/web (Vue 3 + Vite + TypeScript).
Dockerfile multi-stage consolida tudo em imagem única (~25MB) para deploy no Dokploy.
Migrations rodando na inicialização; Vue embedado no binário Go via //go:embed.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>