# samu3l-mnzs/projetoping.com architecture

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

- Interactive diagram: https://gitdiagram.com/samu3l-mnzs/projetoping.com
- Repository: https://github.com/samu3l-mnzs/projetoping.com

## Overview

IFPB Projects is an Astro portal for browsing people and academic/research projects. Its principal workflow is to curate YAML records, validate them as content collections, derive person/project relationships and taxonomy tags, then present catalog pages with filters and search. The graph includes the documented search capability and the sampled shared taxonomy/UI layer. Page implementations and several listed components were not sampled, so those relationships are shown only as unverified where useful; the README also describes contributor-submitted updates through pull requests.

Main entry points: [`src/helpers/courses.ts`](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/courses.ts) (Course logic), [`src/helpers/people.ts`](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/people.ts) (People logic), [`src/components/Filter.tsx`](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/Filter.tsx) (Catalog filters), [`src/helpers/projects.ts`](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/projects.ts) (Project logic)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_content["Catalog content"]
  node_people_data[("People records")]
  node_project_data[("Project records")]
  node_course_data[("Course records")]
  node_subject_data[("Subject records")]
  node_collection_schema["Collection schemas<br/>[content.config.ts]"]
end

subgraph group_domain["Domain logic"]
  node_people_logic["People logic<br/>[people.ts]"]
  node_project_logic["Project logic<br/>[projects.ts]"]
  node_course_logic["Course logic<br/>[courses.ts]"]
  node_taxonomy["Taxonomy<br/>[taxonomy.ts]"]
end

subgraph group_interface["Catalog interface"]
  node_filter["Catalog filters<br/>[Filter.tsx]"]
  node_accordion["Filter accordion<br/>[Accordion.tsx]"]
  node_badge["Tag badge<br/>[Badge.tsx]"]
  node_people_views["People views<br/>[PersonGrid.astro]"]
  node_project_views["Project views<br/>[ProjectGrid.astro]"]
  node_catalog_pages["Catalog pages"]
end

subgraph group_discovery["Search and discovery"]
  node_static_search["Static search"]
  node_search_index[("Pagefind index")]
end

node_contributors(("Contributors"))

node_contributors -->|"contribute records"| node_people_data
node_contributors -->|"contribute records"| node_project_data
node_collection_schema -->|"uses codes"| node_taxonomy
node_people_logic -->|"reads collection"| node_people_data
node_project_logic -->|"reads collection"| node_project_data
node_course_logic -->|"reads collection"| node_course_data
node_course_logic -->|"uses occupation helpers"| node_people_logic
node_course_logic -->|"checks project type"| node_project_logic
node_course_logic -->|"uses taxonomy"| node_taxonomy
node_people_logic -->|"finds related projects"| node_project_logic
node_people_logic -->|"uses course helpers"| node_course_logic
node_project_logic -->|"finds project owners"| node_people_logic
node_filter -->|"looks up tags"| node_taxonomy
node_filter -->|"renders"| node_accordion
node_filter -->|"renders"| node_badge
node_catalog_pages -.->|"offers filtering"| node_filter
node_catalog_pages -.->|"presents people"| node_people_views
node_catalog_pages -.->|"presents projects"| node_project_views
node_static_search -.->|"searches"| node_search_index

click node_people_data "https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/people"
click node_project_data "https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/projects"
click node_course_data "https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/courses"
click node_subject_data "https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/subjects"
click node_collection_schema "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/content.config.ts"
click node_people_logic "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/people.ts"
click node_project_logic "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/projects.ts"
click node_course_logic "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/courses.ts"
click node_taxonomy "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/lib/taxonomy.ts"
click node_filter "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/Filter.tsx"
click node_accordion "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/Accordion.tsx"
click node_badge "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/Badge.tsx"
click node_people_views "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/PersonGrid.astro"
click node_project_views "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/ProjectGrid.astro"
click node_catalog_pages "https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/pages"
click node_static_search "https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/PageFindSearch.astro"

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_people_data,node_project_data,node_course_data,node_subject_data,node_collection_schema toneBlue
class node_people_logic,node_project_logic,node_course_logic,node_taxonomy toneAmber
class node_filter,node_accordion,node_badge,node_people_views,node_project_views,node_catalog_pages toneMint
class node_static_search,node_search_index toneRose
class node_contributors toneIndigo
```

## Components

### Catalog content

- [People records](https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/people): `src/content/people`
- [Project records](https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/projects): `src/content/projects`
- [Course records](https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/courses): `src/content/courses`
- [Subject records](https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/content/subjects): `src/content/subjects`
- [Collection schemas](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/content.config.ts): `src/content.config.ts`

### Domain logic

- [People logic](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/people.ts): `src/helpers/people.ts`
- [Project logic](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/projects.ts): `src/helpers/projects.ts`
- [Course logic](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/helpers/courses.ts): `src/helpers/courses.ts`
- [Taxonomy](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/lib/taxonomy.ts): `src/lib/taxonomy.ts`

### Catalog interface

- [Catalog filters](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/Filter.tsx): `src/components/Filter.tsx`
- [Filter accordion](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/Accordion.tsx): `src/components/Accordion.tsx`
- [Tag badge](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/Badge.tsx): `src/components/Badge.tsx`
- [People views](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/PersonGrid.astro): `src/components/PersonGrid.astro`
- [Project views](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/ProjectGrid.astro): `src/components/ProjectGrid.astro`
- [Catalog pages](https://github.com/samu3l-mnzs/projetoping.com/tree/main/src/pages): `src/pages`

### Search and discovery

- [Static search](https://github.com/samu3l-mnzs/projetoping.com/blob/main/src/components/PageFindSearch.astro): `src/components/PageFindSearch.astro`
- **Pagefind index**

### Other components

- **Contributors**

## Connections

- Contributors → People records: contribute records (evidence: `README.md`)
- Contributors → Project records: contribute records (evidence: `README.md`)
- Collection schemas → Taxonomy: uses codes (evidence: `src/content.config.ts`)
- People logic → People records: reads collection (evidence: `src/helpers/people.ts`)
- Project logic → Project records: reads collection (evidence: `src/helpers/projects.ts`)
- Course logic → Course records: reads collection (evidence: `src/helpers/courses.ts`)
- Course logic → People logic: uses occupation helpers (evidence: `src/helpers/courses.ts`)
- Course logic → Project logic: checks project type (evidence: `src/helpers/courses.ts`)
- Course logic → Taxonomy: uses taxonomy (evidence: `src/helpers/courses.ts`)
- People logic → Project logic: finds related projects (evidence: `src/helpers/people.ts`)
- People logic → Course logic: uses course helpers (evidence: `src/helpers/people.ts`)
- Project logic → People logic: finds project owners (evidence: `src/helpers/projects.ts`)
- Catalog filters → Taxonomy: looks up tags (evidence: `src/components/Filter.tsx`)
- Catalog filters → Filter accordion: renders (evidence: `src/components/Filter.tsx`)
- Catalog filters → Tag badge: renders (evidence: `src/components/Filter.tsx`)
- Catalog pages → Catalog filters: offers filtering
- Catalog pages → People views: presents people
- Catalog pages → Project views: presents projects
- Static search → Pagefind index: searches
