Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
3a4d5f9
feat: :zap: implementado tanstack queries
dinamous Apr 21, 2026
205c6b4
feat: :card_file_box: Adicionado tipagem do banco de dados
dinamous Apr 21, 2026
20a6ba0
refactor: :recycle: reorganizado props das views dos layouts
dinamous Apr 21, 2026
eb64666
feat: :sparkles: implementado validações de tipagemnas responses das …
dinamous Apr 21, 2026
a4c6e17
feat: :zap: aprimorado rendeização e otimização de listagem
dinamous Apr 21, 2026
c352d5a
perf: :zap: aprimorado e utilizado memo pra evitar re-renderização
dinamous Apr 21, 2026
df96fa9
feat: :sparkles: criada edge-function pra proteger role admin
dinamous Apr 22, 2026
55af473
feat: :sparkles: Ajustado e adiconado Throttle nas requests
dinamous Apr 22, 2026
8a09e5a
build: :building_construction: Security Policy atualizada tanto local…
dinamous Apr 22, 2026
0e2bc7c
feat: :test_tube: adicionado mais testes unitários
dinamous Apr 22, 2026
0432ab7
feat: :sparkles: nova view de Membros
dinamous Apr 22, 2026
42dd0fa
feat: :sparkles: Componetizado view de membros
dinamous Apr 22, 2026
14da2f4
feat: :sparkles: adicionada feature de notificaçao, quando cliente é …
dinamous Apr 22, 2026
0828f1e
feat: :card_file_box: atualizado database de acesso de Cliente x Memb…
dinamous Apr 22, 2026
27e513a
feat: :sparkles: nova notificaçao de aviso de novo integrante e novo …
dinamous Apr 22, 2026
bb1e7cc
docs: adicionado arquivo de histórico de evolução do projeto - ADR
dinamous Apr 22, 2026
5a64d55
docs: :memo: Atualizado o ReadMe.md
dinamous Apr 22, 2026
9ef3ad9
fix: :rotating_light: ajuste de linting
dinamous Apr 22, 2026
113c9c8
fix: :bug: testes ajustado com escopo de cascade
dinamous Apr 23, 2026
9daab6d
fix: :bug: ajustes nos teste unitãrios
dinamous Apr 23, 2026
214229a
test: :bug: corrigido ambiente supabase pra tests
dinamous Apr 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"shell": "powershell",
"command": "$raw = $Input | Out-String; $obj = $raw | ConvertFrom-Json; $path = $obj.tool_input.file_path.Replace('\\', '/'); if ($path -match 'supabase/migrations/.+[.]sql') { Write-Output '{\"systemMessage\": \"⚠️ Migration detectada! Regenere os tipos do Supabase:\\nnpx supabase gen types typescript --project-id SEU_PROJECT_ID > src/types/supabase.ts\"}' }",
"statusMessage": "Verificando se é migration..."
}
]
}
]
},
"permissions": {
"deny": [
"Read(.env*)",
"Edit(.env*)",
"Bash(cat *.env*)",
"Bash(head *.env*)",
"Bash(tail *.env*)",
"Bash(less *.env*)",
"Bash(more *.env*)"
]
}
}
10 changes: 9 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,15 @@
"Bash(npx --yes tsc --noEmit --project \"c:/Users/dinam/Documents/Projetos/run-way/tsconfig.json\")",
"Bash(npm show:*)",
"Bash(ls c:/Users/dinam/Documents/Projetos/run-way/node_modules/boneyard-js/react*)",
"Bash(npm list *)"
"Bash(npm list *)",
"Bash(xargs wc:*)",
"Bash(wc -l /c/Users/dinam/Documents/Projetos/run-way/src/lib/*.ts /c/Users/dinam/Documents/Projetos/run-way/src/store/*.ts /c/Users/dinam/Documents/Projetos/run-way/src/hooks/*.ts)",
"Bash(node -e \"const p = require\\('./node_modules/@tanstack/react-query/package.json'\\); console.log\\(p.version\\)\")",
"Bash(grep -E '^supabase/migrations/.*\\\\.sql$')",
"Bash(where jq *)",
"Bash(powershell -NonInteractive -Command ' *)",
"Bash(powershell -NonInteractive -Command \"Get-Content '.claude/settings.json' | ConvertFrom-Json | ConvertTo-Json -Depth 10\")",
"Bash(node -e \"const rw = require\\('react-window'\\); console.log\\(Object.keys\\(rw\\)\\)\")"
]
},
"hooks": {
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ lerna-debug.log*

node_modules
dist
.temp
supabase/.temp
dist-ssr
*.local

Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ npm run lint # ESLint
- `.env` nunca commitado
- **Testes:** toda nova feature ou bugfix deve ter testes unitários com Vitest. Rodar com `npm run test:run`. Arquivos de teste ficam em `src/**/__tests__/` co-localizados com o módulo testado
- **Migrations:** toda alteração de schema no Supabase requer um arquivo SQL em `supabase/migrations/`. Nomenclatura: `YYYYMMDD<seq>_<descricao>.sql` — seq começa em `000000`; se houver mais de uma migration no mesmo dia, incrementar a seq (`000001`, `000002`, …). Nunca alterar migrations já aplicadas.
- **ADRs:** toda decisão arquitetural aceita (nova feature, mudança de stack, padrão novo) deve ser registrada em `docs/decisions.md` com status, decisão, racional e consequências. Usar o próximo número sequencial disponível.

## CI/CD (.github/workflows/)

Expand Down
166 changes: 134 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,92 @@
# Capacity Dashboard
<div align="center">

Aplicação web de capacity planning para equipes de design e desenvolvimento. Permite criar demandas com fases de entrega (Design → Approval → Dev → QA), visualizar em calendário e timeline, e acompanhar a carga de cada membro.
# ⚡ Run/Way

## Stack
**Capacity planning visual para times de design e desenvolvimento.**
Gerencie demandas, acompanhe fases de entrega e visualize a carga da equipe — tudo em tempo real.

- **React 19** + **TypeScript 5.9** + **Vite 8**
- **Tailwind CSS 4** (plugin Vite, sem `tailwind.config.js`)
- **Supabase** (banco de dados + autenticação Google OAuth)
- **Radix UI** + **Lucide React** + **Sonner**
<br/>
![Dashboard](docs/assets/dashboard.png)
<br/>

## Pré-requisitos
![React](https://img.shields.io/badge/React_19-61DAFB?style=for-the-badge&logo=react&logoColor=black)
![TypeScript](https://img.shields.io/badge/TypeScript_5.9-3178C6?style=for-the-badge&logo=typescript&logoColor=white)
![Vite](https://img.shields.io/badge/Vite_8-646CFF?style=for-the-badge&logo=vite&logoColor=white)
![Tailwind](https://img.shields.io/badge/Tailwind_v4-06B6D4?style=for-the-badge&logo=tailwindcss&logoColor=white)
![Supabase](https://img.shields.io/badge/Supabase-3ECF8E?style=for-the-badge&logo=supabase&logoColor=white)

</div>

---

## ✨ O que é o Run/Way?

O Run/Way é uma aplicação web de **capacity planning** para equipes de criação. Com ele você:

- 📋 **Cria e gerencia demandas** com fases de entrega encadeadas automaticamente (Design → Approval → Dev → QA)
- 📅 **Visualiza no calendário** mensal com drag-and-drop de tarefas
- 📊 **Acompanha no Gantt** — timeline por fase com arrastar e soltar
- 👥 **Monitora a capacidade** de cada membro da equipe em tempo real
- 🔔 **Recebe notificações** de tarefas atrasadas, membros sobrecarregados e novos integrantes
- 🌙 **Dark mode** nativo com preferência persistida por usuário
- 🔐 **Login seguro** via Google OAuth com controle de domínio

---

## 🗂️ Documentação

| Área | Arquivo |
|---|---|
| 🏛️ Arquitetura e fluxo de dados | [docs/architecture.md](docs/architecture.md) |
| 📅 DashboardView, Calendário, Timeline | [docs/views/dashboard.md](docs/views/dashboard.md) |
| ✅ TasksView, filtros, ActionMenu | [docs/views/tasks.md](docs/views/tasks.md) |
| 👥 MembersView, capacidade | [docs/views/members.md](docs/views/members.md) |
| 🛡️ AdminView, painel de usuários | [docs/views/admin.md](docs/views/admin.md) |
| 🙍 ProfileView, preferências | [docs/views/profile.md](docs/views/profile.md) |
| 🪟 TaskModal, cascata de fases | [docs/components/task-modal.md](docs/components/task-modal.md) |
| 🎨 Design system (Button, Input, Badge…) | [docs/components/ui.md](docs/components/ui.md) |
| 🪝 useSupabase, CRUD, steps | [docs/hooks/supabase.md](docs/hooks/supabase.md) |
| 🔑 useAuth, login | [docs/hooks/auth.md](docs/hooks/auth.md) |
| 🔔 useNotifications, NotificationBell | [docs/hooks/notifications.md](docs/hooks/notifications.md) |
| 📆 dateUtils, dias úteis, cascadePhases | [docs/utils/date-utils.md](docs/utils/date-utils.md) |
| 🛠️ ToolsView, BriefingAnalyzerView | [docs/views/tools.md](docs/views/tools.md) |
| 📐 Convenções e padrões | [docs/guidelines.md](docs/guidelines.md) |
| 🗺️ Decisões arquiteturais (ADRs) | [docs/decisions.md](docs/decisions.md) |
| 📝 TODOs e melhorias pendentes | [docs/todo/melhorias.md](docs/todo/melhorias.md) |

---

## 🚀 Começando

### Pré-requisitos

- Node.js 18+
- Conta no [Supabase](https://supabase.com) com projeto criado
- Google OAuth configurado no Supabase

## Configuração
### Instalação

```bash
# 1. Clone o repositório
git clone <url-do-repositório>
cd run-way

# 2. Instale as dependências
npm install

# 3. Configure as variáveis de ambiente
cp .env.example .env
# Edite o .env com suas credenciais

# 4. Inicie o servidor de desenvolvimento
npm run dev
```

Acesse em **http://localhost:5173**

1. Clone o repositório
2. Instale as dependências:
```bash
npm install
```
3. Copie o arquivo de exemplo e preencha com suas credenciais:
```bash
cp .env.example .env
```
---

### Variáveis de ambiente
## ⚙️ Variáveis de Ambiente

| Variável | Descrição |
|---|---|
Expand All @@ -40,7 +99,9 @@ Aplicação web de capacity planning para equipes de design e desenvolvimento. P
| `VITE_REDIRECT_ALLOWED_PATHS` | Paths permitidos no redirect OAuth (ex: `/,/auth/callback`) |
| `VITE_SESSION_MAX_AGE_HOURS` | Duração máxima da sessão em horas (mínimo efetivo: 48) |

## Comandos
---

## 🛠️ Comandos

```bash
npm run dev # Servidor de desenvolvimento — localhost:5173
Expand All @@ -50,20 +111,61 @@ npm run test # Testes em modo watch (Vitest)
npm run test:run # Testes em modo CI (execução única)
```

## Modelo de dados
---

## 🗃️ Modelo de Dados

### Fases de entrega

Cada demanda passa por 4 fases com **cascata automática de datas** em dias úteis:

| Fase | ⏱️ Duração padrão | 🎨 Cor |
|---|---|---|
| 🎨 Design | 5 dias úteis | Violeta |
| ✅ Approval | 3 dias úteis | Laranja |
| 💻 Dev | 7 dias úteis | Azul |
| 🧪 QA | 3 dias úteis | Esmeralda |

### Entidades principais

**Task** — demanda com fases de entrega
- `status`: `backlog` · `em andamento` · `bloqueado` · `concluído`
- `phases`: cada fase com `start` e `end` no formato `YYYY-MM-DD`

**Task** — uma demanda com fases de entrega:
- `status`: `backlog` | `em andamento` | `bloqueado` | `concluído`
- `phases`: `design` · `approval` · `dev` · `qa` — cada fase com `start` e `end` (`YYYY-MM-DD`)
- Cascata automática de datas entre fases
**Member** — membro da equipe
- `role`: `Designer` | `Developer`
- `access_role`: `admin` | `user`

**Member** — membro da equipe com `role`: `Designer` | `Developer`
---

**Fases e durações padrão:**
## 🏗️ Stack

| Fase | Duração | Cor |
| Camada | Tecnologia |
|---|---|
| Frontend | React 19 + TypeScript 5.9 + Vite 8 |
| Estilização | Tailwind CSS v4 (plugin Vite) |
| Backend / DB | Supabase (PostgreSQL + Auth + Edge Functions) |
| Estado / Cache | TanStack Query v5 + Zustand |
| UI Primitivos | Radix UI + Lucide React + Sonner |
| Testes | Vitest |
| CI/CD | GitHub Actions |

---

## 🔒 Segurança e CI/CD

| Workflow | Trigger | O que faz |
|---|---|---|
| Design | 5 dias úteis | Violeta |
| Approval | 3 dias úteis | Laranja |
| Dev | 7 dias úteis | Azul |
| QA | 3 dias úteis | Esmeralda |
| `secrets.yml` | push + PR→main | Scan de secrets com Gitleaks |
| `test.yml` | push + PR→main | Vitest + ESLint em paralelo |
| `codeql.yml` | push/PR→main + semanal | Análise de vulnerabilidades CodeQL |
| `tag-version.yml` | push→main | Tag git automática ao bumpar versão |
| `no-friday-deploy.yml` | PR→main | Bloqueia merge às sextas-feiras |

---

<div align="center">

Feito com ☕ pelo time Run/Way

</div>
Loading
Loading