Pular para o conteúdo principal

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-22
  • src/app/layout.tsx:60-93
  • src/app/(protected-routes)/layout.tsx:21-74
  • Dockerfile: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-46
  • src/app/layout.tsx:60-93
  • src/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-84
  • docs/adr/0001-architecture-overview.md:1-40
  • docs/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-reuniao e trocar-turma.

Evidências:

  • package.json:1-22
  • README.md:1-22
  • src/stories/Introducao.mdx:5-18
  • src/app/(protected-routes)/home/page.tsx:18-67
  • src/app/(protected-routes)/agenda/page.tsx:131-155
  • src/app/(protected-routes)/quiz/page.tsx:21-231

Inferência controlada

  • Pela combinação de rotas UI em src/app e handlers em src/app/api, o repositório atua como frontend web e BFF do produto.

Evidências:

  • src/app/page.tsx:8-27
  • src/app/(protected-routes)/layout.tsx:21-74
  • src/app/api/classes/route.ts:10-86
  • src/app/api/submissions/route.ts:4-90

Entrypoints

TipoEntrypointPapel observadoEvidência
Websrc/app/layout.tsxLayout raiz, fonte local, providers, Datadog e Google Analytics.src/app/layout.tsx:1-93
Websrc/app/page.tsxTela pública de login e redirecionamento para /home se houver sessão.src/app/page.tsx:1-28
Websrc/app/(public-routes)/[slug]/page.tsxLogin dinâmico por slug, com dados do curso e manutenção por curso.src/app/(public-routes)/[slug]/page.tsx:7-54
Websrc/app/(protected-routes)/layout.tsxGuarda de autenticação das rotas protegidas, carregamento de classes e maintenance mode.src/app/(protected-routes)/layout.tsx:21-74
APIsrc/app/api/*/route.tsHandlers 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
Buildprebuild -> updateEnvVersion.jsAtualiza NEXT_PUBLIC_APP_VERSION a partir da versão do package.json.package.json:5-6, updateEnvVersion.js:4-49
Runtime containerCMD ["node", "server.js"]Entrypoint da imagem standalone do Next.js.Dockerfile:34-78
Storybook.storybook/main.tsEntrypoint/configuração de stories MDX e *.stories.*..storybook/main.ts:1-27
Teste unitáriojest.config.tsEntrypoint/configuração de testes unitários com ts-jest.package.json:13-14, jest.config.ts:1-51
Teste E2Ecypress.config.jsEntrypoint/configuração de Cypress.package.json:19-22, cypress.config.js:1-28
Teste de storiesvitest.config.tsConfiguraçã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/**/*.mdx e ../src/**/*.stories.@(js|jsx|mjs|ts|tsx).
  • Fato observado: os scripts expostos para esse fluxo são storybook e build-storybook.
  • Fato observado: os addons ativos hoje são @storybook/addon-onboarding, @chromatic-com/storybook, @storybook/addon-docs e @storybook/addon-vitest.

Evidências:

  • .storybook/main.ts:3-27
  • package.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 de canvas.
  • Fato observado: os scripts disponíveis são test e test:watch.

Evidências:

  • package.json:15-16
  • jest.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-22
  • cypress.config.js:1-28

Vitest

  • Fato observado: existe vitest.config.ts no 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 chromium com playwright.
  • Fato observado: não há script npm dedicado para vitest no package.json.

Evidências:

  • vitest.config.ts:1-37
  • package.json:5-22

Principais pastas e responsabilidades

PastaLeituraEvidência
src/appFato 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/servicesFato 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/componentsFato 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/hooksFato 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/servicesFato 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/themeFato observado: provê integração de tema MUI.src/theme/Provider.component.tsx:1-27
src/typesFato 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/modelsFato observado: contém modelos simples usados no código, como ReasonOption.src/models/ReasonOption.ts:1-5
src/resourcesFato observado: exporta recursos gráficos reutilizáveis, como ícones.src/resources/icons/index.ts:1-5
src/storiesFato observado: mantém documentação MDX e material de Storybook do produto.src/stories/Introducao.mdx:1-18, src/stories/DocumentacaoProjeto.mdx:1-145
publicFato observado: armazena assets públicos, incluindo fontes e ícones usados no layout.src/app/layout.tsx:12-39, src/app/layout.tsx:68-90
cypressFato observado: guarda suporte e infraestrutura de testes E2E.cypress/support/e2e.js:1-32, cypress/support/commands.js:27-36
testFato observado: armazena mocks usados nos testes unitários.jest.config.ts:22-30, test/__mocks__/canvas.ts:1-11
.github/workflowsFato 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
helmFato observado: contém chart Helm e defaults de deploy.helm/values.yaml:1-75, helm/templates/secret.yaml:1-30
kubernetesFato observado: contém valores por cluster/namespace para deploy.kubernetes/oke-we-001/dhedalos-ecosystem/values.yaml:1-23
docsFato observado: documentação estruturada do repositório.docs/architecture/c4-component.md:1-84, docs/api/openapi.yaml:1-40

Integrações externas

IntegraçãoURL observadaSDK/client observadoCredenciais ou envs observadosEvidência
Backend WordPress / Dhedalos APIAPI_URL, com fallback https://dhedalos-backend.sv.teste404.com.br; em Helm, default http://dhedalos-app-backend-wpfetch via wpRequestAPI_URL; token Bearer vindo da sessãosrc/utils/consts.ts:1-11, src/app/services/api.ts:115-185, helm/templates/secret.yaml:19-23
Schedule ManagerSCHEDULE_URL, com fallback https://dhedalos-agenda.sv.teste404.com.br/api; em Helm, default http://dhedalos-app-laravel-schedule-managerfetch via scheduleRequestSCHEDULE_URL, SCHEDULE_APP_KEYsrc/utils/consts.ts:2-5, src/app/services/api.ts:187-244, helm/templates/secret.yaml:12-20
Serviço de submissõesSUBMISSIONS_URL; em .envhttps://piloto.delivery.stg.dhedalos.com/apifetch em handlers e BFFSUBMISSIONS_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ãoSUBMISSIONS_STORAGE_URL; em .env há URL Oracle Object Storagefetch em rotas de proxy/downloadSUBMISSIONS_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 APIQUIZ_API_URL; em Helm, default http://dhedalos-quiz-apifetch em src/services/quizApi.tsQUIZ_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
JitsiJITSI_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 ChatHardcoded https://weconcept.chat.blip.ai/blip-chat-widgetBLIP_APP_KEYsrc/components/AttendanceButton/AttendanceButton.component.tsx:56-83, src/app/api/blip/config/route.ts:3-9
DatadogHardcoded datadoghq.com@datadog/browser-rum, @datadog/browser-logsNEXT_DATADOG_CLIENT_ID, NEXT_DATADOG_CLIENT_TOKEN, NEXT_DATADOG_SERVICE, NEXT_DATADOG_ENV, NEXT_DATADOG_SESSION_SAMPLE_RATE, NEXT_DATADOG_SESSION_REPLAY_SAMPLE_RATEsrc/app/start/DatadogStart.tsx:19-41, src/app/api/envs/route.ts:7-25, helm/templates/secret.yaml:24-28
Google AnalyticsNão há URL explícita no código; há integração pelo componente do Next@next/third-parties/googleANALYTICS_GOOGLE_IDsrc/app/layout.tsx:6-7, src/app/layout.tsx:51-52, src/app/layout.tsx:90-90
Cypress CloudNão é integração da aplicação, mas aparece no CIcypress-io/github-action@v6CYPRESS_RECORD_KEY, CYPRESS_PROJECT_ID.github/workflows/cypress.yml:74-95

Observação importante

  • globalHeaders.Authorization contém um Basic Auth hardcoded (btoa('dhedalos:57oJXG5CgDCe')) usado por proxyRequest. Isso é um fato observado no código, não uma inferência de arquitetura.

Evidências:

  • src/utils/consts.ts:5-8
  • src/app/services/api.ts:48-76

Jobs/cron/queues/workers

Fatos observados

MecanismoTipoO que fazEvidência
buildJob GitHub ActionsBuilda e publica imagem Docker em pushes/PRs/releases..github/workflows/ci-cd-pipeline.yml:13-50
deploy-pilotoJob GitHub ActionsFaz deploy Helm no namespace piloto-dhedalos-ecosystem na branch develop..github/workflows/ci-cd-pipeline.yml:51-75
deploy-essenciaJob GitHub ActionsFaz deploy Helm no namespace essencia-ecosystem na branch main..github/workflows/ci-cd-pipeline.yml:76-100
deploy-prodJob GitHub ActionsFaz deploy Helm no namespace dhedalos-ecosystem na branch main..github/workflows/ci-cd-pipeline.yml:101-124
cypress-runJob GitHub ActionsExecuta E2E em 6 containers paralelos no Cypress Cloud..github/workflows/cypress.yml:11-104
Countdown de cancelamentoTimer client-sideExecuta 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áticaTimer client-sideExecuta 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-104
  • src/components/CancelRegistrationModal/CancelRegistration.component.tsx:122-139
  • src/components/MeetingRoom/MeetingRoom.component.tsx:206-229

Storage/caches

MecanismoTipoObservaçãoEvidência
memory-cacheCache em memória do processoExiste um helper fetchDataWithCache; uso efetivo não foi confirmado nesta inspeção.src/hooks/useGetDataWithCache.ts:1-26
localStorageStorage do browserHá 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
sessionStorageStorage do browserGuarda 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
CookiesStorage do browserMeetRoom tenta recuperar credenciais de sala primeiro por cookie.src/components/MeetRoom/MeetRoom.component.tsx:20-33
Object storage remotoStorage externoArquivos 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ícitoCache de respostaA rota submissions/files responde com Cache-Control: public, max-age=3600.src/app/api/submissions/files/[...path]/route.ts:44-59
Desabilitação de cacheno-store / dinâmicaHá 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ávelStatus observadoUso localizadoEvidência
PROJECT_NAMEEncontrada em .env.example e consumida no runtimeBranding/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_URLEncontrada em .env*, Helm e workflowURL 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_SECRETEncontrada em .env*, Helm e workflowSegredo 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_URLEncontrada em .env*, Helm e workflowBase 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_POLICYEncontrada em .env.example e consumida no layoutPolítica de privacidade no cliente.env.example:6-6, src/app/layout.tsx:48-49
NEXT_DHEDALOS_PRIVACY_POLICYEncontrada em Helm e consumida em /api/envsPolítica de privacidade exposta no runtime client-sidesrc/app/api/envs/route.ts:8-10, helm/templates/secret.yaml:24-24
SCHEDULE_URLEncontrada em .env.example, Helm e workflowBase 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_KEYEncontrada em .env.example, Helm e workflowCredencial 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_URLEncontrada em .env e workflow, consumida em rotas APIBase 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_KEYEncontrada em .env e workflow, consumida em rotas APICredencial 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_URLEncontrada em workflow e consumida em handlersProxy/download de arquivossrc/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_URLEncontrada em .env e consumida no clienteLinks 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_URLEncontrada em next.config.js, Helm e /api/envsBase da Quiz APInext.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_KEYEncontrada no workflow e consumida em /api/blip/configChave do widget Blipsrc/app/api/blip/config/route.ts:3-9, .github/workflows/cypress.yml:40-41
JITSI_SERVER_URLEncontrada em .env.example e consumida em /api/jitsi/configHost do Jitsi.env.example:11-14, src/app/api/jitsi/config/route.ts:3-18
NEXT_APP_VERSIONConsumida por /api/envs e /api/healthVersão de runtimesrc/app/api/envs/route.ts:7-8, src/app/api/health/route.ts:10-10, Dockerfile:23-28
NEXT_PUBLIC_APP_VERSIONProduzida em prebuild e .env localEscrita no .env por updateEnvVersion.js.env:4-4, updateEnvVersion.js:10-18, updateEnvVersion.js:27-49
METADATA_SITE_NAMEEncontrada em .env.example e consumidaTítulo/metadados da aplicação.env.example:21-24, src/app/layout.tsx:41-58
METADATA_DESCRIPTIONEncontrada em .env.example e consumidaDescrição/metadados da aplicação.env.example:21-24, src/app/layout.tsx:42-58
METADATA_KEYWORDSEncontrada em .env.example e consumidaKeywords/metadados da aplicação.env.example:21-24, src/app/layout.tsx:44-58
METADATA_FAVICON_URLEncontrada em .env.example e consumidaBase do favicon.env.example:21-24, src/app/layout.tsx:68-68
ANALYTICS_GOOGLE_IDEncontrada em .env.example e consumidaGoogle Analytics.env.example:26-26, src/app/layout.tsx:51-52, src/app/layout.tsx:90-90
NEXT_DATADOG_CLIENT_IDConsumida em /api/envsDatadog RUMsrc/app/api/envs/route.ts:10-12, helm/templates/secret.yaml:25-28
NEXT_DATADOG_CLIENT_TOKENConsumida em /api/envsDatadog RUM/Logssrc/app/api/envs/route.ts:11-13, helm/templates/secret.yaml:25-28
NEXT_DATADOG_SERVICEConsumida em /api/envsNome do serviço Datadogsrc/app/api/envs/route.ts:12-14, helm/templates/secret.yaml:25-28
NEXT_DATADOG_ENVConsumida em /api/envsAmbiente Datadogsrc/app/api/envs/route.ts:13-15, helm/templates/secret.yaml:25-28
NEXT_DATADOG_SESSION_SAMPLE_RATEConsumida em /api/envsAmostragem de sessão Datadogsrc/app/api/envs/route.ts:15-17
NEXT_DATADOG_SESSION_REPLAY_SAMPLE_RATEConsumida em /api/envsAmostragem de replay Datadogsrc/app/api/envs/route.ts:18-21
DATADOG_ENVEncontrada em .env.example, .env.stage e .env.prodEncontrada 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_SERVICEEncontrada em .env.example, .env.stage e .env.prodMesmo caso acima.env.example:16-19, .env.stage:5-8, .env.prod:5-8, src/app/api/envs/route.ts:10-21
DATADOG_CLIENT_IDEncontrada em .env.example, .env.stage e .env.prodMesmo caso acima.env.example:16-19, .env.stage:5-8, .env.prod:5-8, src/app/api/envs/route.ts:10-21
DATADOG_CLIENT_TOKENEncontrada em .env.example, .env.stage e .env.prodMesmo 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_MODEConsumida no frontend e injetada em scripts/workflowAtiva mocks de E2Epackage.json:7-11, src/components/E2EFixturesProvider/E2EFixturesProvider.tsx:16-16, src/mocks/e2e-fixtures.ts:139-139, .github/workflows/cypress.yml:49-56
NODE_ENVConsumida em /api/healthDiagnósticosrc/app/api/health/route.ts:16-16
CIConsumida em updateEnvVersion.jsAltera comportamento do prebuild em CIupdateEnvVersion.js:10-13

Variáveis encontradas em arquivos/workflows sem consumo direto confirmado nesta inspeção

VariávelOnde apareceuObservaçãoEvidência
NEXT_PUBLIC_SCHEDULE_URL.envEncontrada 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.envMesmo caso acima..env:7-8, src/utils/consts.ts:5-5
KEYCLOAK_CLIENT_ID.envEncontrada, sem consumo direto localizado no código inspecionado..env:19-23
KEYCLOAK_CLIENT_SECRET.env e workflowEncontrada, sem consumo direto localizado no código inspecionado..env:20-22, .github/workflows/cypress.yml:45-47
KEYCLOAK_ISSUER.envEncontrada, sem consumo direto localizado no código inspecionado..env:20-22
NEXT_PUBLIC_KEYCLOAK_CLIENT_IDWorkflow CypressEncontrada no CI, sem consumo direto localizado no código inspecionado..github/workflows/cypress.yml:45-47
NEXT_PUBLIC_KEYCLOAK_ISSUERWorkflow CypressEncontrada no CI, sem consumo direto localizado no código inspecionado..github/workflows/cypress.yml:45-47
WP_SECRET.envEncontrada em .env; consumo direto não localizado..env:23-23
NEXT_PUBLIC_API_URLHelmEncontrada no secret Helm; consumo direto não localizado no código atual.helm/templates/secret.yaml:20-23
NEXT_PUBLIC_QUIZ_API_URLHelmEncontrada 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_URLHelmEncontrada no secret Helm; consumo direto não localizado.helm/templates/secret.yaml:29-30
NOVU_API_KEYHelmEncontrada 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_DEVWorkflow CypressSecrets 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_IDcypress.config.js e workflowVariá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_PASSWORDWorkflow CI/CDVariáveis e secrets para build/push de imagem..github/workflows/ci-cd-pipeline.yml:34-49

Comandos de run/test/build

ComandoPapel observadoEvidência
npm run devSobe o Next.js em desenvolvimento.package.json:5-8
npm run dev:e2eSobe o app em dev com NEXT_PUBLIC_E2E_TEST_MODE=true.package.json:7-8
npm run buildGera build do Next.js.package.json:8-10
npm run startSobe o build do Next.js.package.json:9-10
npm run start:e2eSobe o app com NEXT_PUBLIC_E2E_TEST_MODE=true.package.json:10-11
npm run lintExecuta next lint.package.json:11-11
npm run prettierExecuta prettier --check ./src.package.json:12-12
npm testExecuta Jest.package.json:14-15, jest.config.ts:1-51
npm run test:watchExecuta Jest em watch mode.package.json:15-15
npm run storybookSobe o Storybook na porta 6006.package.json:16-17, .storybook/main.ts:3-27
npm run build-storybookGera build estático do Storybook.package.json:17-18
npm run cypress:openAbre o Cypress.package.json:18-21, cypress.config.js:1-28
npm run cypress:runRoda a suíte Cypress.package.json:19-22, cypress.config.js:1-28
npm run cypress:open:e2eCypress com modo E2E mockado.package.json:20-22
npm run cypress:run:e2eExecução E2E mockada via Cypress.package.json:21-22
prebuildAtualiza 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_POLICY e as variantes NEXT_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/api alé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-95
  • src/app/api/envs/route.ts:7-25
  • helm/templates/secret.yaml:20-30

Achados x Evidências

AchadoEvidências
O repo combina frontend Next.js e BFF localsrc/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õessrc/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 Dockernext.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 GAsrc/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 operacionalsrc/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/revalidatesrc/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çãosrc/components/CancelRegistrationModal/CancelRegistration.component.tsx:122-139, src/components/MeetingRoom/MeetingRoom.component.tsx:206-229