# anzar-g/verilex architecture

> Architecture diagram of the GitHub repository anzar-g/verilex, 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/anzar-g/verilex
- Repository: https://github.com/anzar-g/verilex

## Overview

VeriLex is a reference and learning platform for Latin legal maxims. Its main workflow is to search and filter the maxim catalogue, open an article for detailed legal context, then optionally save or study it. Separate branches support quizzes, user progress, discussion, and editorial contributions with reviewer approval. The README documents additional features such as flashcards, favorites, and text-to-speech; those are represented where the repository tree supports a relevant page or module. Source excerpts are partial, so some subsystem wiring is not shown.

Main entry points: [`src/app/api/maxims/[id]/route.ts`](https://github.com/anzar-g/verilex/blob/main/src/app/api/maxims/%5Bid%5D/route.ts) (Maxim Detail API), [`src/app/cari/SearchPageClient.tsx`](https://github.com/anzar-g/verilex/blob/main/src/app/cari/SearchPageClient.tsx) (Search and Index), [`src/app/maksim/[id]/MaximDetailClient.tsx`](https://github.com/anzar-g/verilex/blob/main/src/app/maksim/%5Bid%5D/MaximDetailClient.tsx) (Maxim Detail), [`src/app/api/quiz/route.ts`](https://github.com/anzar-g/verilex/blob/main/src/app/api/quiz/route.ts) (Quiz API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Maxim Reference"]
  node_home["Homepage<br/>[page.tsx]"]
  node_search["Search and Index"]
  node_fields["Legal Fields<br/>[route.ts]"]
  node_maxim_list["Maxim Catalogue API<br/>[route.ts]"]
  node_detail["Maxim Detail"]
  node_detail_api["Maxim Detail API<br/>[route.ts]"]
  node_discussions["Article Discussions<br/>[route.ts]"]
end

subgraph group_learning["Learning"]
  node_flashcards["Flashcards"]
  node_quiz_ui["Quiz Experience<br/>[QuizClient.tsx]"]
  node_quiz_api["Quiz API<br/>[route.ts]"]
end

subgraph group_accounts["User Accounts"]
  node_dashboard["Personal Dashboard"]
  node_favorites["Favorites<br/>[FavoritClient.tsx]"]
  node_auth["Authentication<br/>[AuthProvider.tsx]"]
  node_store["User State<br/>[useStore.ts]"]
end

subgraph group_governance["Editorial Governance"]
  node_reports["Content Reports<br/>[route.ts]"]
  node_contributions["Contribution Workspace"]
  node_proposals["Proposal API<br/>[route.ts]"]
  node_reviewer["Reviewer Dashboard"]
  node_proposal_review["Proposal Review API<br/>[route.ts]"]
  node_revisions["Revision History"]
end

subgraph group_data["Data Services"]
  node_supabase[("Supabase")]
  node_auth_api["API Authentication<br/>[api-auth.ts]"]
  node_api_fetch["API Fetch<br/>[api-fetch.ts]"]
end

node_visitor(("Reader"))

node_visitor -->|"opens platform"| node_home
node_visitor -->|"searches maxims"| node_search
node_search -->|"requests filtered catalogue"| node_maxim_list
node_search -->|"loads field filters"| node_fields
node_search -->|"opens maxim"| node_detail
node_detail -->|"loads article"| node_detail_api
node_detail_api -->|"reads maxim"| node_supabase
node_maxim_list -->|"queries catalogue"| node_supabase
node_fields -->|"counts fields"| node_supabase
node_detail -->|"loads or posts discussion"| node_discussions
node_detail -->|"submits report"| node_reports
node_visitor -->|"studies maxims"| node_flashcards
node_flashcards -.->|"loads study catalogue"| node_maxim_list
node_visitor -->|"takes quiz"| node_quiz_ui
node_quiz_ui -->|"requests questions and submits answers"| node_quiz_api
node_quiz_api -->|"checks actor"| node_auth_api
node_quiz_api -->|"reads questions and saves attempts"| node_supabase
node_visitor -->|"registers or signs in"| node_auth
node_auth -->|"authenticates user"| node_supabase
node_dashboard -->|"reads user state"| node_store
node_favorites -->|"updates favorites"| node_store
node_visitor -->|"submits edit"| node_contributions
node_contributions -->|"creates proposal"| node_proposals
node_proposals -->|"checks contributor role"| node_auth_api
node_proposals -->|"stores proposal"| node_supabase
node_reviewer -->|"fetches review queue"| node_api_fetch
node_reviewer -->|"updates proposal status"| node_proposal_review
node_proposal_review -->|"reviews proposal"| node_supabase
node_proposal_review -.->|"applies approved edits"| node_detail_api
node_detail_api -->|"records revision and updates maxim"| node_supabase
node_revisions -.->|"uses revision endpoints"| node_detail_api

click node_home "https://github.com/anzar-g/verilex/blob/main/src/app/page.tsx"
click node_search "https://github.com/anzar-g/verilex/blob/main/src/app/cari/SearchPageClient.tsx"
click node_fields "https://github.com/anzar-g/verilex/blob/main/src/app/api/legal-fields/route.ts"
click node_maxim_list "https://github.com/anzar-g/verilex/blob/main/src/app/api/maxims/route.ts"
click node_detail "https://github.com/anzar-g/verilex/blob/main/src/app/maksim/%5Bid%5D/MaximDetailClient.tsx"
click node_detail_api "https://github.com/anzar-g/verilex/blob/main/src/app/api/maxims/%5Bid%5D/route.ts"
click node_discussions "https://github.com/anzar-g/verilex/blob/main/src/app/api/discussions/route.ts"
click node_reports "https://github.com/anzar-g/verilex/blob/main/src/app/api/reports/route.ts"
click node_flashcards "https://github.com/anzar-g/verilex/blob/main/src/app/flashcard/FlashcardClient.tsx"
click node_quiz_ui "https://github.com/anzar-g/verilex/blob/main/src/app/quiz/QuizClient.tsx"
click node_quiz_api "https://github.com/anzar-g/verilex/blob/main/src/app/api/quiz/route.ts"
click node_dashboard "https://github.com/anzar-g/verilex/blob/main/src/app/dashboard/DashboardClient.tsx"
click node_favorites "https://github.com/anzar-g/verilex/blob/main/src/app/favorit/FavoritClient.tsx"
click node_auth "https://github.com/anzar-g/verilex/blob/main/src/components/auth/AuthProvider.tsx"
click node_store "https://github.com/anzar-g/verilex/blob/main/src/lib/useStore.ts"
click node_contributions "https://github.com/anzar-g/verilex/blob/main/src/app/kontribusi/ContributionsClient.tsx"
click node_proposals "https://github.com/anzar-g/verilex/blob/main/src/app/api/proposals/route.ts"
click node_reviewer "https://github.com/anzar-g/verilex/blob/main/src/app/reviewer/ReviewerDashboardClient.tsx"
click node_proposal_review "https://github.com/anzar-g/verilex/blob/main/src/app/api/proposals/%5Bid%5D/route.ts"
click node_revisions "https://github.com/anzar-g/verilex/blob/main/src/components/edit/RevisionHistory.tsx"
click node_auth_api "https://github.com/anzar-g/verilex/blob/main/src/lib/api-auth.ts"
click node_api_fetch "https://github.com/anzar-g/verilex/blob/main/src/lib/api-fetch.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_home,node_search,node_fields,node_maxim_list,node_detail,node_detail_api,node_discussions toneBlue
class node_flashcards,node_quiz_ui,node_quiz_api toneAmber
class node_dashboard,node_favorites,node_auth,node_store toneMint
class node_reports,node_contributions,node_proposals,node_reviewer,node_proposal_review,node_revisions toneRose
class node_supabase,node_auth_api,node_api_fetch,node_visitor toneIndigo
```

## Components

### Maxim Reference

- [Homepage](https://github.com/anzar-g/verilex/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Search and Index](https://github.com/anzar-g/verilex/blob/main/src/app/cari/SearchPageClient.tsx): `src/app/cari/SearchPageClient.tsx`
- [Legal Fields](https://github.com/anzar-g/verilex/blob/main/src/app/api/legal-fields/route.ts): `src/app/api/legal-fields/route.ts`
- [Maxim Catalogue API](https://github.com/anzar-g/verilex/blob/main/src/app/api/maxims/route.ts): `src/app/api/maxims/route.ts`
- [Maxim Detail](https://github.com/anzar-g/verilex/blob/main/src/app/maksim/%5Bid%5D/MaximDetailClient.tsx): `src/app/maksim/[id]/MaximDetailClient.tsx`
- [Maxim Detail API](https://github.com/anzar-g/verilex/blob/main/src/app/api/maxims/%5Bid%5D/route.ts): `src/app/api/maxims/[id]/route.ts`
- [Article Discussions](https://github.com/anzar-g/verilex/blob/main/src/app/api/discussions/route.ts): `src/app/api/discussions/route.ts`

### Learning

- [Flashcards](https://github.com/anzar-g/verilex/blob/main/src/app/flashcard/FlashcardClient.tsx): `src/app/flashcard/FlashcardClient.tsx`
- [Quiz Experience](https://github.com/anzar-g/verilex/blob/main/src/app/quiz/QuizClient.tsx): `src/app/quiz/QuizClient.tsx`
- [Quiz API](https://github.com/anzar-g/verilex/blob/main/src/app/api/quiz/route.ts): `src/app/api/quiz/route.ts`

### User Accounts

- [Personal Dashboard](https://github.com/anzar-g/verilex/blob/main/src/app/dashboard/DashboardClient.tsx): `src/app/dashboard/DashboardClient.tsx`
- [Favorites](https://github.com/anzar-g/verilex/blob/main/src/app/favorit/FavoritClient.tsx): `src/app/favorit/FavoritClient.tsx`
- [Authentication](https://github.com/anzar-g/verilex/blob/main/src/components/auth/AuthProvider.tsx): `src/components/auth/AuthProvider.tsx`
- [User State](https://github.com/anzar-g/verilex/blob/main/src/lib/useStore.ts): `src/lib/useStore.ts`

### Editorial Governance

- [Content Reports](https://github.com/anzar-g/verilex/blob/main/src/app/api/reports/route.ts): `src/app/api/reports/route.ts`
- [Contribution Workspace](https://github.com/anzar-g/verilex/blob/main/src/app/kontribusi/ContributionsClient.tsx): `src/app/kontribusi/ContributionsClient.tsx`
- [Proposal API](https://github.com/anzar-g/verilex/blob/main/src/app/api/proposals/route.ts): `src/app/api/proposals/route.ts`
- [Reviewer Dashboard](https://github.com/anzar-g/verilex/blob/main/src/app/reviewer/ReviewerDashboardClient.tsx): `src/app/reviewer/ReviewerDashboardClient.tsx`
- [Proposal Review API](https://github.com/anzar-g/verilex/blob/main/src/app/api/proposals/%5Bid%5D/route.ts): `src/app/api/proposals/[id]/route.ts`
- [Revision History](https://github.com/anzar-g/verilex/blob/main/src/components/edit/RevisionHistory.tsx): `src/components/edit/RevisionHistory.tsx`

### Data Services

- **Supabase**
- [API Authentication](https://github.com/anzar-g/verilex/blob/main/src/lib/api-auth.ts): `src/lib/api-auth.ts`
- [API Fetch](https://github.com/anzar-g/verilex/blob/main/src/lib/api-fetch.ts): `src/lib/api-fetch.ts`

### Other components

- **Reader**

## Connections

- Reader → Homepage: opens platform
- Reader → Search and Index: searches maxims
- Search and Index → Maxim Catalogue API: requests filtered catalogue
- Search and Index → Legal Fields: loads field filters
- Search and Index → Maxim Detail: opens maxim
- Maxim Detail → Maxim Detail API: loads article
- Maxim Detail API → Supabase: reads maxim
- Maxim Catalogue API → Supabase: queries catalogue
- Legal Fields → Supabase: counts fields
- Maxim Detail → Article Discussions: loads or posts discussion
- Maxim Detail → Content Reports: submits report
- Reader → Flashcards: studies maxims
- Flashcards → Maxim Catalogue API: loads study catalogue
- Reader → Quiz Experience: takes quiz
- Quiz Experience → Quiz API: requests questions and submits answers
- Quiz API → API Authentication: checks actor
- Quiz API → Supabase: reads questions and saves attempts
- Reader → Authentication: registers or signs in
- Authentication → Supabase: authenticates user
- Personal Dashboard → User State: reads user state
- Favorites → User State: updates favorites
- Reader → Contribution Workspace: submits edit
- Contribution Workspace → Proposal API: creates proposal
- Proposal API → API Authentication: checks contributor role
- Proposal API → Supabase: stores proposal
- Reviewer Dashboard → API Fetch: fetches review queue
- Reviewer Dashboard → Proposal Review API: updates proposal status
- Proposal Review API → Supabase: reviews proposal
- Proposal Review API → Maxim Detail API: applies approved edits
- Maxim Detail API → Supabase: records revision and updates maxim
- Revision History → Maxim Detail API: uses revision endpoints
