Ferramente-projeto/README.md

377 lines
10 KiB
Markdown
Raw Permalink Normal View History

2026-01-07 20:50:15 +00:00
# 🚀 Ferramenta de Gestão de Projetos
Uma aplicação completa para gerenciamento de projetos com sistema de temporizador, kanban board, organizações e controle de tempo gasto em tarefas.
## 📋 Índice
- [Funcionalidades](#-funcionalidades)
- [Tecnologias Utilizadas](#-tecnologias-utilizadas)
- [Pré-requisitos](#-pré-requisitos)
- [Instalação](#-instalação)
- [Configuração](#-configuração)
- [Como Usar](#-como-usar)
- [Estrutura do Projeto](#-estrutura-do-projeto)
- [API Endpoints](#-api-endpoints)
- [Deploy](#-deploy)
## ✨ Funcionalidades
### 🔐 **Sistema de Autenticação**
- Login via GitHub OAuth
- Sessões persistentes
- Controle de acesso baseado em autenticação
- Logout seguro
### 🏢 **Gestão de Organizações**
- Criar e gerenciar organizações
- Adicionar/remover membros
- Controle de permissões (Owner, Admin, Member)
- Seleção de organização ativa
- Persistência da organização selecionada
### 📊 **Dashboard Principal**
- Visão geral de projetos ativos
- Estatísticas em tempo real:
- Projetos ativos
- Cards ativos
- Cards concluídos
- Horas estimadas vs. horas produzidas
- Filtros por status e busca por nome
- Indicadores visuais de progresso
### 📋 **Gestão de Projetos**
- Criar novos projetos
- Definir datas de início e fim
- Configurar URLs de repositório
- Adicionar membros aos projetos
- Editar informações do projeto
- Visualizar estatísticas detalhadas
### 🎯 **Sistema Kanban**
- **5 Status**: A fazer, Em progresso, Em revisão, Testando, Concluído
- **Drag & Drop**: Arrastar cards entre colunas
- **Cores por Status**: Identificação visual rápida
- **Ordenação**: Reorganizar cards dentro das colunas
- **Criação de Cards**: Modal com campos essenciais
- **Edição de Cards**: Interface completa para modificação
### ⏱️ **Sistema de Temporizador**
- **Controle Único**: Apenas um card ativo por vez
- **Temporizador Global**: Exibição centralizada no header
- **Controles**: Play, Pause, Stop
- **Persistência**: Tempo salvo automaticamente no banco
- **Indicadores Visuais**: Card ativo destacado
- **Notificações**: Feedback ao finalizar atividades
- **Histórico**: Visualização de tempo gasto por card
### 📝 **Gestão de Cards**
- **Campos Obrigatórios**: Nome, descrição, status, horas estimadas
- **Adição Manual de Tempo**: Inserir tempo gasto manualmente
- **Histórico de Tempo**: Visualizar todos os registros de tempo
- **Edição Completa**: Modificar todos os campos
- **Validações**: Controle de dados obrigatórios
### 👥 **Gestão de Membros**
- Adicionar usuários aos projetos
- Visualizar membros com avatares
- Controle de permissões por projeto
- Integração com sistema de organizações
### 📈 **Estatísticas e Relatórios**
- Tempo total gasto por projeto
- Comparação entre horas estimadas e reais
- Indicadores visuais de progresso
- Estatísticas por organização
## 🛠️ Tecnologias Utilizadas
### **Frontend**
- **Next.js 15.4.1** - Framework React
- **React 19.1.0** - Biblioteca de interface
- **TypeScript** - Tipagem estática
- **Tailwind CSS** - Framework de estilização
- **Radix UI** - Componentes acessíveis
- **Lucide React** - Ícones
- **Sonner** - Notificações
### **Backend**
- **Next.js API Routes** - API REST
- **Better Auth** - Autenticação
- **Drizzle ORM** - ORM para banco de dados
- **PostgreSQL** - Banco de dados principal
### **Banco de Dados**
- **Neon Database** - PostgreSQL serverless
- **Drizzle Kit** - Migrações e schema
### **Ferramentas**
- **ESLint** - Linting
- **Prettier** - Formatação de código
- **Git** - Controle de versão
## 📋 Pré-requisitos
- **Node.js** 18+
- **npm** ou **yarn**
- **PostgreSQL** (ou Neon Database)
- **Conta GitHub** (para OAuth)
## 🚀 Instalação
1. **Clone o repositório**
```bash
git clone <url-do-repositorio>
cd ferramenta-projeto
```
2. **Instale as dependências**
```bash
npm install
```
3. **Configure as variáveis de ambiente**
```bash
cp .env.example .env.local
```
4. **Configure o banco de dados**
```bash
npm run db:generate
npm run db:push
```
5. **Inicie o servidor de desenvolvimento**
```bash
npm run dev
```
## ⚙️ Configuração
### Variáveis de Ambiente
Crie um arquivo `.env.local` com as seguintes variáveis:
```env
# Database
DATABASE_URL="postgresql://user:password@host:port/database"
# GitHub OAuth
GITHUB_CLIENT_ID="seu_github_client_id"
GITHUB_CLIENT_SECRET="seu_github_client_secret"
# Auth
BETTER_AUTH_URL="http://localhost:3000"
NEXT_PUBLIC_API_URL="http://localhost:3000"
# CORS (opcional)
NEXT_PUBLIC_CORS_ORIGIN="http://localhost:3000"
```
### Configuração do GitHub OAuth
1. Acesse [GitHub Developer Settings](https://github.com/settings/developers)
2. Crie uma nova OAuth App
3. Configure:
- **Homepage URL**: `http://localhost:3000`
- **Authorization callback URL**: `http://localhost:3000/api/auth/callback/github`
4. Copie o Client ID e Client Secret para o `.env.local`
## 📖 Como Usar
### 1. **Primeiro Acesso**
1. Acesse `http://localhost:3000`
2. Clique em "Entrar com GitHub"
3. Autorize o acesso à sua conta GitHub
4. Você será redirecionado para o dashboard
### 2. **Criar Organização**
1. No dashboard, clique em "Organizações"
2. Clique em "Nova Organização"
3. Preencha nome e descrição
4. Clique em "Criar"
### 3. **Criar Projeto**
1. Selecione uma organização
2. Clique em "Novo Projeto"
3. Preencha os dados do projeto
4. Clique em "Criar"
### 4. **Gerenciar Cards**
1. Acesse um projeto
2. Clique em "Novo Card" para criar
3. Preencha nome, descrição, status e horas estimadas
4. Use drag & drop para mover cards entre colunas
### 5. **Usar o Temporizador**
1. Clique no botão ▶️ em qualquer card
2. O temporizador aparecerá no header
3. Use ⏸️ para pausar e ▶️ para retomar
4. Use ⏹️ para finalizar e salvar o tempo
### 6. **Editar Cards**
1. Clique em qualquer card para editar
2. Modifique os campos necessários
3. Adicione tempo manualmente se necessário
4. Visualize o histórico de tempo na aba "Tempo"
## 📁 Estrutura do Projeto
```
src/
├── app/ # App Router (Next.js 13+)
│ ├── (controle)/ # Rotas protegidas
│ │ ├── dashboard/ # Dashboard principal
│ │ ├── organizations/ # Gestão de organizações
│ │ └── project/[id]/ # Página do projeto
│ ├── api/ # API Routes
│ │ ├── auth/ # Autenticação
│ │ ├── createCard/ # Criar cards
│ │ ├── getProject/ # Buscar projetos
│ │ ├── organizations/ # Gestão de organizações
│ │ ├── saveTimeSpent/ # Salvar tempo
│ │ ├── updateCard/ # Atualizar cards
│ │ └── users/ # Gestão de usuários
│ ├── login/ # Página de login
│ └── page.tsx # Página inicial
├── components/ # Componentes reutilizáveis
│ ├── ui/ # Componentes base (Radix UI)
│ └── *.tsx # Componentes customizados
├── context/ # Contextos React
│ ├── authContext.tsx # Contexto de autenticação
│ ├── organizationContext.tsx # Contexto de organizações
│ └── timerContext.tsx # Contexto do temporizador
├── db/ # Configuração do banco
│ ├── index.ts # Conexão com banco
│ └── schema.ts # Schema do banco
├── lib/ # Utilitários e configurações
├── types/ # Tipos TypeScript
└── utils/ # Funções utilitárias
```
## 🔌 API Endpoints
### **Autenticação**
- `POST /api/auth/signin` - Login
- `POST /api/auth/signout` - Logout
- `GET /api/auth/get-session` - Verificar sessão
### **Organizações**
- `GET /api/organizations` - Listar organizações
- `POST /api/organizations` - Criar organização
- `PUT /api/organizations/[id]` - Editar organização
- `DELETE /api/organizations/[id]` - Remover organização
- `GET /api/organizations/[id]/members` - Listar membros
- `POST /api/organizations/[id]/members` - Adicionar membro
- `DELETE /api/organizations/[id]/members/[userId]` - Remover membro
### **Projetos**
- `GET /api/getProject` - Listar projetos
- `POST /api/getProject` - Criar projeto
- `GET /api/getProject/[id]` - Buscar projeto específico
### **Cards**
- `POST /api/createCard` - Criar card
- `PUT /api/updateCard` - Atualizar card
- `PUT /api/updateCardStatus` - Atualizar status
- `PUT /api/updateCardOrder` - Atualizar ordem
### **Tempo**
- `POST /api/saveTimeSpent` - Salvar tempo gasto
- `GET /api/getTimeSpentHistory/[cardId]` - Histórico de tempo
### **Usuários**
- `GET /api/users` - Listar usuários
## 🚀 Deploy
### **Vercel (Recomendado)**
1. **Conecte o repositório ao Vercel**
2. **Configure as variáveis de ambiente**:
- `DATABASE_URL`
- `GITHUB_CLIENT_ID`
- `GITHUB_CLIENT_SECRET`
- `BETTER_AUTH_URL`
- `NEXT_PUBLIC_API_URL`
3. **Deploy automático**
```bash
git push origin main
```
### **Outras Plataformas**
O projeto pode ser deployado em qualquer plataforma que suporte Next.js:
- **Netlify**
- **Railway**
- **Heroku**
- **DigitalOcean App Platform**
## 🛠️ Comandos Úteis
```bash
# Desenvolvimento
npm run dev # Iniciar servidor de desenvolvimento
npm run build # Build para produção
npm run start # Iniciar servidor de produção
npm run lint # Executar ESLint
# Banco de dados
npm run db:generate # Gerar migrações
npm run db:push # Aplicar migrações
npm run db:studio # Abrir Drizzle Studio
```
## 🤝 Contribuição
1. Fork o projeto
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
4. Push para a branch (`git push origin feature/AmazingFeature`)
5. Abra um Pull Request
## 📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.
## 🆘 Suporte
Para suporte, abra uma issue no repositório ou entre em contato através dos canais disponíveis.
---
**Desenvolvido com ❤️ para facilitar a gestão de projetos e controle de tempo.**