O Murbi Dev Dashboard é uma camada de visibilidade operacional em tempo real sobre o Kanban do Jira. Ele foi criado para times de suporte, negócio, operações e gestão acompanharem o fluxo contínuo sem expor toda a complexidade técnica do Jira.
O app não substitui o Jira. Ele mostra cards principais que não estão no backlog e traduz os status técnicos para colunas simples, orientadas ao negócio.
- Kanban contínuo sem backlog
- Atualização automática a cada 30 segundos
- Tela de login sem banco de dados, com sessão em cookie assinado
- Credenciais do Jira mantidas no servidor por trás de
/api/dashboard - Modo simulado quando credenciais do Jira estão ausentes ou o Jira está indisponível
- Cards HOTFIX pinados primeiro com destaque visual
- Alertas para cards parados há muito tempo no mesmo status
- Busca por chave, título ou responsável
- Filtros por HOTFIX, responsável e prioridade
- Modo TV em
/tv
- Next.js App Router
- TypeScript
- TailwindCSS
- Componentes locais no estilo shadcn/ui
- TanStack React Query
Instale as dependências:
npm installCrie o arquivo de ambiente:
cp .env.example .env.localRode o app:
npm run devAbra http://localhost:3000.
JIRA_BASE_URL=https://your-company.atlassian.net
JIRA_EMAIL=you@company.com
JIRA_API_TOKEN=your_api_token
JIRA_BOARD_ID=123
DASHBOARD_AUTH_USER=admin
DASHBOARD_AUTH_PASSWORD_SHA256=hash_sha256_da_senha
DASHBOARD_AUTH_SECRET=segredo_para_assinar_sessaoSe alguma variável do Jira estiver ausente, o app usa automaticamente dados simulados.
Em produção, DASHBOARD_AUTH_USER, DASHBOARD_AUTH_PASSWORD_SHA256 e DASHBOARD_AUTH_SECRET são obrigatórios. Se não forem configurados, a aplicação bloqueia o acesso em vez de ficar pública.
O painel usa uma tela própria de login em /login. Após autenticar, o servidor grava um cookie HttpOnly assinado, protegendo páginas e rotas internas antes de qualquer dado do Jira ser entregue ao navegador.
A senha não deve ser salva em texto puro. Gere o hash SHA-256 da senha:
npm run auth:hash -- sua-senha-forte-aquiGere também um segredo para assinar a sessão:
npm run auth:secretConfigure na Vercel:
DASHBOARD_AUTH_USER=admin
DASHBOARD_AUTH_PASSWORD_SHA256=resultado_do_comando_acima
DASHBOARD_AUTH_SECRET=resultado_do_auth_secretUse HTTPS, que é o padrão da Vercel. O cookie de sessão é HttpOnly, SameSite=Lax e Secure em produção.
A integração fica em src/services/jira.
Fluxo da API:
- Busca o board em
GET /rest/agile/1.0/board/{boardId} - Busca os cards principais do board em
GET /rest/agile/1.0/board/{boardId}/issue - Usa JQL
status != Backlog AND issuetype not in subTaskIssueTypes() AND (statusCategory != Done OR status CHANGED TO Done AFTER -14d)para refletir o Kanban sem backlog e limitar concluídos recentes - Normaliza as respostas do Jira para tipos seguros do dashboard
- Mapeia os status do Jira para status de negócio
O frontend chama apenas a rota interna do Next.js:
/api/dashboard
As credenciais do Jira nunca são expostas ao navegador.
O mapeamento centralizado fica em src/lib/status-mapper.ts.
| Status no painel | Status do Jira |
|---|---|
| Pendente | Tarefas pendentes |
| Em Desenvolvimento | Em andamento, Pull request, Pronto para QA |
| Em Teste | Teste QA |
| Aguardando Deploy | Pronto para PROD |
| Em Produção | Concluído, Concluido |
Qualquer card com a prioridade HOTFIX no Jira é tratado como crítico operacional:
- Fica pinado no topo da coluna
- Recebe destaque em vermelho
- Exibe o badge HOTFIX no lugar do badge de prioridade
Abra:
http://localhost:3000/tv
O modo TV usa tipografia maior, resumos operacionais mais visíveis, sem filtros, e cinco colunas fixas para telas de monitoramento.
npm run dev
npm run build
npm run lint
npm run typecheck
npm run auth:hash -- sua-senha
npm run auth:secretsrc/app
src/components
src/components/dashboard
src/components/cards
src/components/layout
src/components/ui
src/hooks
src/lib
src/services/jira
src/types