Planner de estudos com autenticação Google OAuth, sincronização multi-dispositivo e análise de desempenho.
- Framework: NestJS + TypeScript
- Database: PostgreSQL com Prisma ORM
- Autenticação: better-auth com Google OAuth
- Validação: class-validator + class-transformer
- Framework: React 19 + TypeScript + Vite
- Estilização: Tailwind CSS + shadcn/ui
- Gráficos: Chart.js + react-chartjs-2
- Estado: Zustand
- Roteamento: React Router DOM
- Docker e Docker Compose instalados
- Conta no Google Cloud Console (para OAuth)
- Acesse Google Cloud Console
- Crie um novo projeto ou selecione um existente
- Vá em APIs & Services → Credentials
- Clique em Create Credentials → OAuth client ID
- Escolha Web application
- Adicione as URIs de redirecionamento:
http://localhost:3000/api/auth/callback/google
- Copie o Client ID e Client Secret
O arquivo backend/.env já existe. Atualize as credenciais do Google OAuth:
GOOGLE_CLIENT_ID=seu-client-id-aqui.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-seu-client-secret-aquiAs outras variáveis já estão configuradas:
- ✅
BETTER_AUTH_SECRET- Já configurado - ✅
DATABASE_URL- Configurado para PostgreSQL no Docker - ✅
PORT,NODE_ENV,FRONTEND_URL- Já configurados
docker-compose upIsso iniciará:
- ✅ PostgreSQL (porta 5432)
- ✅ Backend NestJS (porta 3000)
- ✅ Frontend Nginx (porta 8080)
Na primeira vez, em outro terminal:
docker-compose exec backend npx prisma migrate dev --name initdocker-compose downdocker-compose up --build- Frontend: http://localhost:8080
- Backend API: http://localhost:3000
study-planner/
├── backend/ # Backend NestJS
│ ├── src/
│ │ ├── auth/ # Autenticação (better-auth + Google OAuth)
│ │ ├── study-sessions/ # CRUD de sessões de estudo
│ │ ├── weekly-goal/ # Metas semanais
│ │ ├── config/ # Configurações do usuário
│ │ ├── prisma/ # Prisma service
│ │ └── main.ts # Entry point
│ ├── prisma/
│ │ └── schema.prisma # Schema do banco de dados
│ └── .env # Variáveis de ambiente
├── frontend/ # Frontend React + Vite
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ │ ├── calendar/ # Calendário, sessões, timer
│ │ │ ├── dashboard/ # Gráficos e estatísticas
│ │ │ ├── layout/ # Layouts da aplicação
│ │ │ └── ui/ # Componentes UI (shadcn)
│ │ ├── pages/ # Páginas da aplicação
│ │ ├── hooks/ # Custom hooks
│ │ ├── store/ # Estado global (Zustand)
│ │ ├── lib/ # API client e utilitários
│ │ └── types/ # Tipos TypeScript
│ └── index.html # Entry point
├── docker-compose.yml # Orquestração Docker
├── nginx.conf # Configuração Nginx
└── README.md # Este arquivo
GET /api/auth/google- Login com Google OAuthGET /api/auth/callback/google- Callback OAuthGET /api/auth/me- Usuário atual (protegida)POST /api/auth/logout- Logout (protegida)
GET /api/study-sessions- Listar sessões (protegida)POST /api/study-sessions- Criar sessão (protegida)PUT /api/study-sessions/:id- Atualizar (protegida)DELETE /api/study-sessions/:id- Deletar (protegida)
GET /api/config- Obter configuração (protegida)PUT /api/config- Atualizar configuração (protegida)
GET /api/weekly-goals- Listar metas semanais (protegida)PUT /api/weekly-goals/:weekStart- Atualizar meta semanal (protegida)
cd backend
npm install
npx prisma generate
npx prisma migrate dev
npm run start:devcd frontend
npm install
npm run dev- ✅ Autenticação Google OAuth - Login seguro com conta Google
- ✅ Calendário Interativo - Visualize e gerencie sessões de estudo
- ✅ Timer de Estudo - Cronômetro integrado para sessões
- ✅ Dashboard com Gráficos - Análise de desempenho com Chart.js
- ✅ Heatmap Anual - Visualização de atividade no estilo GitHub
- ✅ Progresso Semanal - Acompanhe suas metas semanais
- ✅ Metas Personalizáveis - Defina metas semanais por período
- ✅ Adição Rápida - Adicione sessões de forma inline
- ✅ Sincronização Multi-dispositivo - Dados salvos no backend
O deploy é automatizado via GitHub Actions usando tags específicas.
| Tag Pattern | Deploy |
|---|---|
frontend-v* |
Frontend → Netlify |
backend-v* |
Backend → Fly.io |
# Deploy do frontend
git tag frontend-v1.0.0
git push origin frontend-v1.0.0
# Deploy do backend
git tag backend-v1.0.0
git push origin backend-v1.0.0Vá em Settings → Secrets and variables → Actions e adicione:
| Secret | Descrição | Como obter |
|---|---|---|
NETLIFY_AUTH_TOKEN |
Token de autenticação Netlify | netlify login → Account Settings → Personal Access Tokens |
NETLIFY_SITE_ID |
ID do site Netlify | netlify status ou Dashboard do Netlify |
FLY_API_TOKEN |
Token de autenticação Fly.io | fly tokens create deploy |
| Variable | Descrição |
|---|---|
VITE_API_BASE_URL |
URL do backend (ex: https://sua-api.fly.dev) |
VITE_FRONTEND_URL |
URL do frontend (ex: https://study-planner-front.netlify.app) |
VITE_APP_NAME |
Nome da aplicação |
- Frontend: https://study-planner-front.netlify.app
- Backend: (configurar após deploy no Fly.io)
# Instalar Netlify CLI
npm install -g netlify-cli
# Login
netlify login
# Inicializar projeto (primeira vez)
netlify init
# Deploy para produção
netlify deploy --prod --filter frontend-new
# Gerenciar variáveis de ambiente
netlify env:list --filter frontend-new
netlify env:set VITE_API_BASE_URL https://sua-api.fly.dev --filter frontend-new# Instalar Fly CLI
curl -L https://fly.io/install.sh | sh
# Login
fly auth login
# Deploy
fly deploy- Os dados são salvos no banco PostgreSQL
- A sessão expira após 7 dias
- CORS configurado para aceitar
http://localhost:8080 - Todos os endpoints de API (exceto auth) requerem autenticação
Criado com React, NestJS, PostgreSQL, better-auth, Prisma, Tailwind CSS, Chart.js e Zustand