StudyTrack
O contexto
Cursinhos e escolas preparatórias competem com plataformas nacionais que têm marca própria e nenhum vínculo com a instituição. O aluno estuda no app de outra empresa, e a escola não vê nada do que acontece ali. A StudyTrack inverte isso: a plataforma leva a marca da escola, e o dado volta para a coordenação.
O que as duas pontas enxergam.

Painel da escola
O que a coordenação vê: volume, evolução, onde a turma trava e quem está parando de aparecer.

Portal do aluno
Do outro lado, o aluno vê progresso, sequência, missão do dia e o quanto falta para o próximo nível.

Redações
Envio, correção por competência e histórico de evolução por aluno.

Site do produto
A ponta comercial: é por aqui que uma instituição descobre a plataforma e pede demonstração.
O problema
Coordenação pedagógica descobre que um aluno despencou quando a prova chega — tarde demais para intervir. A escola decide no escuro porque o dado existe espalhado em planilha, caderno e cabeça de professor.
A solução
Um portal por instituição, com a identidade visual dela, onde o desempenho de cada aluno vira métrica em tempo real: evolução por disciplina, lacunas identificadas, redações corrigidas por competência e relatórios que a gestão consegue ler sem ser analista de dados.
O meu papel
Cofundador e desenvolvedor. Divido a construção do produto com o outro fundador — frontend e backend, do schema ao deploy. Também respondo pelo suporte direto às instituições, o que muda como eu escrevo código: cada decisão tem alguém do outro lado na segunda de manhã.
- 71rotas no app
- ~163klinhas de código
- 1.610commits no produto
- 5.000+questões catalogadas
Stack
- Next.js 16
- React 19
- TypeScript
- Tailwind 4
- Python
- Flask
- Supabase
- PostgreSQL
- Fly.io
- Vercel
Como o sistema está montado.
Portal por instituição
Cada escola tem rota própria, identidade visual própria e base de alunos isolada. O mesmo código serve todas — o que muda é configuração, não fork.
Frontend
Next.js com React Server Components onde faz sentido e cliente onde é interativo. O app tem 71 rotas entre portal do aluno, painel da escola e administração interna.
Backend
Flask organizado em blueprints por domínio — aluno, parceiro, administração, integrações — com a lógica em services, separada da camada HTTP.
Dados e autenticação
Supabase sobre PostgreSQL, com autenticação e storage no mesmo lugar.
Infraestrutura
Frontend na Vercel, backend em container no Fly.io, tarefas agendadas por APScheduler.
Os quatro problemas que deram trabalho.
Isolar instituições sem duplicar o produto
Cada escola precisa enxergar só os próprios alunos, com a própria marca, sem que isso vire uma cópia do sistema por cliente. A decisão foi tratar a instituição como parâmetro em todas as camadas — rota, consulta e permissão — para que adicionar uma escola seja cadastro, não deploy.
Corrigir redação manuscrita
Professor de cursinho gasta horas corrigindo redação à mão. O fluxo aceita a foto da folha, extrai o texto e devolve avaliação por competência do ENEM, com feedback estruturado — e o professor revisa em vez de começar do zero.
Gamificar sem distorcer o dado
XP, streak, níveis e ranking aumentam engajamento, mas criam um sistema de pontuação que várias ações disputam ao mesmo tempo. Contagem concorrente é a classe de bug mais fácil de não perceber: ninguém reclama de ponto a mais. Isso mudou como eu trato escrita concorrente no banco.
Relatório que a coordenação lê
Dado bruto não convence diretor. A plataforma gera relatórios em PDF com gráficos, evolução por disciplina e recorte por turma, montados no backend com ReportLab e matplotlib — feitos para sair da tela e virar reunião.