Inventário técnico do repositório
Introdução ao documento
Este documento consolida um inventário técnico do repositório a partir de evidências locais do código, configuração e automação. Onde a interpretação depende da leitura de múltiplos arquivos, o texto diferencia explicitamente Fato observado de Inferência.
Evidências:
package.json:1-22src/app/layout.tsx:60-93src/app/(protected-routes)/layout.tsx:21-74Dockerfile:34-78
Versionamento
- Baseline deste inventário:
2026-03-20. - Atualizar este documento quando houver mudanças em
package.json,src/app,src/app/api,src/app/services,.github/workflows,helm/,kubernetes/ou arquivos.env*. - O documento foi refeito para priorizar rastreabilidade por
arquivo:linha.
Evidências:
package.json:1-22.github/workflows/docs-governance.yml:1-46src/app/layout.tsx:60-93src/app/api/health/route.ts:3-31
Referencial teórico
- C4 Model para leitura de contexto e componentes.
- ADR para registro de decisões arquiteturais.
- OpenAPI para contratos HTTP.
- Inventário técnico orientado por evidência, distinguindo implementação observada de inferência controlada.
Evidências:
docs/architecture/c4-component.md:1-84docs/adr/0001-architecture-overview.md:1-40docs/api/openapi.yaml:1-40
Propósito do repo
Fatos observados
- O repositório mantém uma aplicação Next.js chamada no ecossistema de "Dhedalos Hub Frontend".
- O material de Storybook descreve o produto como uma plataforma educacional para conectar facilitadores, participantes e supervisores, com turmas, atividades, agendamentos e interações em tempo real.
- As rotas protegidas observadas cobrem
home,agenda,agendar,atendimento,consultoria,gestao-de-atividades,participacao,quiz,sala-de-reuniaoetrocar-turma.
Evidências:
package.json:1-22README.md:1-22src/stories/Introducao.mdx:5-18src/app/(protected-routes)/home/page.tsx:18-67src/app/(protected-routes)/agenda/page.tsx:131-155src/app/(protected-routes)/quiz/page.tsx:21-231
Inferência controlada
- Pela combinação de rotas UI em
src/appe handlers emsrc/app/api, o repositório atua como frontend web e BFF do produto.
Evidências:
src/app/page.tsx:8-27src/app/(protected-routes)/layout.tsx:21-74src/app/api/classes/route.ts:10-86src/app/api/submissions/route.ts:4-90
Entrypoints
| Tipo | Entrypoint | Papel observado | Evidência |
|---|---|---|---|
| Web | src/app/layout.tsx | Layout raiz, fonte local, providers, Datadog e Google Analytics. | src/app/layout.tsx:1-93 |
| Web | src/app/page.tsx | Tela pública de login e redirecionamento para /home se houver sessão. | src/app/page.tsx:1-28 |
| Web | src/app/(public-routes)/[slug]/page.tsx | Login dinâmico por slug, com dados do curso e manutenção por curso. | src/app/(public-routes)/[slug]/page.tsx:7-54 |
| Web | src/app/(protected-routes)/layout.tsx | Guarda de autenticação das rotas protegidas, carregamento de classes e maintenance mode. | src/app/(protected-routes)/layout.tsx:21-74 |
| API | src/app/api/*/route.ts | Handlers BFF para health, classes, submissions, schedule, reasons e outras integrações. | src/app/api/health/route.ts:3-31, src/app/api/classes/route.ts:10-86, src/app/api/submissions/route.ts:4-90 |
| Build | prebuild -> updateEnvVersion.js | Atualiza NEXT_PUBLIC_APP_VERSION a partir da versão do package.json. | package.json:5-6, updateEnvVersion.js:4-49 |
| Runtime container | CMD ["node", "server.js"] | Entrypoint da imagem standalone do Next.js. | Dockerfile:34-78 |
| Storybook | .storybook/main.ts | Entrypoint/configuração de stories MDX e *.stories.*. | .storybook/main.ts:1-27 |
| Teste unitário | jest.config.ts | Entrypoint/configuração de testes unitários com ts-jest. | package.json:13-14, jest.config.ts:1-51 |
| Teste E2E | cypress.config.js | Entrypoint/configuração de Cypress. | package.json:19-22, cypress.config.js:1-28 |
| Teste de stories | vitest.config.ts | Configuração auxiliar do addon de testes do Storybook com Playwright; não há script npm dedicado a vitest no package.json. | package.json:5-22, vitest.config.ts:1-37 |
Ferramentas de frontend
Storybook
- Fato observado: o projeto possui Storybook configurado para ler arquivos
../src/**/*.mdxe../src/**/*.stories.@(js|jsx|mjs|ts|tsx). - Fato observado: os scripts expostos para esse fluxo são
storybookebuild-storybook. - Fato observado: os addons ativos hoje são
@storybook/addon-onboarding,@chromatic-com/storybook,@storybook/addon-docse@storybook/addon-vitest.
Evidências:
.storybook/main.ts:3-27package.json:17-18
Jest
- Fato observado:
jesté o runner principal de testes unitários do repositório. - Fato observado: a configuração usa
ts-jest,jsdom, coleta de cobertura e mocks decanvas. - Fato observado: os scripts disponíveis são
testetest:watch.
Evidências:
package.json:15-16jest.config.ts:1-51
Cypress
- Fato observado:
cypressé a ferramenta de testes E2E do projeto. - Fato observado: há scripts para execução normal e para execução com
NEXT_PUBLIC_E2E_TEST_MODE=true. - Fato observado: a configuração define
baseUrl,projectId, retries, viewport e gravação de vídeo.
Evidências:
package.json:19-22cypress.config.js:1-28
Vitest
- Fato observado: existe
vitest.config.tsno repositório. - Fato observado: essa configuração está acoplada ao addon de testes do Storybook via
storybookTest(...). - Fato observado: o fluxo habilita browser tests em
chromiumcomplaywright. - Fato observado: não há script npm dedicado para
vitestnopackage.json.
Evidências:
vitest.config.ts:1-37package.json:5-22
Principais pastas e responsabilidades
| Pasta | Leitura | Evidência |
|---|---|---|
src/app | Fato observado: concentra rotas App Router, layouts, providers, startup e API handlers. | src/app/layout.tsx:1-93, src/app/page.tsx:1-28, src/app/api/health/route.ts:1-31 |
src/app/services | Fato observado: contém serviços BFF e integrações externas separados em bff/ e external/. | src/app/services/bff/ScheduleService.ts:1-80, src/app/services/external/ClassService.ts:1-258 |
src/components | Fato observado: reúne componentes de UI e fluxos de domínio, como reunião, atendimento e gestão de atividades. | src/components/MeetingRoom/MeetingRoom.component.tsx:54-89, src/components/AttendanceButton/AttendanceButton.component.tsx:18-30, src/components/ActivityManagement/ActivityManagement.component.tsx:67-100 |
src/hooks | Fato observado: concentra hooks de estado local, cache e persistência em browser. | src/hooks/useLocalStorage.ts:5-65, src/hooks/useGetDataWithCache.ts:1-26, src/hooks/useRunOnce.ts:8-54 |
src/services | Fato observado: contém serviços fora de src/app/services, incluindo quizApi e serviços auxiliares. | src/services/quizApi.ts:1-242, src/services/ReasonService.ts:1-17 |
src/theme | Fato observado: provê integração de tema MUI. | src/theme/Provider.component.tsx:1-27 |
src/types | Fato observado: centraliza contratos TypeScript de domínio e integrações. | src/types/IClass.ts:42-86, src/types/IAppointment.ts:4-66, src/types/ISubmission.ts:1-106 |
src/models | Fato observado: contém modelos simples usados no código, como ReasonOption. | src/models/ReasonOption.ts:1-5 |
src/resources | Fato observado: exporta recursos gráficos reutilizáveis, como ícones. | src/resources/icons/index.ts:1-5 |
src/stories | Fato observado: mantém documentação MDX e material de Storybook do produto. | src/stories/Introducao.mdx:1-18, src/stories/DocumentacaoProjeto.mdx:1-145 |
public | Fato observado: armazena assets públicos, incluindo fontes e ícones usados no layout. | src/app/layout.tsx:12-39, src/app/layout.tsx:68-90 |
cypress | Fato observado: guarda suporte e infraestrutura de testes E2E. | cypress/support/e2e.js:1-32, cypress/support/commands.js:27-36 |
test | Fato observado: armazena mocks usados nos testes unitários. | jest.config.ts:22-30, test/__mocks__/canvas.ts:1-11 |
.github/workflows | Fato observado: define automações de CI/CD, Cypress e governança de docs. | .github/workflows/ci-cd-pipeline.yml:1-124, .github/workflows/cypress.yml:1-104, .github/workflows/docs-governance.yml:1-46 |
helm | Fato observado: contém chart Helm e defaults de deploy. | helm/values.yaml:1-75, helm/templates/secret.yaml:1-30 |
kubernetes | Fato observado: contém valores por cluster/namespace para deploy. | kubernetes/oke-we-001/dhedalos-ecosystem/values.yaml:1-23 |
docs | Fato observado: documentação estruturada do repositório. | docs/architecture/c4-component.md:1-84, docs/api/openapi.yaml:1-40 |
Integrações externas
| Integração | URL observada | SDK/client observado | Credenciais ou envs observados | Evidência |
|---|---|---|---|---|
| Backend WordPress / Dhedalos API | API_URL, com fallback https://dhedalos-backend.sv.teste404.com.br; em Helm, default http://dhedalos-app-backend-wp | fetch via wpRequest | API_URL; token Bearer vindo da sessão | src/utils/consts.ts:1-11, src/app/services/api.ts:115-185, helm/templates/secret.yaml:19-23 |
| Schedule Manager | SCHEDULE_URL, com fallback https://dhedalos-agenda.sv.teste404.com.br/api; em Helm, default http://dhedalos-app-laravel-schedule-manager | fetch via scheduleRequest | SCHEDULE_URL, SCHEDULE_APP_KEY | src/utils/consts.ts:2-5, src/app/services/api.ts:187-244, helm/templates/secret.yaml:12-20 |
| Serviço de submissões | SUBMISSIONS_URL; em .env há https://piloto.delivery.stg.dhedalos.com/api | fetch em handlers e BFF | SUBMISSIONS_URL, SUBMISSIONS_APP_KEY | .env:9-10, src/app/api/submissions/route.ts:4-90, src/app/api/activity-template/route.ts:3-200 |
| Object storage de arquivos de submissão | SUBMISSIONS_STORAGE_URL; em .env há URL Oracle Object Storage | fetch em rotas de proxy/download | SUBMISSIONS_STORAGE_URL, NEXT_PUBLIC_SUBMISSIONS_STORAGE_URL | .env:11, src/app/api/submissions/files/[...path]/route.ts:17-60, src/app/api/download/route.ts:19-51, src/components/EnvioDeAtividades/EnvioDeAtividades.component.tsx:285-285 |
| Quiz Manager API | QUIZ_API_URL; em Helm, default http://dhedalos-quiz-api | fetch em src/services/quizApi.ts | QUIZ_API_URL; token Bearer opcional lido de localStorage('auth_token') | next.config.js:32-35, src/app/api/envs/route.ts:23-25, src/services/quizApi.ts:19-54, helm/templates/secret.yaml:22-23 |
| Jitsi | JITSI_SERVER_URL ou fallback meet.jit.si | @jitsi/react-sdk (JitsiMeeting) | JITSI_SERVER_URL; credenciais de sala vindas do backend e browser storage | .env.example:11-14, src/app/api/jitsi/config/route.ts:3-18, src/components/MeetingRoom/MeetingRoom.component.tsx:4-5, src/components/MeetingRoom/MeetingRoom.component.tsx:131-183 |
| Blip Chat | Hardcoded https://weconcept.chat.blip.ai/ | blip-chat-widget | BLIP_APP_KEY | src/components/AttendanceButton/AttendanceButton.component.tsx:56-83, src/app/api/blip/config/route.ts:3-9 |
| Datadog | Hardcoded datadoghq.com | @datadog/browser-rum, @datadog/browser-logs | NEXT_DATADOG_CLIENT_ID, NEXT_DATADOG_CLIENT_TOKEN, NEXT_DATADOG_SERVICE, NEXT_DATADOG_ENV, NEXT_DATADOG_SESSION_SAMPLE_RATE, NEXT_DATADOG_SESSION_REPLAY_SAMPLE_RATE | src/app/start/DatadogStart.tsx:19-41, src/app/api/envs/route.ts:7-25, helm/templates/secret.yaml:24-28 |
| Google Analytics | Não há URL explícita no código; há integração pelo componente do Next | @next/third-parties/google | ANALYTICS_GOOGLE_ID | src/app/layout.tsx:6-7, src/app/layout.tsx:51-52, src/app/layout.tsx:90-90 |
| Cypress Cloud | Não é integração da aplicação, mas aparece no CI | cypress-io/github-action@v6 | CYPRESS_RECORD_KEY, CYPRESS_PROJECT_ID | .github/workflows/cypress.yml:74-95 |
Observação importante
globalHeaders.Authorizationcontém um Basic Auth hardcoded (btoa('dhedalos:57oJXG5CgDCe')) usado porproxyRequest. Isso é um fato observado no código, não uma inferência de arquitetura.
Evidências:
src/utils/consts.ts:5-8src/app/services/api.ts:48-76
Jobs/cron/queues/workers
Fatos observados
| Mecanismo | Tipo | O que faz | Evidência |
|---|---|---|---|
build | Job GitHub Actions | Builda e publica imagem Docker em pushes/PRs/releases. | .github/workflows/ci-cd-pipeline.yml:13-50 |
deploy-piloto | Job GitHub Actions | Faz deploy Helm no namespace piloto-dhedalos-ecosystem na branch develop. | .github/workflows/ci-cd-pipeline.yml:51-75 |
deploy-essencia | Job GitHub Actions | Faz deploy Helm no namespace essencia-ecosystem na branch main. | .github/workflows/ci-cd-pipeline.yml:76-100 |
deploy-prod | Job GitHub Actions | Faz deploy Helm no namespace dhedalos-ecosystem na branch main. | .github/workflows/ci-cd-pipeline.yml:101-124 |
cypress-run | Job GitHub Actions | Executa E2E em 6 containers paralelos no Cypress Cloud. | .github/workflows/cypress.yml:11-104 |
| Countdown de cancelamento | Timer client-side | Executa setInterval de 1 segundo até logout automático após cancelamento de matrícula. | src/components/CancelRegistrationModal/CancelRegistration.component.tsx:122-139 |
| Presença automática | Timer client-side | Executa setInterval de 1 minuto para auto-presença após 10 minutos de sala. | src/components/MeetingRoom/MeetingRoom.component.tsx:206-229 |
Inferência controlada
- Não encontrei, nesta inspeção, prova local de filas persistentes, workers de backend dedicados ou cron jobs da aplicação fora de GitHub Actions e timers client-side. Isso deve ser tratado como ausência de evidência local, não como prova de inexistência global.
Evidências:
.github/workflows/ci-cd-pipeline.yml:13-124.github/workflows/cypress.yml:11-104src/components/CancelRegistrationModal/CancelRegistration.component.tsx:122-139src/components/MeetingRoom/MeetingRoom.component.tsx:206-229
Storage/caches
| Mecanismo | Tipo | Observação | Evidência |
|---|---|---|---|
memory-cache | Cache em memória do processo | Existe um helper fetchDataWithCache; uso efetivo não foi confirmado nesta inspeção. | src/hooks/useGetDataWithCache.ts:1-26 |
localStorage | Storage do browser | Há hook genérico e uso explícito para class_id, class_id_expiration, participantModeStorage, isParticipantMode e originalPage. | src/hooks/useLocalStorage.ts:5-65, src/components/ChangeCycle/ChangeCycle.component.tsx:190-199, src/components/HeaderParticipantMode/HeaderParticipantMode.component.tsx:36-78 |
sessionStorage | Storage do browser | Guarda credenciais de reunião e flags de execução única por sessão. | src/hooks/useSetMeetingParams.ts:16-22, src/hooks/useRunOnce.ts:38-49, src/components/MeetRoom/MeetRoom.component.tsx:35-47 |
| Cookies | Storage do browser | MeetRoom tenta recuperar credenciais de sala primeiro por cookie. | src/components/MeetRoom/MeetRoom.component.tsx:20-33 |
| Object storage remoto | Storage externo | Arquivos de submissão são servidos por proxy a partir de SUBMISSIONS_STORAGE_URL. | src/app/api/submissions/files/[...path]/route.ts:17-60, src/app/api/download/route.ts:19-51 |
| Cache HTTP explícito | Cache de resposta | A rota submissions/files responde com Cache-Control: public, max-age=3600. | src/app/api/submissions/files/[...path]/route.ts:44-59 |
| Desabilitação de cache | no-store / dinâmica | Há handlers e fetches marcados como force-dynamic, force-no-store, cache: 'no-store' e revalidate = 15. | src/app/(protected-routes)/layout.tsx:15-15, src/app/api/download/route.ts:3-4, src/app/api/submissions/api-token/route.ts:2-16, src/services/quizApi.ts:20-25, src/app/api/activity-template/route.ts:95-101 |
Variáveis de ambiente encontradas
Runtime/build da aplicação
| Variável | Status observado | Uso localizado | Evidência |
|---|---|---|---|
PROJECT_NAME | Encontrada em .env.example e consumida no runtime | Branding/variação de mensagens e /api/project-name/config | .env.example:1, src/app/layout.tsx:48-49, src/app/api/project-name/config/route.ts:3-12, src/app/(protected-routes)/agendar/[id]/page.tsx:21-25 |
NEXTAUTH_URL | Encontrada em .env*, Helm e workflow | URL base da autenticação | .env.example:3-4, .env.stage:1-2, .env.prod:1-2, helm/templates/secret.yaml:13-18, .github/workflows/cypress.yml:43-44 |
NEXTAUTH_SECRET | Encontrada em .env*, Helm e workflow | Segredo do NextAuth | .env.example:3-4, .env.stage:1-2, .env.prod:1-2, helm/templates/secret.yaml:18-18, .github/workflows/cypress.yml:43-44 |
API_URL | Encontrada em .env*, Helm e workflow | Base do backend WordPress/Dhedalos | .env.example:5-6, .env:6-6, .env.stage:3-3, .env.prod:3-3, src/utils/consts.ts:1-1, helm/templates/secret.yaml:20-21, .github/workflows/cypress.yml:35-35 |
DHEDALOS_PRIVACY_POLICY | Encontrada em .env.example e consumida no layout | Política de privacidade no cliente | .env.example:6-6, src/app/layout.tsx:48-49 |
NEXT_DHEDALOS_PRIVACY_POLICY | Encontrada em Helm e consumida em /api/envs | Política de privacidade exposta no runtime client-side | src/app/api/envs/route.ts:8-10, helm/templates/secret.yaml:24-24 |
SCHEDULE_URL | Encontrada em .env.example, Helm e workflow | Base do Schedule Manager | .env.example:8-9, src/utils/consts.ts:2-5, helm/templates/secret.yaml:19-19, .github/workflows/cypress.yml:36-37 |
SCHEDULE_APP_KEY | Encontrada em .env.example, Helm e workflow | Credencial para agenda | .env.example:8-9, src/utils/consts.ts:5-5, helm/templates/secret.yaml:12-12, .github/workflows/cypress.yml:36-37 |
SUBMISSIONS_URL | Encontrada em .env e workflow, consumida em rotas API | Base do serviço de submissões | .env:9-10, src/utils/consts.ts:10-11, src/app/api/submissions/route.ts:1-19, .github/workflows/cypress.yml:38-39 |
SUBMISSIONS_APP_KEY | Encontrada em .env e workflow, consumida em rotas API | Credencial do serviço de submissões | .env:9-10, src/utils/consts.ts:10-11, src/app/api/activity-template/route.ts:5-6, .github/workflows/cypress.yml:38-39 |
SUBMISSIONS_STORAGE_URL | Encontrada em workflow e consumida em handlers | Proxy/download de arquivos | src/app/api/submissions/files/[...path]/route.ts:17-18, src/app/api/download/route.ts:19-20, .github/workflows/cypress.yml:40-41 |
NEXT_PUBLIC_SUBMISSIONS_STORAGE_URL | Encontrada em .env e consumida no cliente | Links públicos de arquivos/templates | .env:11-11, src/components/EnvioDeAtividades/EnvioDeAtividades.component.tsx:285-285, src/components/ActivityManagement/components/ActivitiesSlider/ActivitiesSlider.component.tsx:448-448 |
QUIZ_API_URL | Encontrada em next.config.js, Helm e /api/envs | Base da Quiz API | next.config.js:32-35, src/app/api/envs/route.ts:23-25, src/services/quizApi.ts:19-33, helm/templates/secret.yaml:22-23 |
BLIP_APP_KEY | Encontrada no workflow e consumida em /api/blip/config | Chave do widget Blip | src/app/api/blip/config/route.ts:3-9, .github/workflows/cypress.yml:40-41 |
JITSI_SERVER_URL | Encontrada em .env.example e consumida em /api/jitsi/config | Host do Jitsi | .env.example:11-14, src/app/api/jitsi/config/route.ts:3-18 |
NEXT_APP_VERSION | Consumida por /api/envs e /api/health | Versão de runtime | src/app/api/envs/route.ts:7-8, src/app/api/health/route.ts:10-10, Dockerfile:23-28 |
NEXT_PUBLIC_APP_VERSION | Produzida em prebuild e .env local | Escrita no .env por updateEnvVersion.js | .env:4-4, updateEnvVersion.js:10-18, updateEnvVersion.js:27-49 |
METADATA_SITE_NAME | Encontrada em .env.example e consumida | Título/metadados da aplicação | .env.example:21-24, src/app/layout.tsx:41-58 |
METADATA_DESCRIPTION | Encontrada em .env.example e consumida | Descrição/metadados da aplicação | .env.example:21-24, src/app/layout.tsx:42-58 |
METADATA_KEYWORDS | Encontrada em .env.example e consumida | Keywords/metadados da aplicação | .env.example:21-24, src/app/layout.tsx:44-58 |
METADATA_FAVICON_URL | Encontrada em .env.example e consumida | Base do favicon | .env.example:21-24, src/app/layout.tsx:68-68 |
ANALYTICS_GOOGLE_ID | Encontrada em .env.example e consumida | Google Analytics | .env.example:26-26, src/app/layout.tsx:51-52, src/app/layout.tsx:90-90 |
NEXT_DATADOG_CLIENT_ID | Consumida em /api/envs | Datadog RUM | src/app/api/envs/route.ts:10-12, helm/templates/secret.yaml:25-28 |
NEXT_DATADOG_CLIENT_TOKEN | Consumida em /api/envs | Datadog RUM/Logs | src/app/api/envs/route.ts:11-13, helm/templates/secret.yaml:25-28 |
NEXT_DATADOG_SERVICE | Consumida em /api/envs | Nome do serviço Datadog | src/app/api/envs/route.ts:12-14, helm/templates/secret.yaml:25-28 |
NEXT_DATADOG_ENV | Consumida em /api/envs | Ambiente Datadog | src/app/api/envs/route.ts:13-15, helm/templates/secret.yaml:25-28 |
NEXT_DATADOG_SESSION_SAMPLE_RATE | Consumida em /api/envs | Amostragem de sessão Datadog | src/app/api/envs/route.ts:15-17 |
NEXT_DATADOG_SESSION_REPLAY_SAMPLE_RATE | Consumida em /api/envs | Amostragem de replay Datadog | src/app/api/envs/route.ts:18-21 |
DATADOG_ENV | Encontrada em .env.example, .env.stage e .env.prod | Encontrada em arquivos de ambiente; consumo direto não foi localizado no código atual, que usa variantes NEXT_DATADOG_* em /api/envs | .env.example:16-19, .env.stage:5-8, .env.prod:5-8, src/app/api/envs/route.ts:10-21 |
DATADOG_SERVICE | Encontrada em .env.example, .env.stage e .env.prod | Mesmo caso acima | .env.example:16-19, .env.stage:5-8, .env.prod:5-8, src/app/api/envs/route.ts:10-21 |
DATADOG_CLIENT_ID | Encontrada em .env.example, .env.stage e .env.prod | Mesmo caso acima | .env.example:16-19, .env.stage:5-8, .env.prod:5-8, src/app/api/envs/route.ts:10-21 |
DATADOG_CLIENT_TOKEN | Encontrada em .env.example, .env.stage e .env.prod | Mesmo caso acima | .env.example:16-19, .env.stage:5-8, .env.prod:5-8, src/app/api/envs/route.ts:10-21 |
NEXT_PUBLIC_E2E_TEST_MODE | Consumida no frontend e injetada em scripts/workflow | Ativa mocks de E2E | package.json:7-11, src/components/E2EFixturesProvider/E2EFixturesProvider.tsx:16-16, src/mocks/e2e-fixtures.ts:139-139, .github/workflows/cypress.yml:49-56 |
NODE_ENV | Consumida em /api/health | Diagnóstico | src/app/api/health/route.ts:16-16 |
CI | Consumida em updateEnvVersion.js | Altera comportamento do prebuild em CI | updateEnvVersion.js:10-13 |
Variáveis encontradas em arquivos/workflows sem consumo direto confirmado nesta inspeção
| Variável | Onde apareceu | Observação | Evidência |
|---|---|---|---|
NEXT_PUBLIC_SCHEDULE_URL | .env | Encontrada em arquivo local; o código consumido usa SCHEDULE_URL, não NEXT_PUBLIC_SCHEDULE_URL. | .env:7-8, src/utils/consts.ts:2-5 |
NEXT_PUBLIC_SCHEDULE_APP_KEY | .env | Mesmo caso acima. | .env:7-8, src/utils/consts.ts:5-5 |
KEYCLOAK_CLIENT_ID | .env | Encontrada, sem consumo direto localizado no código inspecionado. | .env:19-23 |
KEYCLOAK_CLIENT_SECRET | .env e workflow | Encontrada, sem consumo direto localizado no código inspecionado. | .env:20-22, .github/workflows/cypress.yml:45-47 |
KEYCLOAK_ISSUER | .env | Encontrada, sem consumo direto localizado no código inspecionado. | .env:20-22 |
NEXT_PUBLIC_KEYCLOAK_CLIENT_ID | Workflow Cypress | Encontrada no CI, sem consumo direto localizado no código inspecionado. | .github/workflows/cypress.yml:45-47 |
NEXT_PUBLIC_KEYCLOAK_ISSUER | Workflow Cypress | Encontrada no CI, sem consumo direto localizado no código inspecionado. | .github/workflows/cypress.yml:45-47 |
WP_SECRET | .env | Encontrada em .env; consumo direto não localizado. | .env:23-23 |
NEXT_PUBLIC_API_URL | Helm | Encontrada no secret Helm; consumo direto não localizado no código atual. | helm/templates/secret.yaml:20-23 |
NEXT_PUBLIC_QUIZ_API_URL | Helm | Encontrada no secret Helm; o código consumido lê QUIZ_API_URL via /api/envs. | helm/templates/secret.yaml:22-23, src/app/api/envs/route.ts:23-25 |
NOVU_API_URL | Helm | Encontrada no secret Helm; consumo direto não localizado. | helm/templates/secret.yaml:29-30 |
NOVU_API_KEY | Helm | Encontrada no secret Helm; consumo direto não localizado. | helm/templates/secret.yaml:29-30 |
API_URL_DEV, SCHEDULE_URL_DEV, SCHEDULE_APP_KEY_DEV, SUBMISSIONS_URL_DEV, SUBMISSIONS_APP_KEY_DEV, SUBMISSIONS_STORAGE_URL_DEV, BLIP_APP_KEY_DEV | Workflow Cypress | Secrets do CI para compor GITHUB_ENV. | .github/workflows/cypress.yml:33-41 |
CYPRESS_BASE_URL, CYPRESS_API_URL, CYPRESS_API_KEY, CYPRESS_RECORD_KEY, CYPRESS_PROJECT_ID | cypress.config.js e workflow | Variáveis da infraestrutura de E2E/Cypress Cloud. | cypress.config.js:6-27, .github/workflows/cypress.yml:74-95 |
DOCKER_REGISTRY, DOCKER_REPOSITORY, DOCKER_USERNAME, DOCKER_PASSWORD | Workflow CI/CD | Variáveis e secrets para build/push de imagem. | .github/workflows/ci-cd-pipeline.yml:34-49 |
Comandos de run/test/build
| Comando | Papel observado | Evidência |
|---|---|---|
npm run dev | Sobe o Next.js em desenvolvimento. | package.json:5-8 |
npm run dev:e2e | Sobe o app em dev com NEXT_PUBLIC_E2E_TEST_MODE=true. | package.json:7-8 |
npm run build | Gera build do Next.js. | package.json:8-10 |
npm run start | Sobe o build do Next.js. | package.json:9-10 |
npm run start:e2e | Sobe o app com NEXT_PUBLIC_E2E_TEST_MODE=true. | package.json:10-11 |
npm run lint | Executa next lint. | package.json:11-11 |
npm run prettier | Executa prettier --check ./src. | package.json:12-12 |
npm test | Executa Jest. | package.json:14-15, jest.config.ts:1-51 |
npm run test:watch | Executa Jest em watch mode. | package.json:15-15 |
npm run storybook | Sobe o Storybook na porta 6006. | package.json:16-17, .storybook/main.ts:3-27 |
npm run build-storybook | Gera build estático do Storybook. | package.json:17-18 |
npm run cypress:open | Abre o Cypress. | package.json:18-21, cypress.config.js:1-28 |
npm run cypress:run | Roda a suíte Cypress. | package.json:19-22, cypress.config.js:1-28 |
npm run cypress:open:e2e | Cypress com modo E2E mockado. | package.json:20-22 |
npm run cypress:run:e2e | Execução E2E mockada via Cypress. | package.json:21-22 |
prebuild | Atualiza versão no .env antes do build. | package.json:5-5, updateEnvVersion.js:7-49 |
Pendências
- Confirmar se existem filas, workers ou crons fora deste repositório; aqui só há evidência de GitHub Actions e timers client-side.
- Confirmar a origem e a necessidade operacional do Basic Auth hardcoded em
src/utils/consts.ts. - Alinhar a nomenclatura entre variáveis
DATADOG_*/DHEDALOS_PRIVACY_POLICYe as variantesNEXT_DATADOG_*/NEXT_DHEDALOS_PRIVACY_POLICY. - Confirmar o uso real das variáveis Keycloak, Novu e
NEXT_PUBLIC_*encontradas em.env/Helm/CI mas sem consumo direto localizado. - Expandir o inventário dos handlers de
src/app/apialém da amostra central usada neste overview.
Evidências:
src/utils/consts.ts:5-8.github/workflows/ci-cd-pipeline.yml:13-124.github/workflows/cypress.yml:33-95src/app/api/envs/route.ts:7-25helm/templates/secret.yaml:20-30
Achados x Evidências
| Achado | Evidências |
|---|---|
| O repo combina frontend Next.js e BFF local | src/app/layout.tsx:60-93, src/app/api/classes/route.ts:10-86, src/app/api/submissions/route.ts:4-90 |
| O domínio principal é educacional, com turmas, atividades, agenda, quiz e reuniões | src/stories/Introducao.mdx:9-18, src/app/(protected-routes)/agenda/page.tsx:131-155, src/app/(protected-routes)/gestao-de-atividades/page.tsx:11-47, src/app/(protected-routes)/quiz/page.tsx:21-231, src/app/(protected-routes)/sala-de-reuniao/page.tsx:7-15 |
| A entrega de produção usa build standalone do Next.js em Docker | next.config.js:3-5, Dockerfile:34-78 |
| Há CI/CD para build/push Docker e deploy Helm | .github/workflows/ci-cd-pipeline.yml:13-124 |
| Os testes E2E são paralelizados no Cypress Cloud | .github/workflows/cypress.yml:11-104, cypress.config.js:6-28 |
| As integrações externas principais são WordPress, Schedule Manager, Submissions, Quiz API, Jitsi, Blip, Datadog e GA | src/app/services/api.ts:115-244, src/app/api/submissions/route.ts:4-90, src/services/quizApi.ts:19-54, src/components/MeetingRoom/MeetingRoom.component.tsx:131-183, src/components/AttendanceButton/AttendanceButton.component.tsx:56-83, src/app/start/DatadogStart.tsx:19-41, src/app/layout.tsx:51-90 |
| O browser é usado como storage de estado operacional | src/hooks/useLocalStorage.ts:18-52, src/components/ChangeCycle/ChangeCycle.component.tsx:190-199, src/components/HeaderParticipantMode/HeaderParticipantMode.component.tsx:36-78, src/components/MeetRoom/MeetRoom.component.tsx:20-47 |
Existe cache em memória e diretrizes explícitas de no-store/revalidate | src/hooks/useGetDataWithCache.ts:1-26, src/app/(protected-routes)/layout.tsx:15-15, src/app/api/submissions/api-token/route.ts:2-16, src/services/quizApi.ts:20-25 |
| Há evidência de timers client-side, mas não de queue/worker persistente nesta inspeção | src/components/CancelRegistrationModal/CancelRegistration.component.tsx:122-139, src/components/MeetingRoom/MeetingRoom.component.tsx:206-229 |