# anang-programmer/pilar-submission architecture

> Architecture diagram of the GitHub repository anang-programmer/pilar-submission, 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/anang-programmer/pilar-submission
- Repository: https://github.com/anang-programmer/pilar-submission

## Overview

PILAR is a role-based academic article review system. Participants submit articles and revisions; reviewers handle assigned reviews and recommendations; administrators monitor the workflow and manage its people and academic configuration. Frontend role pages call a shared API client, while the FastAPI application dispatches to role-specific routes and Supabase-backed services. The tree and sampled excerpts support the broad role capabilities, but most route implementations and frontend API bindings were not inspected, so those detailed links are omitted.

Main entry points: [`frontend/lib/api.ts`](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/lib/api.ts) (API client), [`backend/app/deps.py`](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/deps.py) (Auth dependencies), [`backend/app/main.py`](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/main.py) (FastAPI application), [`backend/app/routes/reviewer.py`](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/reviewer.py) (Reviewer routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_login["Login<br/>[page.tsx]"]
  node_protected["Role protection<br/>[Protected.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
  node_admin_ui["Admin workspace<br/>[page.tsx]"]
  node_participant_ui["Participant workspace<br/>[page.tsx]"]
  node_reviewer_ui["Reviewer workspace<br/>[layout.tsx]"]
  node_articles_ui["Article monitoring<br/>[page.tsx]"]
end

subgraph group_backend["API and access"]
  node_app["FastAPI application<br/>[main.py]"]
  node_auth_routes["Authentication routes<br/>[auth.py]"]
  node_admin_routes["Administration routes<br/>[admin.py]"]
  node_participant_routes["Participant routes<br/>[peserta.py]"]
  node_reviewer_routes["Reviewer routes<br/>[reviewer.py]"]
  node_access["Auth dependencies<br/>[deps.py]"]
  node_security["Token security<br/>[security.py]"]
  node_schemas["API schemas<br/>[schemas.py]"]
end

subgraph group_workflow["Article workflow"]
  node_article_lifecycle["Submit and revise<br/>[page.tsx]"]
  node_review_lifecycle["Assigned review<br/>[reviewer.py]"]
  node_admin_monitoring["Workflow monitoring<br/>[page.tsx]"]
end

subgraph group_platform["Identity and persistence"]
  node_supabase_client["Supabase client<br/>[supabase.py]"]
  node_supabase_auth["Supabase Auth<br/>[supabase.ts]"]
  node_supabase_store[("Supabase data")]
  node_article_storage[("Article storage")]
end

node_user(("User"))

node_user -->|"signs in"| node_login
node_login -->|"resolves username"| node_api_client
node_login -->|"authenticates"| node_supabase_auth
node_protected -->|"checks session"| node_supabase_auth
node_protected -->|"loads identity"| node_api_client
node_admin_ui -->|"requests admin data"| node_api_client
node_participant_ui -->|"requests participant data"| node_api_client
node_reviewer_ui -->|"prefetches review data"| node_api_client
node_articles_ui -->|"requests article data"| node_api_client
node_api_client -->|"sends API requests"| node_app
node_app -->|"dispatches"| node_auth_routes
node_app -->|"dispatches"| node_admin_routes
node_app -->|"dispatches"| node_participant_routes
node_app -->|"dispatches"| node_reviewer_routes
node_auth_routes -->|"depends on"| node_access
node_admin_routes -->|"depends on"| node_access
node_participant_routes -->|"depends on"| node_access
node_reviewer_routes -->|"depends on"| node_access
node_access -->|"uses"| node_security
node_access -->|"obtains service client"| node_supabase_client
node_auth_routes -->|"queries users"| node_supabase_client
node_reviewer_routes -->|"loads and saves reviews"| node_supabase_client
node_reviewer_routes -->|"creates signed links"| node_article_storage
node_supabase_client -->|"queries"| node_supabase_store
node_article_lifecycle -->|"submits articles"| node_participant_routes
node_review_lifecycle -->|"handles assignments"| node_reviewer_routes
node_admin_monitoring -->|"monitors workflow"| node_admin_routes

click node_login "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/login/page.tsx"
click node_protected "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/components/Protected.tsx"
click node_api_client "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/lib/api.ts"
click node_admin_ui "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/admin/page.tsx"
click node_participant_ui "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/peserta/page.tsx"
click node_reviewer_ui "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/reviewer/layout.tsx"
click node_articles_ui "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/admin/artikel/page.tsx"
click node_app "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/main.py"
click node_auth_routes "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/auth.py"
click node_admin_routes "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/admin.py"
click node_participant_routes "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/peserta.py"
click node_reviewer_routes "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/reviewer.py"
click node_access "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/deps.py"
click node_security "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/security.py"
click node_schemas "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/schemas.py"
click node_article_lifecycle "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/peserta/upload-artikel/page.tsx"
click node_review_lifecycle "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/reviewer.py"
click node_admin_monitoring "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/admin/monitoring-review/page.tsx"
click node_supabase_client "https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/supabase.py"
click node_supabase_auth "https://github.com/anang-programmer/pilar-submission/blob/main/frontend/lib/supabase.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_login,node_protected,node_api_client,node_admin_ui,node_participant_ui,node_reviewer_ui,node_articles_ui,node_user toneBlue
class node_app,node_auth_routes,node_admin_routes,node_participant_routes,node_reviewer_routes,node_access,node_security,node_schemas toneAmber
class node_article_lifecycle,node_review_lifecycle,node_admin_monitoring toneMint
class node_supabase_client,node_supabase_auth,node_supabase_store,node_article_storage toneRose
```

## Components

### Web application

- [Login](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/login/page.tsx): `frontend/app/login/page.tsx`
- [Role protection](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/components/Protected.tsx): `frontend/components/Protected.tsx`
- [API client](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/lib/api.ts): `frontend/lib/api.ts`
- [Admin workspace](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/admin/page.tsx): `frontend/app/admin/page.tsx`
- [Participant workspace](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/peserta/page.tsx): `frontend/app/peserta/page.tsx`
- [Reviewer workspace](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/reviewer/layout.tsx): `frontend/app/reviewer/layout.tsx`
- [Article monitoring](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/admin/artikel/page.tsx): `frontend/app/admin/artikel/page.tsx`

### API and access

- [FastAPI application](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/main.py): `backend/app/main.py`
- [Authentication routes](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/auth.py): `backend/app/routes/auth.py`
- [Administration routes](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/admin.py): `backend/app/routes/admin.py`
- [Participant routes](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/peserta.py): `backend/app/routes/peserta.py`
- [Reviewer routes](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/reviewer.py): `backend/app/routes/reviewer.py`
- [Auth dependencies](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/deps.py): `backend/app/deps.py`
- [Token security](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/security.py): `backend/app/security.py`
- [API schemas](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/schemas.py): `backend/app/schemas.py`

### Article workflow

- [Submit and revise](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/peserta/upload-artikel/page.tsx): `frontend/app/peserta/upload-artikel/page.tsx`
- [Assigned review](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/routes/reviewer.py): `backend/app/routes/reviewer.py`
- [Workflow monitoring](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/app/admin/monitoring-review/page.tsx): `frontend/app/admin/monitoring-review/page.tsx`

### Identity and persistence

- [Supabase client](https://github.com/anang-programmer/pilar-submission/blob/main/backend/app/supabase.py): `backend/app/supabase.py`
- [Supabase Auth](https://github.com/anang-programmer/pilar-submission/blob/main/frontend/lib/supabase.ts): `frontend/lib/supabase.ts`
- **Supabase data**
- **Article storage**

### Other components

- **User**

## Connections

- User → Login: signs in
- Login → API client: resolves username
- Login → Supabase Auth: authenticates
- Role protection → Supabase Auth: checks session
- Role protection → API client: loads identity
- Admin workspace → API client: requests admin data
- Participant workspace → API client: requests participant data
- Reviewer workspace → API client: prefetches review data
- Article monitoring → API client: requests article data
- API client → FastAPI application: sends API requests
- FastAPI application → Authentication routes: dispatches
- FastAPI application → Administration routes: dispatches
- FastAPI application → Participant routes: dispatches
- FastAPI application → Reviewer routes: dispatches
- Authentication routes → Auth dependencies: depends on
- Administration routes → Auth dependencies: depends on
- Participant routes → Auth dependencies: depends on
- Reviewer routes → Auth dependencies: depends on
- Auth dependencies → Token security: uses
- Auth dependencies → Supabase client: obtains service client
- Authentication routes → Supabase client: queries users
- Reviewer routes → Supabase client: loads and saves reviews
- Reviewer routes → Article storage: creates signed links
- Supabase client → Supabase data: queries
- Submit and revise → Participant routes: submits articles
- Assigned review → Reviewer routes: handles assignments
- Workflow monitoring → Administration routes: monitors workflow
