# ctrlaltdevs0-droid/abp_1 architecture

> Architecture diagram of the GitHub repository ctrlaltdevs0-droid/abp_1, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ctrlaltdevs0-droid/abp_1
- Repository: https://github.com/ctrlaltdevs0-droid/abp_1

## Overview

ÁgilCert is a learning and certification portal focused on Scrum. Learners study themed content, practice with questions, track completion, take a certification exam, and can receive a certificate if they meet the passing criteria. The graph separates the browser experience, study and certification stages, API/authentication, and persistence. Backend connections are grounded in the supplied source index or excerpts; frontend-to-API wiring and several unsampled feature implementations are not shown, so those links are omitted or marked unverified.

Main entry points: [`backend/src/routes/index.js`](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/index.js) (API route dispatcher), [`frontend/src`](https://github.com/ctrlaltdevs0-droid/abp_1/tree/main/frontend/src) (Web portal), [`backend/src/server.js`](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/server.js) (HTTP server), [`backend/src/routes/conteudos.js`](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/conteudos.js) (Learning content)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Learner experience"]
  node_web["Web portal"]
end

subgraph group_study["Study and progress"]
  node_content["Learning content<br/>[conteudos.js]"]
  node_topics["Study topics<br/>[temas.js]"]
  node_practice["Practice questions<br/>[questoes.js]"]
  node_studyprogress["Study progress<br/>[progresso.js]"]
  node_contentservice["Content queries<br/>[conteudos.js]"]
  node_questionservice["Question queries<br/>[questoes.js]"]
end

subgraph group_certification["Certification"]
  node_history["Exam history<br/>[historico.js]"]
  node_exam["Certification exam<br/>[prova.js]"]
  node_attempts["Exam attempts<br/>[tentativas.js]"]
  node_continuity["Exam continuity<br/>[continuidade.js]"]
  node_certificates["Certificates<br/>[certificados.js]"]
  node_examservice["Exam operations<br/>[provas.js]"]
end

subgraph group_api["API and access"]
  node_server["HTTP server<br/>[server.js]"]
  node_routeindex["API route dispatcher<br/>[index.js]"]
  node_login["Registration and login<br/>[login.js]"]
  node_authorization["Route authorization<br/>[autorizacao.js]"]
  node_ratelimit["Authentication limits"]
  node_session["Session revocation<br/>[sessoes.js]"]
end

subgraph group_data["Persistence"]
  node_supabaseclient["Supabase client<br/>[supabase.js]"]
  node_database[("Application database<br/>[schema.sql]")]
end

node_learner(("Learner"))
node_supabase["Supabase service"]

node_learner -->|"uses"| node_web
node_web -.->|"studies"| node_content
node_web -.->|"practices"| node_practice
node_web -.->|"tracks progress"| node_studyprogress
node_web -.->|"takes exam"| node_exam
node_web -.->|"views certificate"| node_certificates
node_server -->|"limits login"| node_ratelimit
node_server -->|"mounts login"| node_login
node_server -->|"authorizes requests"| node_authorization
node_server -->|"dispatches routes"| node_routeindex
node_server -->|"dispatches exam"| node_exam
node_login -->|"revokes sessions"| node_session
node_authorization -->|"checks revocation"| node_session
node_routeindex -->|"dispatches routes"| node_content
node_routeindex -->|"dispatches routes"| node_topics
node_routeindex -->|"dispatches routes"| node_practice
node_routeindex -->|"dispatches routes"| node_studyprogress
node_routeindex -->|"dispatches routes"| node_history
node_routeindex -->|"dispatches routes"| node_certificates
node_content -->|"queries content"| node_contentservice
node_practice -->|"queries questions"| node_questionservice
node_attempts -->|"executes operations"| node_examservice
node_attempts -->|"dispatches continuity"| node_continuity
node_exam -->|"starts exam"| node_examservice
node_contentservice -->|"queries data"| node_supabase
node_questionservice -->|"queries data"| node_supabase
node_examservice -->|"calls RPC"| node_supabase
node_supabaseclient -->|"creates client"| node_supabase
node_supabase -.->|"persists records"| node_database

click node_web "https://github.com/ctrlaltdevs0-droid/abp_1/tree/main/frontend/src"
click node_content "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/conteudos.js"
click node_topics "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/temas.js"
click node_practice "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/questoes.js"
click node_studyprogress "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/progresso.js"
click node_history "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/historico.js"
click node_exam "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/prova.js"
click node_attempts "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/tentativas.js"
click node_continuity "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/continuidade.js"
click node_certificates "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/certificados.js"
click node_server "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/server.js"
click node_routeindex "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/index.js"
click node_login "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/login.js"
click node_authorization "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/middleware/autorizacao.js"
click node_ratelimit "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/middleware/limite-autenticacao.js"
click node_session "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/sessoes.js"
click node_contentservice "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/conteudos.js"
click node_questionservice "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/questoes.js"
click node_examservice "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/provas.js"
click node_supabaseclient "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/config/supabase.js"
click node_database "https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/database/schema.sql"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web toneBlue
class node_content,node_topics,node_practice,node_studyprogress,node_contentservice,node_questionservice toneAmber
class node_history,node_exam,node_attempts,node_continuity,node_certificates,node_examservice toneMint
class node_server,node_routeindex,node_login,node_authorization,node_ratelimit,node_session toneRose
class node_supabaseclient,node_database,node_learner,node_supabase toneIndigo
```

## Components

### Learner experience

- [Web portal](https://github.com/ctrlaltdevs0-droid/abp_1/tree/main/frontend/src): `frontend/src`

### Study and progress

- [Learning content](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/conteudos.js): `backend/src/routes/conteudos.js`
- [Study topics](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/temas.js): `backend/src/routes/temas.js`
- [Practice questions](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/questoes.js): `backend/src/routes/questoes.js`
- [Study progress](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/progresso.js): `backend/src/routes/progresso.js`
- [Content queries](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/conteudos.js): `backend/src/services/conteudos.js`
- [Question queries](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/questoes.js): `backend/src/services/questoes.js`

### Certification

- [Exam history](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/historico.js): `backend/src/routes/historico.js`
- [Certification exam](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/prova.js): `backend/src/routes/prova.js`
- [Exam attempts](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/tentativas.js): `backend/src/routes/tentativas.js`
- [Exam continuity](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/continuidade.js): `backend/src/routes/continuidade.js`
- [Certificates](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/certificados.js): `backend/src/routes/certificados.js`
- [Exam operations](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/provas.js): `backend/src/services/provas.js`

### API and access

- [HTTP server](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/server.js): `backend/src/server.js`
- [API route dispatcher](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/index.js): `backend/src/routes/index.js`
- [Registration and login](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/routes/login.js): `backend/src/routes/login.js`
- [Route authorization](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/middleware/autorizacao.js): `backend/src/middleware/autorizacao.js`
- [Authentication limits](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/middleware/limite-autenticacao.js): `backend/src/middleware/limite-autenticacao.js`
- [Session revocation](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/services/sessoes.js): `backend/src/services/sessoes.js`

### Persistence

- [Supabase client](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/src/config/supabase.js): `backend/src/config/supabase.js`
- [Application database](https://github.com/ctrlaltdevs0-droid/abp_1/blob/main/backend/database/schema.sql): `backend/database/schema.sql`

### Other components

- **Learner**
- **Supabase service**

## Connections

- Learner → Web portal: uses (evidence: `README.md`)
- Web portal → Learning content: studies
- Web portal → Practice questions: practices
- Web portal → Study progress: tracks progress
- Web portal → Certification exam: takes exam
- Web portal → Certificates: views certificate
- HTTP server → Authentication limits: limits login (evidence: `backend/src/server.js`)
- HTTP server → Registration and login: mounts login (evidence: `backend/src/server.js`)
- HTTP server → Route authorization: authorizes requests (evidence: `backend/src/server.js`)
- HTTP server → API route dispatcher: dispatches routes (evidence: `backend/src/server.js`)
- HTTP server → Certification exam: dispatches exam (evidence: `backend/src/server.js`)
- Registration and login → Session revocation: revokes sessions (evidence: `backend/src/routes/login.js`)
- Route authorization → Session revocation: checks revocation (evidence: `backend/src/middleware/autorizacao.js`)
- API route dispatcher → Learning content: dispatches routes (evidence: `backend/src/routes/index.js`)
- API route dispatcher → Study topics: dispatches routes (evidence: `backend/src/routes/index.js`)
- API route dispatcher → Practice questions: dispatches routes (evidence: `backend/src/routes/index.js`)
- API route dispatcher → Study progress: dispatches routes (evidence: `backend/src/routes/index.js`)
- API route dispatcher → Exam history: dispatches routes (evidence: `backend/src/routes/index.js`)
- API route dispatcher → Certificates: dispatches routes (evidence: `backend/src/routes/index.js`)
- Learning content → Content queries: queries content (evidence: `backend/src/routes/conteudos.js`)
- Practice questions → Question queries: queries questions (evidence: `backend/src/routes/questoes.js`)
- Exam attempts → Exam operations: executes operations (evidence: `backend/src/routes/tentativas.js`)
- Exam attempts → Exam continuity: dispatches continuity (evidence: `backend/src/routes/tentativas.js`)
- Certification exam → Exam operations: starts exam
- Content queries → Supabase service: queries data (evidence: `backend/src/services/conteudos.js`)
- Question queries → Supabase service: queries data (evidence: `backend/src/services/questoes.js`)
- Exam operations → Supabase service: calls RPC (evidence: `backend/src/services/provas.js`)
- Supabase client → Supabase service: creates client (evidence: `backend/src/config/supabase.js`)
- Supabase service → Application database: persists records
