Aplicação para organizar tarefas e estudos, com login pelo Google. Cada tarefa pode ser privada ou pública — as públicas ganham um link compartilhável e recebem comentários de outros usuários autenticados.
📸 Adicione aqui um print da home e do painel — de preferência um GIF curto mostrando o login com Google, a criação de uma tarefa pública e o compartilhamento do link.
- Login com Google via NextAuth, com sessão disponível em toda a aplicação
- Painel protegido:
/dashboardvalida a sessão no servidor e redireciona para a home quem não estiver autenticado - Criação de tarefas com opção de marcá-las como públicas
- Atualização em tempo real: a lista usa o
onSnapshotdo Firestore, então qualquer alteração aparece na tela sem recarregar - Compartilhamento: as tarefas públicas geram um link copiado direto para a área de transferência
- Comentários nas tarefas públicas, com exclusão restrita a quem escreveu
- Home com contadores de tarefas e comentários, gerados estaticamente e revalidados a cada 60 segundos (ISR)
- Exclusão de tarefas e comentários
| Área | Tecnologia |
|---|---|
| Framework | Next.js 16 (Pages Router) · React 19 · TypeScript |
| Compilador | React Compiler (reactCompiler: true) |
| Autenticação | NextAuth com provider Google |
| Banco | Cloud Firestore |
| Estilos | CSS Modules |
| Ícones | react-icons |
-
Três estratégias de renderização, cada uma onde faz sentido. A home usa
getStaticPropscomrevalidateporque os contadores toleram estar 60 segundos desatualizados; o painel usagetServerSidePropsporque precisa da sessão a cada requisição; a lista de tarefas é client-side comonSnapshot, porque precisa reagir na hora. -
Proteção de rota no servidor. A verificação de sessão acontece antes da página existir, no
getServerSideProps— não é umifde interface que o usuário poderia contornar. -
Consulta escopada por usuário. As tarefas são buscadas com
where("user", "==", email)e ordenadas por data de criação, então o cliente nunca recebe dados de outra pessoa. -
Autorização dos comentários no cliente e no dado. O botão de excluir só aparece para o autor, e o campo
usergravado junto ao comentário é o que permite validar isso do lado do banco.
- Node.js 20+
- Um projeto no Firebase com o Firestore habilitado
- Credenciais OAuth no Google Cloud Console
git clone https://github.com/LuizMath/Tarefas.git
cd Tarefas
npm installCrie um .env.local na raiz:
GOOGLE_CLIENT_ID=seu_client_id
GOOGLE_CLIENT_SECRET=seu_client_secret
JWT_SECRET=uma_string_aleatoria_longa
NEXTAUTH_URL=http://localhost:3000
NEXT_PUBLIC_URL=http://localhost:3000No Google Cloud Console, cadastre http://localhost:3000/api/auth/callback/google como URI de redirecionamento autorizada.
Crie as coleções tarefas e comments. Elas são preenchidas automaticamente no primeiro uso.
npm run devDisponível em http://localhost:3000.
src/
├── pages/
│ ├── index.tsx # home com contadores (ISR)
│ ├── dashboard/ # painel protegido
│ ├── task/[id].tsx # tarefa pública e comentários
│ └── api/auth/ # rota do NextAuth
├── components/
│ ├── Header/ # navegação e botão de login/logout
│ └── TextArea/
├── services/
│ └── firebaseConnection.ts
└── styles/
- Mover a configuração do Firebase para variáveis
NEXT_PUBLIC_*em vez de deixá-la fixa no código - Cancelar a inscrição do
onSnapshotno cleanup douseEffect, evitando listeners acumulados - Exibir erro na interface quando a criação de uma tarefa falhar
- Feedback visual de "link copiado" após o compartilhamento
MIT