# jonas-ferper/leituradiaria-mescepicos architecture

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

- Interactive diagram: https://gitdiagram.com/jonas-ferper/leituradiaria-mescepicos
- Repository: https://github.com/jonas-ferper/leituradiaria-mescepicos

## Overview

Calendário Litúrgico Perpétuo é uma aplicação web para consultar celebrações e leituras por dia, mês ou data atual. O percurso principal vai da navegação no calendário à apresentação dos dados litúrgicos: páginas pedem o índice e o mês, a camada de dados obtém e valida os JSON publicados, e a vista do dia apresenta celebração e leituras. O produto também oferece navegação entre datas, rádio MESCE e funcionamento offline documentado. As ligações de hooks e páginas seguem os imports e usos visíveis; detalhes internos não amostrados foram omitidos.

Main entry points: [`src/App.jsx`](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/App.jsx) (Rotas da aplicação), [`src/components/VistaDia.jsx`](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/VistaDia.jsx) (Vista do dia), [`src/lib/clp/hooks.js`](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/hooks.js) (Hooks de dados), [`src/pages/HomePage.jsx`](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/HomePage.jsx) (Calendário geral)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Navegação e páginas"]
  node_entry["Entrada React<br/>[main.jsx]"]
  node_app["Rotas da aplicação<br/>[App.jsx]"]
  node_layout["Moldura e navegação<br/>[Layout.jsx]"]
  node_today["Página de hoje<br/>[HojePage.jsx]"]
  node_calendar["Calendário geral<br/>[HomePage.jsx]"]
  node_monthpage["Página do mês<br/>[MesPage.jsx]"]
  node_daypage["Página do dia<br/>[DiaPage.jsx]"]
end

subgraph group_presentation["Apresentação litúrgica"]
  node_calendarview["Grade do calendário<br/>[CalendarioMes.jsx]"]
  node_dayview["Vista do dia<br/>[VistaDia.jsx]"]
  node_lectionary["Leituras<br/>[Lecionario.jsx]"]
end

subgraph group_data["Dados e validação"]
  node_hooks["Hooks de dados<br/>[hooks.js]"]
  node_store["Índice e cache<br/>[data.js]"]
  node_fetcher["Leitura de dados<br/>[fetcher.js]"]
  node_validator["Validação litúrgica<br/>[validar.js]"]
  node_catalog["Catálogo publicado<br/>[catalogo.json]"]
  node_monthdata["Dados mensais"]
end

subgraph group_offline["Rádio e offline"]
  node_radio(("Rádio MESCE"))
  node_pwa["Cache offline<br/>[vite.config.js]"]
end

node_visitor(("Pessoa visitante"))
node_browser(("Navegador"))

node_visitor -->|"navega"| node_browser
node_browser -->|"abre aplicação"| node_entry
node_entry -->|"renderiza"| node_app
node_app -->|"aplica rotas"| node_layout
node_app -->|"seleciona rota"| node_today
node_app -->|"seleciona rota"| node_calendar
node_app -->|"seleciona rota"| node_monthpage
node_app -->|"seleciona rota"| node_daypage
node_layout -.->|"reproduz áudio"| node_radio
node_today -->|"solicita dados"| node_hooks
node_calendar -->|"solicita dados"| node_hooks
node_monthpage -->|"solicita dados"| node_hooks
node_daypage -->|"solicita dados"| node_hooks
node_hooks -->|"consulta estado"| node_store
node_store -->|"solicita dados"| node_fetcher
node_fetcher -->|"lê índice"| node_catalog
node_fetcher -->|"lê mês"| node_monthdata
node_store -->|"valida dados"| node_validator
node_calendar -->|"renderiza calendário"| node_calendarview
node_today -->|"apresenta dia"| node_dayview
node_monthpage -->|"apresenta dia"| node_dayview
node_daypage -->|"apresenta dia"| node_dayview
node_calendar -->|"apresenta seleção"| node_dayview
node_dayview -->|"apresenta leituras"| node_lectionary
node_browser -.->|"usa cache offline"| node_pwa

click node_entry "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/main.jsx"
click node_app "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/App.jsx"
click node_layout "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/Layout.jsx"
click node_today "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/HojePage.jsx"
click node_calendar "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/HomePage.jsx"
click node_monthpage "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/MesPage.jsx"
click node_daypage "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/DiaPage.jsx"
click node_hooks "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/hooks.js"
click node_store "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/data.js"
click node_fetcher "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/fetcher.js"
click node_validator "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/validar.js"
click node_catalog "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/public/api/site/catalogo.json"
click node_monthdata "https://github.com/jonas-ferper/leituradiaria-mescepicos/tree/main/public/api/site/calendario/2026"
click node_calendarview "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/CalendarioMes.jsx"
click node_dayview "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/VistaDia.jsx"
click node_lectionary "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/Lecionario.jsx"
click node_pwa "https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/vite.config.js"

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_entry,node_app,node_layout,node_today,node_calendar,node_monthpage,node_daypage toneBlue
class node_calendarview,node_dayview,node_lectionary toneAmber
class node_hooks,node_store,node_fetcher,node_validator,node_catalog,node_monthdata toneMint
class node_radio,node_pwa toneRose
class node_visitor,node_browser toneIndigo
```

## Components

### Navegação e páginas

- [Entrada React](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/main.jsx): `src/main.jsx`
- [Rotas da aplicação](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/App.jsx): `src/App.jsx`
- [Moldura e navegação](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/Layout.jsx): `src/components/Layout.jsx`
- [Página de hoje](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/HojePage.jsx): `src/pages/HojePage.jsx`
- [Calendário geral](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/HomePage.jsx): `src/pages/HomePage.jsx`
- [Página do mês](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/MesPage.jsx): `src/pages/MesPage.jsx`
- [Página do dia](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/pages/DiaPage.jsx): `src/pages/DiaPage.jsx`

### Apresentação litúrgica

- [Grade do calendário](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/CalendarioMes.jsx): `src/components/CalendarioMes.jsx`
- [Vista do dia](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/VistaDia.jsx): `src/components/VistaDia.jsx`
- [Leituras](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/components/Lecionario.jsx): `src/components/Lecionario.jsx`

### Dados e validação

- [Hooks de dados](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/hooks.js): `src/lib/clp/hooks.js`
- [Índice e cache](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/data.js): `src/lib/clp/data.js`
- [Leitura de dados](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/fetcher.js): `src/lib/clp/fetcher.js`
- [Validação litúrgica](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/src/lib/clp/validar.js): `src/lib/clp/validar.js`
- [Catálogo publicado](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/public/api/site/catalogo.json): `public/api/site/catalogo.json`
- [Dados mensais](https://github.com/jonas-ferper/leituradiaria-mescepicos/tree/main/public/api/site/calendario/2026): `public/api/site/calendario/2026`

### Rádio e offline

- **Rádio MESCE**
- [Cache offline](https://github.com/jonas-ferper/leituradiaria-mescepicos/blob/main/vite.config.js): `vite.config.js`

### Other components

- **Pessoa visitante**
- **Navegador**

## Connections

- Pessoa visitante → Navegador: navega
- Navegador → Entrada React: abre aplicação
- Entrada React → Rotas da aplicação: renderiza
- Rotas da aplicação → Moldura e navegação: aplica rotas
- Rotas da aplicação → Página de hoje: seleciona rota
- Rotas da aplicação → Calendário geral: seleciona rota
- Rotas da aplicação → Página do mês: seleciona rota
- Rotas da aplicação → Página do dia: seleciona rota
- Moldura e navegação → Rádio MESCE: reproduz áudio
- Página de hoje → Hooks de dados: solicita dados
- Calendário geral → Hooks de dados: solicita dados
- Página do mês → Hooks de dados: solicita dados
- Página do dia → Hooks de dados: solicita dados
- Hooks de dados → Índice e cache: consulta estado
- Índice e cache → Leitura de dados: solicita dados
- Leitura de dados → Catálogo publicado: lê índice
- Leitura de dados → Dados mensais: lê mês
- Índice e cache → Validação litúrgica: valida dados
- Calendário geral → Grade do calendário: renderiza calendário
- Página de hoje → Vista do dia: apresenta dia
- Página do mês → Vista do dia: apresenta dia
- Página do dia → Vista do dia: apresenta dia
- Calendário geral → Vista do dia: apresenta seleção
- Vista do dia → Leituras: apresenta leituras
- Navegador → Cache offline: usa cache offline
