Controle financeiro pessoal simples e bonito. Registre receitas e despesas, acompanhe seu saldo e visualize seu historico financeiro.
- Next.js 16 (App Router, Server Components, Server Actions)
- TypeScript
- Tailwind CSS v4 + shadcn/ui
- Prisma 7 + Supabase PostgreSQL
- Framer Motion (animacoes)
- jose (JWT, edge-compatible)
- Sonner (toasts)
- Vitest + Testing Library (testes)
- Node.js 18+
- Conta no Supabase (gratuito)
npm install- Criar projeto no Supabase (regiao: South America - Sao Paulo)
- Ir em Settings > Database
- Copiar a Connection string (URI) — Transaction mode, porta 6543
Criar .env.local na raiz do projeto:
DATABASE_URL="postgresql://postgres.SEU-PROJECT-REF:SUA-SENHA@aws-0-sa-east-1.pooler.supabase.com:6543/postgres?pgbouncer=true"
JWT_SECRET="gere-uma-string-segura-com-32-caracteres-minimo"npx prisma db pushVerificar no Supabase Dashboard > Table Editor se as tabelas User, Category e Transaction foram criadas.
npx prisma generatenpm run devAbrir http://localhost:3000.
| Comando | Descricao |
|---|---|
npm run dev |
Servidor de desenvolvimento |
npm run build |
Build de producao |
npm run start |
Servidor de producao |
npm run lint |
ESLint |
npx vitest run |
Rodar testes |
npx prisma db push |
Sincronizar schema com banco |
npx prisma generate |
Gerar Prisma Client |
npx prisma studio |
Interface visual do banco |
npm run build # verificar que compila sem erros- Vercel Dashboard > Add New > Project
- Conectar GitHub e selecionar o repositorio
- Adicionar Environment Variables antes do deploy:
DATABASE_URL= connection string do SupabaseJWT_SECRET= string segura de 32+ caracteres
- Clicar Deploy
- Vercel > Settings > Domains > Add Domain
- Configurar DNS na Cloudflare (ou outro provider):
wwwcomo CNAME apontando paracname.vercel-dns.com@como A record para o IP da Vercel- Proxy Cloudflare: DNS only (cinza, nao laranja)
src/
├── app/
│ ├── (auth)/ # Login e registro (sem nav)
│ │ ├── login/
│ │ └── register/
│ ├── (app)/ # App autenticado (com nav)
│ │ ├── page.tsx # Dashboard
│ │ ├── transactions/
│ │ └── profile/
│ ├── layout.tsx # Root layout
│ └── globals.css # CSS variables e tema
├── components/ # Componentes React
├── actions/ # Server Actions
├── lib/ # Utilitarios (auth, db, format, validations)
├── types/ # TypeScript types
└── __tests__/ # Testes unitarios
- Cadastro e login com JWT em httpOnly cookie
- Dashboard com saldo, semaforo financeiro e ultimas transacoes
- Registro de transacoes com teclado numerico e categorias visuais
- Categorias separadas para despesas e receitas
- Historico com filtros por periodo (hoje/semana/mes)
- Exclusao com swipe e undo (3s)
- Perfil com avatar de iniciais e logout
- Animacoes com Framer Motion (counter, fade, slide, spring)
- Layout desktop: phone frame + guia do aluno side-by-side
- Dark mode nativo
- 117 testes unitarios
| Variavel | Descricao | Obrigatoria |
|---|---|---|
DATABASE_URL |
Connection string PostgreSQL (Supabase) | Sim |
JWT_SECRET |
Segredo para assinar JWT (min 32 chars) | Sim |