← Retour aux projets
Aula Meu Dinheiro
#MeuDinheiro
Controle financeiro pessoal simples e bonito. Registre receitas e despesas, acompanhe seu saldo e visualize seu historico financeiro.
#Stack
- 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)
#Pre-requisitos
- Node.js 18+
- Conta no Supabase (gratuito)
#Setup
#1. Instalar dependencias
npm install
#2. Configurar Supabase
- Criar projeto no Supabase (regiao: South America - Sao Paulo)
- Ir em Settings > Database
- Copiar a Connection string (URI) — Transaction mode, porta 6543
#3. Configurar variaveis de ambiente
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"
#4. Criar tabelas no banco
npx prisma db push
Verificar no Supabase Dashboard > Table Editor se as tabelas User, Category e Transaction foram criadas.
#5. Gerar Prisma Client
npx prisma generate
#6. Rodar o projeto
npm run dev
Abrir http://localhost:3000.
#Scripts
| 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 |
#Deploy na Vercel
#1. Preparar
npm run build # verificar que compila sem erros
#2. Importar na Vercel
- 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
#3. Dominio customizado (opcional)
- 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)
#Estrutura do Projeto
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
#Funcionalidades
- 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
#Variaveis de Ambiente
| Variavel | Descricao | Obrigatoria |
|---|---|---|
DATABASE_URL |
Connection string PostgreSQL (Supabase) | Sim |
JWT_SECRET |
Segredo para assinar JWT (min 32 chars) | Sim |