# axelpepen/apagonrd architecture

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

- Interactive diagram: https://gitdiagram.com/axelpepen/apagonrd
- Repository: https://github.com/axelpepen/apagonrd

## Overview

ApagónRD is a Dominican Republic power-outage information and community reporting app. The principal workflow lets users discover sector power status, submit a geolocated outage report (with optional photos), and review reports; separate dashboard and AI-assistant capabilities extend that workflow. Routing and authentication gate the app, while service classes communicate with the backend. The README documents product capabilities; source excerpts and the SOURCE INDEX support the shown routes and service relationships, but do not expose every implementation detail or backend endpoint.

Main entry points: [`src/AppRouting.tsx`](https://github.com/axelpepen/apagonrd/blob/master/src/AppRouting.tsx) (App shell and routes), [`src/services/BaseService.ts`](https://github.com/axelpepen/apagonrd/blob/master/src/services/BaseService.ts) (HTTP service layer), [`src/services/auth/AuthService.ts`](https://github.com/axelpepen/apagonrd/blob/master/src/services/auth/AuthService.ts) (Authentication service), [`src/services/sector/SectorService.ts`](https://github.com/axelpepen/apagonrd/blob/master/src/services/sector/SectorService.ts) (Sector service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and access"]
  node_app["App shell and routes<br/>[AppRouting.tsx]"]
  node_auth["Authentication state<br/>[AuthContext.tsx]"]
  node_authui["Sign-in and recovery<br/>[AuthPage.tsx]"]
  node_landing["Public landing site<br/>[LandingSite.tsx]"]
end

subgraph group_power["Power information"]
  node_home["Sector status map<br/>[HomePage.tsx]"]
  node_uptime["Uptime statistics"]
end

subgraph group_community["Community reports"]
  node_reportform["Outage reporting<br/>[ReportarPage.tsx]"]
  node_myreports["My reports"]
  node_assistant["AI assistant<br/>[AssistantPage.tsx]"]
end

subgraph group_services["Backend services"]
  node_sectorservice["Sector service<br/>[SectorService.ts]"]
  node_reportservice["Report service<br/>[ReportService.ts]"]
  node_fileservice["File service<br/>[FileService.ts]"]
  node_assistantservice["Assistant service"]
  node_authservice["Authentication service<br/>[AuthService.ts]"]
  node_base["HTTP service layer<br/>[BaseService.ts]"]
  node_storage[("Browser storage<br/>[LocalStorage.ts]")]
end

subgraph group_domain["Domain models"]
  node_sector["Sector and uptime models<br/>[Sector.ts]"]
  node_report["Report model<br/>[Report.ts]"]
  node_user["User model<br/>[user.ts]"]
  node_pagination["Pagination model<br/>[Page.ts]"]
  node_token["Token model<br/>[Token.ts]"]
end

node_visitor(("Visitor"))
node_api{{"ApagónRD backend API"}}

node_visitor -->|"opens app"| node_app
node_app -->|"routes to"| node_landing
node_app -->|"routes to"| node_authui
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_uptime
node_app -->|"routes to"| node_reportform
node_app -->|"routes to"| node_myreports
node_app -->|"routes to"| node_assistant
node_app -->|"provides auth"| node_auth
node_auth -->|"authenticates with"| node_authservice
node_authservice -->|"stores token"| node_storage
node_authservice -->|"requests auth"| node_api
node_home -->|"loads sectors"| node_sectorservice
node_uptime -->|"loads uptime"| node_sectorservice
node_reportform -->|"resolves sector"| node_sectorservice
node_reportform -->|"submits report"| node_reportservice
node_reportform -->|"uploads photos"| node_fileservice
node_myreports -->|"loads reports"| node_reportservice
node_assistant -->|"sends questions"| node_assistantservice
node_sectorservice -->|"inherits requests"| node_base
node_reportservice -->|"inherits requests"| node_base
node_assistantservice -->|"inherits requests"| node_base
node_base -->|"sends HTTP"| node_api
node_sectorservice -->|"uses model"| node_sector
node_reportservice -->|"uses model"| node_report
node_assistantservice -.->|"sends questions"| node_api
node_base -->|"reads token"| node_token
node_base -->|"uses pagination"| node_pagination
node_authservice -->|"maps token"| node_token
node_authservice -->|"returns user"| node_user
node_auth -->|"tracks user"| node_user

click node_app "https://github.com/axelpepen/apagonrd/blob/master/src/AppRouting.tsx"
click node_auth "https://github.com/axelpepen/apagonrd/blob/master/src/contexts/AuthContext.tsx"
click node_authui "https://github.com/axelpepen/apagonrd/blob/master/src/modules/auth/AuthPage.tsx"
click node_landing "https://github.com/axelpepen/apagonrd/blob/master/src/modules/landingSite/LandingSite.tsx"
click node_home "https://github.com/axelpepen/apagonrd/blob/master/src/modules/home/HomePage.tsx"
click node_uptime "https://github.com/axelpepen/apagonrd/blob/master/src/modules/uptime/UptimeDashboardPage.tsx"
click node_reportform "https://github.com/axelpepen/apagonrd/blob/master/src/modules/ReportSector/ReportarPage.tsx"
click node_myreports "https://github.com/axelpepen/apagonrd/blob/master/src/modules/Reports/MisReportesPage.tsx"
click node_assistant "https://github.com/axelpepen/apagonrd/blob/master/src/modules/assistant/AssistantPage.tsx"
click node_sectorservice "https://github.com/axelpepen/apagonrd/blob/master/src/services/sector/SectorService.ts"
click node_reportservice "https://github.com/axelpepen/apagonrd/blob/master/src/services/report/ReportService.ts"
click node_fileservice "https://github.com/axelpepen/apagonrd/blob/master/src/services/file/FileService.ts"
click node_assistantservice "https://github.com/axelpepen/apagonrd/blob/master/src/services/assistant/AssistantService.ts"
click node_authservice "https://github.com/axelpepen/apagonrd/blob/master/src/services/auth/AuthService.ts"
click node_base "https://github.com/axelpepen/apagonrd/blob/master/src/services/BaseService.ts"
click node_sector "https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/sector/Sector.ts"
click node_report "https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/report/Report.ts"
click node_user "https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/user/user.ts"
click node_pagination "https://github.com/axelpepen/apagonrd/blob/master/src/domain/filters/Page.ts"
click node_token "https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/auth/Token.ts"
click node_storage "https://github.com/axelpepen/apagonrd/blob/master/src/utils/LocalStorage.ts"

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_app,node_auth,node_authui,node_landing toneBlue
class node_home,node_uptime toneAmber
class node_reportform,node_myreports,node_assistant,node_api toneMint
class node_sectorservice,node_reportservice,node_fileservice,node_assistantservice,node_authservice,node_base,node_storage toneRose
class node_sector,node_report,node_user,node_pagination,node_token,node_visitor toneIndigo
```

## Components

### App and access

- [App shell and routes](https://github.com/axelpepen/apagonrd/blob/master/src/AppRouting.tsx): `src/AppRouting.tsx`
- [Authentication state](https://github.com/axelpepen/apagonrd/blob/master/src/contexts/AuthContext.tsx): `src/contexts/AuthContext.tsx`
- [Sign-in and recovery](https://github.com/axelpepen/apagonrd/blob/master/src/modules/auth/AuthPage.tsx): `src/modules/auth/AuthPage.tsx`
- [Public landing site](https://github.com/axelpepen/apagonrd/blob/master/src/modules/landingSite/LandingSite.tsx): `src/modules/landingSite/LandingSite.tsx`

### Power information

- [Sector status map](https://github.com/axelpepen/apagonrd/blob/master/src/modules/home/HomePage.tsx): `src/modules/home/HomePage.tsx`
- [Uptime statistics](https://github.com/axelpepen/apagonrd/blob/master/src/modules/uptime/UptimeDashboardPage.tsx): `src/modules/uptime/UptimeDashboardPage.tsx`

### Community reports

- [Outage reporting](https://github.com/axelpepen/apagonrd/blob/master/src/modules/ReportSector/ReportarPage.tsx): `src/modules/ReportSector/ReportarPage.tsx`
- [My reports](https://github.com/axelpepen/apagonrd/blob/master/src/modules/Reports/MisReportesPage.tsx): `src/modules/Reports/MisReportesPage.tsx`
- [AI assistant](https://github.com/axelpepen/apagonrd/blob/master/src/modules/assistant/AssistantPage.tsx): `src/modules/assistant/AssistantPage.tsx`

### Backend services

- [Sector service](https://github.com/axelpepen/apagonrd/blob/master/src/services/sector/SectorService.ts): `src/services/sector/SectorService.ts`
- [Report service](https://github.com/axelpepen/apagonrd/blob/master/src/services/report/ReportService.ts): `src/services/report/ReportService.ts`
- [File service](https://github.com/axelpepen/apagonrd/blob/master/src/services/file/FileService.ts): `src/services/file/FileService.ts`
- [Assistant service](https://github.com/axelpepen/apagonrd/blob/master/src/services/assistant/AssistantService.ts): `src/services/assistant/AssistantService.ts`
- [Authentication service](https://github.com/axelpepen/apagonrd/blob/master/src/services/auth/AuthService.ts): `src/services/auth/AuthService.ts`
- [HTTP service layer](https://github.com/axelpepen/apagonrd/blob/master/src/services/BaseService.ts): `src/services/BaseService.ts`
- [Browser storage](https://github.com/axelpepen/apagonrd/blob/master/src/utils/LocalStorage.ts): `src/utils/LocalStorage.ts`

### Domain models

- [Sector and uptime models](https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/sector/Sector.ts): `src/domain/model/sector/Sector.ts`
- [Report model](https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/report/Report.ts): `src/domain/model/report/Report.ts`
- [User model](https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/user/user.ts): `src/domain/model/user/user.ts`
- [Pagination model](https://github.com/axelpepen/apagonrd/blob/master/src/domain/filters/Page.ts): `src/domain/filters/Page.ts`
- [Token model](https://github.com/axelpepen/apagonrd/blob/master/src/domain/model/auth/Token.ts): `src/domain/model/auth/Token.ts`

### Other components

- **Visitor**
- **ApagónRD backend API**

## Connections

- Visitor → App shell and routes: opens app (evidence: `src/AppRouting.tsx`)
- App shell and routes → Public landing site: routes to (evidence: `src/AppRouting.tsx`)
- App shell and routes → Sign-in and recovery: routes to (evidence: `src/AppRouting.tsx`)
- App shell and routes → Sector status map: routes to (evidence: `src/AppRouting.tsx`)
- App shell and routes → Uptime statistics: routes to (evidence: `src/AppRouting.tsx`)
- App shell and routes → Outage reporting: routes to (evidence: `src/AppRouting.tsx`)
- App shell and routes → My reports: routes to (evidence: `src/AppRouting.tsx`)
- App shell and routes → AI assistant: routes to (evidence: `src/AppRouting.tsx`)
- App shell and routes → Authentication state: provides auth (evidence: `src/App.tsx`)
- Authentication state → Authentication service: authenticates with (evidence: `src/contexts/AuthContext.tsx`)
- Authentication service → Browser storage: stores token (evidence: `src/services/auth/AuthService.ts`)
- Authentication service → ApagónRD backend API: requests auth (evidence: `src/services/auth/AuthService.ts`)
- Sector status map → Sector service: loads sectors (evidence: `src/modules/home/HomePage.tsx`)
- Uptime statistics → Sector service: loads uptime (evidence: `src/modules/uptime/UptimeDashboardPage.tsx`)
- Outage reporting → Sector service: resolves sector (evidence: `src/modules/ReportSector/ReportarPage.tsx`)
- Outage reporting → Report service: submits report (evidence: `src/modules/ReportSector/ReportarPage.tsx`)
- Outage reporting → File service: uploads photos (evidence: `src/modules/ReportSector/ReportarPage.tsx`)
- My reports → Report service: loads reports (evidence: `src/modules/Reports/MisReportesPage.tsx`)
- AI assistant → Assistant service: sends questions (evidence: `src/modules/assistant/AssistantPage.tsx`)
- Sector service → HTTP service layer: inherits requests (evidence: `src/services/sector/SectorService.ts`)
- Report service → HTTP service layer: inherits requests (evidence: `src/services/report/ReportService.ts`)
- Assistant service → HTTP service layer: inherits requests (evidence: `src/services/assistant/AssistantService.ts`)
- HTTP service layer → ApagónRD backend API: sends HTTP (evidence: `src/services/BaseService.ts`)
- Sector service → Sector and uptime models: uses model (evidence: `src/services/sector/SectorService.ts`)
- Report service → Report model: uses model (evidence: `src/services/report/ReportService.ts`)
- Assistant service → ApagónRD backend API: sends questions
- HTTP service layer → Token model: reads token (evidence: `src/services/BaseService.ts`)
- HTTP service layer → Pagination model: uses pagination (evidence: `src/services/BaseService.ts`)
- Authentication service → Token model: maps token (evidence: `src/services/auth/AuthService.ts`)
- Authentication service → User model: returns user (evidence: `src/services/auth/AuthService.ts`)
- Authentication state → User model: tracks user (evidence: `src/contexts/AuthContext.tsx`)
