NM TaskHub é uma aplicação web full-stack de quadro Kanban, projetada para gerenciamento de tarefas e fluxos de trabalho de demandas da N-MultiFibra. A aplicação foi modernizada, utilizando uma API RESTful de alta performance em Go (Golang) e um frontend dinâmico e reativo construído com React, TypeScript e Vite, com atualizações em tempo real via WebSockets.
- Autenticação de Usuários: Sistema de login seguro utilizando Supabase Auth para gerenciamento de usuários e sessões via JWT.
- Gerenciamento Completo de Tarefas (CRUD): API completa para criação, leitura, atualização e exclusão de quadros, colunas e cards.
- Interface Drag & Drop Avançada: Movimentação intuitiva de cards entre colunas e reordenação de colunas, com persistência imediata no banco de dados, utilizando a biblioteca
@dnd-kit. - Atualizações em Tempo Real: Uso de WebSockets para refletir instantaneamente as alterações feitas por um usuário para todos os outros que estiverem visualizando o mesmo quadro.
- Notificações e Convites: Sistema de notificações para convites de quadros e atribuição de tarefas.
- Upload de Avatares: Funcionalidade para upload de fotos de perfil de usuário, com armazenamento de arquivos no Supabase Storage.
A aplicação utiliza uma arquitetura moderna e eficiente, separando claramente as responsabilidades entre o backend e o frontend.
- Linguagem: Go (Golang)
- Framework Web: Fiber v2, um framework web de alta performance inspirado no Express.js.
- Banco de Dados: PostgreSQL, gerenciado pela plataforma Supabase.
- Autenticação e Armazenamento: Supabase (Auth para usuários, Storage para arquivos e Database).
- Comunicação em Tempo Real: WebSockets (
gofiber/websocket/v2). - Comunicação com o BD: Driver
pgx/v5para PostgreSQL.
- Framework/Linguagem: React com TypeScript, garantindo um código robusto, tipado e escalável.
- Build Tool: Vite, para um ambiente de desenvolvimento ultrarrápido e um processo de build otimizado.
- Estrutura: Single-Page Application (SPA) com arquitetura baseada em componentes.
- Bibliotecas Principais:
react-router-dompara roteamento.@dnd-kitpara drag-and-drop de alta performance.rechartspara a criação de gráficos no dashboard.react-hot-toastpara notificações.date-fnspara manipulação de datas.lodashpara utilitários gerais.supabase-jspara interagir com a autenticação do Supabase.
- Estilização: CSS3 moderno com uso extensivo de Variáveis CSS para um tema escuro customizável e layout baseado em Flexbox/Grid.
- Ícones:
react-icons.
Para rodar este projeto em sua máquina local, siga os passos abaixo.
- Go 1.21 ou superior.
- Node.js v18 ou superior.
- Uma conta e um projeto criado na Supabase.
-
Clone o repositório:
git clone https://github.com/toomazs/NM-TaskHub.git cd NM-TaskHub -
Configure o Backend:
- Crie um arquivo chamado
.envna raiz do projeto. - Adicione as seguintes variáveis, substituindo pelos valores do seu projeto Supabase:
DATABASE_URL="postgres://..." SUPABASE_JWT_SECRET="seu_jwt_secret" SUPABASE_PROJECT_URL="https://seu-id.supabase.co" SUPABASE_SERVICE_KEY="sua_service_role_key"
- Instale as dependências do Go:
go mod tidy
- Crie um arquivo chamado
-
Configure o Frontend:
- Navegue até a pasta do frontend:
cd react-frontend - Instale as dependências do Node.js:
npm install
- Navegue até a pasta do frontend:
-
Execute a Aplicação (2 Terminais):
-
Terminal 1 (Backend): Na raiz do projeto, inicie o servidor Go.
go run main.go
O servidor backend estará rodando em
http://localhost:8080. -
Terminal 2 (Frontend): Na pasta
react-frontend, inicie o servidor de desenvolvimento do Vite.npm run dev
A aplicação estará acessível em
http://localhost:5173.
-
Todos os endpoints listados abaixo estão no grupo /api e são protegidos, ou seja, exigem um token de autenticação JWT válido no cabeçalho Authorization.
Clique para ver em Swagger.
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/users |
Retorna a lista de todos os usuários do sistema. |
POST |
/api/user/avatar |
Realiza o upload do avatar para o usuário autenticado. |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/boards/public |
Busca todos os quadros públicos. |
GET |
/api/boards/private |
Busca os quadros privados do usuário autenticado. |
POST |
/api/boards |
Cria um novo quadro privado. |
DELETE |
/api/boards/:id |
Deleta um quadro privado (apenas o dono). |
POST |
/api/boards/:id/leave |
Permite que um usuário saia de um quadro do qual é membro. |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/boards/:id/columns |
Busca todas as colunas de um quadro específico. |
POST |
/api/columns |
Cria uma nova coluna em um quadro. |
POST |
/api/columns/reorder |
Reordena a posição das colunas em um quadro. |
PUT |
/api/columns/:id |
Atualiza os dados de uma coluna. |
DELETE |
/api/columns/:id |
Deleta uma coluna (somente se estiver vazia). |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/columns/:id/cards |
Busca todos os cards de uma coluna. |
POST |
/api/columns/:id/cards |
Cria um novo card em uma coluna. |
PUT |
/api/cards/:id |
Atualiza os dados de um card. |
DELETE |
/api/cards/:id |
Deleta um card. |
POST |
/api/cards/move |
Move um card para uma nova coluna ou posição. |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/boards/:id/members |
Retorna a lista de membros de um quadro. |
DELETE |
/api/boards/:boardId/members/:memberId |
Remove um membro de um quadro (apenas o dono). |
GET |
/api/boards/:id/invitable-users |
Retorna usuários que podem ser convidados para um quadro. |
POST |
/api/boards/:id/invite |
Envia um convite para um usuário se juntar a um quadro. |
POST |
/api/invitations/:id/respond |
Permite que um usuário aceite ou recuse um convite. |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/notifications |
Busca todas as notificações do usuário logado. |
POST |
/api/notifications/:id/read |
Marca uma notificação específica como lida. |
POST |
/api/notifications/mark-all-as-read |
Marca todas as notificações (exceto convites) como lidas. |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/ligacoes |
Retorna a lista de todas as ligações ativas. |
POST |
/api/ligacoes |
Registra uma nova ligação. |
PUT |
/api/ligacoes/:id |
Atualiza uma ligação existente. |
DELETE |
/api/ligacoes/:id |
Deleta uma ligação. |
POST |
/api/ligacoes/:id/image |
Faz upload de uma imagem para a ligação. |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/agenda/events |
Retorna os eventos da agenda para um mês/ano específico. |
POST |
/api/agenda/events |
Cria um novo evento na agenda. |
PUT |
/api/agenda/events/:id |
Atualiza um evento existente. |
DELETE |
/api/agenda/events/:id |
Deleta um evento da agenda. |
| Método HTTP | Rota | Descrição |
|---|---|---|
GET |
/api/avaliacoes |
Retorna a lista de todas as avaliações. |
POST |
/api/avaliacoes |
Registra uma nova avaliação. |
PUT |
/api/avaliacoes/:id |
Atualiza uma avaliação existente. |
DELETE |
/api/avaliacoes/:id |
Deleta uma avaliação. |








