Dhedalos Hub Frontend
Visão geral do repositório
Este repositório contém uma aplicação Next.js focada em frontend web, com autenticação via NextAuth e uma camada BFF local em src/app/api para integrar turmas, agenda, submissões, quiz, chat e telemetria. Os módulos protegidos identificados no App Router incluem home, agenda, agendar, atendimento, consultoria, gestao-de-atividades, participacao, quiz, sala-de-reuniao e trocar-turma.
Evidências:
package.json:1-22src/app/page.tsx:8-27src/app/(protected-routes)/layout.tsx:21-74src/app/(protected-routes)/home/page.tsx:18-67src/app/(protected-routes)/quiz/page.tsx:21-231
Como rodar
Desenvolvimento
npm install
npm run dev
Testes
npm test
npm run lint
npm run prettier
npm run cypress:run
Build
npm run build
npm run start
Storybook
npm run storybook
npm run build-storybook
Evidências:
package.json:5-22src/stories/DocumentacaoProjeto.mdx:11-59
Variáveis de ambiente
Variáveis base presentes em .env.example
| Variável | Uso observado | Evidência |
|---|---|---|
PROJECT_NAME | Configura identidade do projeto exposta via /api/project-name/config e usada em variações de UI. | .env.example:1, src/app/api/project-name/config/route.ts:3-12, src/components/MeetRoom/MeetRoom.component.tsx:82-89 |
NEXTAUTH_URL | URL base da autenticação. | .env.example:3, helm/templates/secret.yaml:13-18 |
NEXTAUTH_SECRET | Segredo do NextAuth. | .env.example:4, helm/templates/secret.yaml:18 |
API_URL | Base do backend WordPress/Dhedalos consumido pelo BFF local. | .env.example:5, src/utils/consts.ts:1, helm/templates/secret.yaml:20-21 |
DHEDALOS_PRIVACY_POLICY | Política de privacidade no layout. | .env.example:6, src/app/layout.tsx:48-49 |
SCHEDULE_URL | Base do Schedule Manager. | .env.example:8, src/utils/consts.ts:2-5, helm/templates/secret.yaml:19 |
SCHEDULE_APP_KEY | Credencial para integrações de agenda. | .env.example:9, src/utils/consts.ts:5 |
JITSI_SERVER_URL | Host retornado em /api/jitsi/config. | .env.example:11-14, src/app/api/jitsi/config/route.ts:3-18 |
DATADOG_ENV | Ambiente Datadog no exemplo local. | .env.example:16, src/app/start/DatadogStart.tsx:19-41 |
DATADOG_SERVICE | Nome do serviço Datadog no exemplo local. | .env.example:17, src/app/start/DatadogStart.tsx:19-41 |
DATADOG_CLIENT_ID | applicationId do Datadog RUM no exemplo local. | .env.example:18, src/app/start/DatadogStart.tsx:19-32 |
DATADOG_CLIENT_TOKEN | Token de logs/RUM no exemplo local. | .env.example:19, src/app/start/DatadogStart.tsx:19-41 |
METADATA_SITE_NAME | Título da aplicação. | .env.example:21, src/app/layout.tsx:41-58 |
METADATA_DESCRIPTION | Descrição da aplicação. | .env.example:22, src/app/layout.tsx:42-58 |
METADATA_KEYWORDS | Keywords da aplicação. | .env.example:23, src/app/layout.tsx:44-58 |
METADATA_FAVICON_URL | Base do favicon. | .env.example:24, src/app/layout.tsx:68 |
ANALYTICS_GOOGLE_ID | Google Analytics. | .env.example:26, src/app/layout.tsx:51, src/app/layout.tsx:90 |
Variáveis adicionais observadas no código/runtime
| Variável | Uso observado | Evidência |
|---|---|---|
SUBMISSIONS_URL | Base do serviço de submissões. | src/utils/consts.ts:10-11, src/app/api/submissions/route.ts:1-19 |
SUBMISSIONS_APP_KEY | Credencial do serviço de submissões. | src/utils/consts.ts:10-11, src/app/api/submissions/route.ts:9-18 |
SUBMISSIONS_STORAGE_URL | Proxy/links de arquivos de submissão. | src/app/api/submissions/files/[...path]/route.ts:17, src/app/api/download/route.ts:19 |
QUIZ_API_URL | Base da API de quiz entregue por /api/envs. | next.config.js:32-35, src/app/api/envs/route.ts:23-25, src/services/quizApi.ts:20-33 |
BLIP_APP_KEY | Chave do chat Blip entregue por /api/blip/config. | src/app/api/blip/config/route.ts:3-9, src/components/AttendanceButton/AttendanceButton.component.tsx:56-69 |
NEXT_APP_VERSION | Exposta em /api/health e /api/envs. | src/app/api/health/route.ts:6-19, src/app/api/envs/route.ts:7-8 |
NEXT_DHEDALOS_PRIVACY_POLICY | Exposta em /api/envs. | src/app/api/envs/route.ts:8-10, helm/templates/secret.yaml:24 |
NEXT_DATADOG_* | Expostas em /api/envs para Datadog no cliente. | src/app/api/envs/route.ts:10-21, helm/templates/secret.yaml:25-28 |
NEXT_PUBLIC_E2E_TEST_MODE | Ativa mocks de E2E no frontend. | package.json:8-11, src/mocks/e2e-fixtures.ts:139, src/components/E2EFixturesProvider/E2EFixturesProvider.tsx:16 |
Contexto C4 L1
Atores
- Usuário não autenticado: acessa a raiz
/e recebe a tela de login. - Participante (
subscriber): navega pelos fluxos protegidos e pode usar agenda, quiz, atividades e sala. - Facilitador ou supervisor: usa fluxos protegidos e integrações de agenda/sala com capacidades adicionais.
Evidências:
src/app/page.tsx:8-27src/utils/authOptions.ts:71-87src/app/(protected-routes)/home/page.tsx:38-64
Integrações externas
- Backend WordPress/Dhedalos:
API_URLalimentawpRequeste serviços de turma, presença, salas e logs. - Schedule Manager:
SCHEDULE_URLeSCHEDULE_APP_KEYalimentam agenda e agendamentos. - Serviço de submissões:
/api/submissionsrepassa paraSUBMISSIONS_URL. - Jitsi:
/api/jitsi/configexpõe o host da videoconferência. - Quiz API:
QUIZ_API_URLsai de/api/envse é consumida porsrc/services/quizApi.ts. - Blip Chat:
BLIP_APP_KEYsai de/api/blip/confige é usado pelo widget de atendimento. - Datadog e Google Analytics: inicializados no layout/startup.
Evidências:
src/app/services/api.ts:115-185src/app/services/external/ScheduleService.ts:15-116src/app/api/submissions/route.ts:4-90src/app/api/jitsi/config/route.ts:3-18src/services/quizApi.ts:19-124src/components/AttendanceButton/AttendanceButton.component.tsx:56-82src/app/start/DatadogStart.tsx:10-48src/app/layout.tsx:51-90
Dependências principais
next,react,next-auth,@mui/materialstorybook,jestecypresscomo ferramentas de desenvolvimento;vitestaparece configurado para o addon de testes do Storybook, sem script npm dedicado@datadog/browser-rum,@datadog/browser-logs,@jitsi/react-sdk,blip-chat-widget- Helm, Kubernetes e Docker na entrega
Evidências:
package.json:23-108.github/workflows/ci-cd-pipeline.yml:13-124.github/workflows/cypress.yml:11-104helm/templates/secret.yaml:11-30
Ferramentas de frontend
Storybook
- Usado para documentação visual e stories em
src/**/*.mdxesrc/**/*.stories.*. - Scripts disponíveis:
npm run storybookenpm run build-storybook. - Addons ativos hoje:
@storybook/addon-onboarding,@storybook/addon-docs,@storybook/addon-viteste@chromatic-com/storybook.
Evidências:
package.json:17-18.storybook/main.ts:3-27
Jest
- Runner principal de testes unitários.
- Configurado com
ts-jest, ambientejsdom,collectCoverage: truee mocks paracanvas. - Scripts disponíveis:
npm testenpm run test:watch.
Evidências:
package.json:15-16jest.config.ts:1-51
Cypress
- Ferramenta de testes E2E do repositório.
- Scripts disponíveis:
npm run cypress:open,npm run cypress:run,npm run cypress:open:e2eenpm run cypress:run:e2e. - A configuração usa
baseUrl,projectId, retries e gravação de vídeo.
Evidências:
package.json:19-22cypress.config.js:1-28
Vitest
- Há configuração de
vitestno projeto, mas ela está ligada ao addon de testes do Storybook. - O arquivo
vitest.config.tsusa@storybook/addon-vitestcom browser tests via Playwright. - Não há script npm dedicado para execução direta de
vitestnopackage.json.
Evidências:
package.json:5-22vitest.config.ts:1-37
Documentação
- Visão geral de documentação
- Arquitetura C4/componentes
- Mindmap
- API e exemplos, exemplos
- Modelo de dados
- Runbook
- Observabilidade
- ADR 0001
- Mapa de features
Links para outros repositórios
- Repositório atual identificado no histórico público: dhedalos/dhedalos-app-frontend-nextjs
- Serviços relacionados identificados por nome em deployment, sem URL Git confirmada neste repositório:
dhedalos-app-backend-wp,dhedalos-app-laravel-schedule-manager,dhedalos-quiz-api
Evidências:
CHANGELOG.md:10-18helm/templates/secret.yaml:19-23
Práticas complementares
- Storybook: presente em scripts, configuração
.storybooke documentação MDX; os addons ativos hoje são@storybook/addon-onboarding,@storybook/addon-docs,@storybook/addon-viteste@chromatic-com/storybook. - JSDoc e docstrings em TypeScript: presentes em serviços e componentes como
ClassService,ScheduleService,MeetRoomeAtendimentoButton. - Mindmap: baseline criado em docs/architecture/mindmap.md.
Evidências:
package.json:17-18.storybook/main.ts:3-27src/stories/DocumentacaoProjeto.mdx:91-145src/app/services/external/ClassService.ts:16-33src/app/services/external/ScheduleService.ts:9-52src/components/MeetRoom/MeetRoom.component.tsx:51-70src/components/AttendanceButton/AttendanceButton.component.tsx:18-52
Pendências
- Confirmar URLs Git dos repositórios relacionados ao backend WordPress, Schedule Manager e Quiz API.
- Alinhar a nomenclatura entre variáveis de Datadog/privacidade do
.env.examplee as variantesNEXT_*consumidas por/api/envs. - Expandir o contrato OpenAPI para todas as rotas de negócio em
src/app/api.