Ponto de situação

Editor de letras
com IA controlada

App web para escrita de letras com IA: projectos musicais, secções, geração de variações e preenchimento de blanks com rima e sílabas controladas. Pipeline de IA modular, com scoring e validação de coerência. Suporte PT-PT e Jamaican Patois.

👤 Uso pessoal (solo) 📁 ~/lyric-flow 🌿 master 📅 Início 2026-01-10 📦 github.com/kwana117/lyric-flow
Progresso global
85%
Milestones
10/13
10 feitos 2 em curso 1 por fazer

Sprint executada

5 frentes atacadas em paralelo — só falta deploy
🛡️ Middleware server-side
Resolvido · cookie lf_auth + matcher /app/*
Novo middleware.ts + lib/sessionCookie.ts. Login/logout e session-checks gerem o cookie. Acesso directo a /app sem cookie redireciona para /login.
🧪 Cobertura de testes
Resolvido · 184 → 205 testes
9 novos para resolveRhymeReference, 4 edge cases extra para extractBlankContext, 7 para computeRhymeOptions, 1 para anti-redundância gimme/lemme.
🔧 Refactor [projectId]/page.tsx
Resolvido parcial · 788 → 636 linhas (-152)
Extraídos computeRhymeOptions (113 linhas de lógica) para lib/rhymeOptions.ts e copy strings para app/app/[projectId]/copy.ts. Faltam mais hooks para chegar a <300.
✏️ Anti-padrões em prompts
Resolvido · gimme/lemme + encoding fix
Few-shot Patois reforçada com regra anti-redundância de subject pronouns. checkCoherence penaliza opções que começam com gimme/lemme/gotta/wanna após "mi/yuh/we/etc.". Fix de encoding em FEW_SHOT_PTPT.
🚀 Deploy Vercel preparado
Pronto · falta acção manual no Supabase
docs/DEPLOY.md com passos completos. .env.example actualizado. Pré-requisito manual: rotar service role key Supabase no dashboard da conta GitHub auth.
01 · Milestones

O caminho até dar o projecto como fechado.

MVP funcional

Login, projectos, secções, geração de variações e blanks.

Feito

AI pipeline modular

prompts · rhymes · syllables · validation · scoring composto.

Feito

Refactor Codex top-5

Dedup generateBlankVariations, supabase helper partilhado, db typed mappers, dedup utils em [projectId]/page.tsx.

Feito

Dev auth bypass + landing CTA

Entrada rápida em dev, CTA do landing aponta para /app.

Feito

Suite de testes core

205 testes (syllables, rhymes, prompts, validation, ai, rhymeOptions).

Feito

gpt-4o em blank generation

ai.ts usa getModelConfig("high"). Decisão: uso pessoal, qualidade prevalece sobre custo.

Feito

Rate limiting in-memory

lib/rateLimit.ts aplicado nas 3 API routes. 30 req/min por IP.

Feito

Middleware server-side para /app/*

middleware.ts valida cookie lf_auth. Cookie sincronizado em login, logout e session checks. Pré-requisito de deploy.

Feito

Testes de zonas críticas

resolveRhymeReference (9), extractBlankContext edge cases (4), computeRhymeOptions (7), redundância gimme/lemme (1).

Feito

Anti-padrões em prompts e validation

Few-shot Patois (gimme/lemme), checkCoherence penaliza redundância de subject pronouns. Fix encoding coraç□□o → coração.

Feito

Qualidade do blank generation

gpt-4o + prompts melhorados. Falta validação manual com casos reais de uso PT-PT/Patois.

Em curso

Refactor [projectId]/page.tsx

788 → 636 linhas (-152). Próximos: extrair useBlankGeneration e useProjectData. Alvo <300 linhas.

Em curso

Deploy produção (Vercel)

docs/DEPLOY.md pronto. Pré-requisito manual: rotar credenciais Supabase no dashboard.

Por fazer
02 · Próximos passos

Onde retomar quando voltar a este projecto.

Imediato

1
Validar blank generation manualmente

Abrir o app, criar projecto PT-PT e Patois, testar 6-8 cenários de blanks. Confirmar que com gpt-4o as opções são consistentes em sílabas e coerência.

2
Continuar refactor [projectId]/page.tsx

Ainda em 636 linhas. Extrair useBlankGeneration e useProjectData para chegar abaixo de 300.

3
Rotar credenciais Supabase

Manual no dashboard (conta GitHub auth). Pré-requisito do deploy.

4
Deploy Vercel

Seguir docs/DEPLOY.md. vercel link, env vars, deploy preview, depois --prod.

Riscos · Bloqueadores

Bloqueio de segurança (latente) Service role key Supabase no histórico git. Não bloqueia uso pessoal local mas tem de ser resolvido antes de deploy público ou repo público.
Middleware é login marker O cookie lf_auth indica que houve login, mas a validação do bearer token só acontece nas API routes. Suficiente para escala 1; não é defesa contra adversários determinados.
Sem testes de UI LyricEditor usa contentEditable com lógica DOM complexa, zero cobertura — alto risco de regressão silenciosa.
Custo gpt-4o Cada blank custa ~10-15× mais que mini. Negligível em uso pessoal; revisitar se a app abrir a outros utilizadores.
03 · Actividade recente

Últimos commits + stack.

agoraworking feat: middleware + rate limiting + gpt-4o + 21 novos testes + refactor (uncommitted)
11 days ago2e3adcf feat: dev auth bypass + AI pipeline cleanup + landing CTA to /app
6 weeks ago4153d96 Refatora top5: dedup AI, supabase helper, tipagem db e testes
2 months ago75e0656 feat: decompose AI generation into specialized modules with scoring pipeline
2 months agobda518b feat: blank generation improvements + issues doc
2 months ago8737229 Restore landing gradients and spacing from old homepage
2 months agoe01fd21 feat: add delete project with confirmation
2 months ago7e977a0 fix: blank completions - avoid repeating prefix, validate syllables on completion only

Stack

Next.js 16 TypeScript 5.5 Supabase OpenAI gpt-4o Zod Vitest
Notas: Pipeline de IA decomposto em módulos com scoring composto (theme + rhyme + syllables + coherence). PT-PT tem regras de sílabas próprias (countSyllablesPtRules). Design system em CSS custom properties (sem Tailwind), dark mode only. Build limpo, 205 testes passam, page.tsx 788 → 636 linhas.