Aplicativo de produtividade para desenvolvedores com técnica Pomodoro, integração Git e relatórios.
- Frontend/Backend: Next.js 14 (Pages Router)
- Banco de Dados: Supabase (PostgreSQL)
- Autenticação: Supabase Auth (cookies httpOnly, OAuth GitHub/Google)
- Validação: Zod
- Estilização: Tailwind CSS
app/
├── pages/
│ └── api/ # API Routes (Backend)
│ ├── auth/ # Autenticação (login, register, OAuth)
│ ├── cycles/ # Ciclos Pomodoro
│ ├── settings/ # Configurações
│ ├── reports/ # Relatórios
│ └── github/ # Integração GitHub (repos, issues)
├── lib/ # Utilitários
│ ├── supabase.js # Cliente Supabase
│ ├── auth.js # Autenticação (Supabase Auth + cookies)
│ └── validations.js # Schemas Zod
├── supabase/
│ └── schema.sql # Schema do banco de dados
└── public/ # Arquivos estáticos
- Acesse supabase.com e crie uma conta
- Crie um novo projeto
- Vá em SQL Editor e execute o arquivo
supabase/schema.sql - Vá em Settings > API e copie:
- Project URL
anonpublic keyservice_rolesecret key
Crie um arquivo .env.local na raiz do projeto app/:
# Supabase (Auth + Database)
NEXT_PUBLIC_SUPABASE_URL=https://seu-projeto.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=sua-chave-anon
SUPABASE_SERVICE_ROLE_KEY=sua-chave-service-role
# App
NEXT_PUBLIC_APP_URL=http://localhost:3000
# GitHub (Integração) - Opcional
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
# Node
NODE_ENV=developmentConsulte app/env.example para o template completo.
cd app
pnpm install
# ou
npm install# Desenvolvimento
pnpm dev
# ou
npm run dev
# Build para produção
pnpm build
pnpm startA aplicação estará disponível em: http://localhost:3000
- profiles: Perfis de usuário
- user_settings: Configurações do usuário
- cycles: Ciclos Pomodoro
- reports: Relatórios de produtividade
- tags: Tags do usuário (gerenciador de tarefas)
- tasks: Tarefas do usuário (gerenciador de tarefas)
O schema inclui políticas RLS básicas. Para usar autenticação do Supabase Auth, você precisará ajustar as políticas para usar auth.uid().
- Acesse o SQL Editor no Supabase Dashboard
- Cole o conteúdo de
supabase/schema.sql - Execute o script
O sistema usa Supabase Auth com cookies httpOnly. Suporta:
- Email/senha (registro e login)
- OAuth (GitHub, Google via Supabase Dashboard)
- Verificação por link de confirmação (Supabase)
POST /api/auth/register- Registrar usuárioPOST /api/auth/login- LoginGET /api/auth/me- Obter usuário atualGET /api/auth/session- Sessão atualPOST /api/auth/logout- LogoutPOST /api/auth/send-verification- Reenviar link de verificação
GET /api/cycles- Listar ciclosPOST /api/cycles- Criar cicloGET /api/cycles/[id]- Obter cicloPUT /api/cycles/[id]- Atualizar cicloDELETE /api/cycles/[id]- Deletar cicloGET /api/cycles/stats/overview- Estatísticas gerais
GET /api/settings- Obter configuraçõesPUT /api/settings- Atualizar configuraçõesPOST /api/settings/reset- Resetar configurações
POST /api/reports/generate- Gerar relatórioGET /api/reports- Listar relatóriosGET /api/reports/[id]- Obter relatórioDELETE /api/reports/[id]- Deletar relatório
GET /api/tags- Listar tagsPOST /api/tags- Criar tagDELETE /api/tags/[id]- Deletar tag
GET /api/tasks- Listar tarefasPOST /api/tasks- Criar tarefaPUT /api/tasks/[id]- Atualizar tarefaDELETE /api/tasks/[id]- Deletar tarefa
GET /api/github/repos- Listar repositórios do usuárioGET /api/github/issues- Listar issues de um repositórioPOST /api/github/select-repo- Selecionar repositório
GET /api/health- HealthcheckGET /api/status- Status do sistema
Cada rota de API é um arquivo em pages/api/ que exporta uma função handler:
export default async function handler(req, res) {
// req.method: GET, POST, PUT, DELETE
// req.body: Dados do corpo da requisição
// req.query: Query parameters
// res.status().json(): Resposta
}import { requireAuth } from '../../../lib/auth'
export default async function handler(req, res) {
try {
const { userId } = await requireAuth(req)
// userId contém o ID do usuário autenticado (Supabase auth.uid())
} catch (error) {
return res.status(401).json({ error: error.message })
}
}import { registerSchema } from '../../../lib/validations'
const validatedData = registerSchema.parse(req.body)- Implementar onboarding básico
- Integrar envio de emails (Resend ou outro serviço)
- Adicionar testes
- Rate limiting em endpoints de auth
- Deploy na Vercel
app/docs/GITHUB_CONNECT.md- Configurar integração GitHub (callback OAuth)TODO.md- Checklist do projeto e roadmap
MIT