# vigneshrdy/sih-ps-archive architecture

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

- Interactive diagram: https://gitdiagram.com/vigneshrdy/sih-ps-archive
- Repository: https://github.com/vigneshrdy/sih-ps-archive

## Overview

SIH Problem Statement Archive combines a plain-Markdown corpus with a web selection desk. Visitors browse and search statements; signed-in users can shortlist them, add private notes, form six-member teams, comment, and vote. The sampled code shows statement parsing and public API routes, plus authentication, session, team, review, and comment handling over a PostgreSQL layer. The README documents the app’s broader workflow; app.js and some feature wiring were not excerpted, so those connections are not inferred.

Main entry points: [`lib/http.js`](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/http.js) (HTTP utilities), [`lib/session.js`](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/session.js) (Session services), [`lib/statements.js`](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/statements.js) (Statement parser), [`lib/db.js`](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/db.js) (Database access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_archive["Statement archive"]
  node_corpus["2026 statements"]
  node_statement_data["Statement parser<br/>[statements.js]"]
end

subgraph group_web["Web experience"]
  node_app["Selection desk<br/>[app.js]"]
end

subgraph group_api["Application API"]
  node_problem_api["Problem list API<br/>[index.js]"]
  node_statement_page["Statement pages<br/>[statement.js]"]
  node_sitemap["Sitemap<br/>[sitemap.js]"]
  node_reviews["Reviews and votes<br/>[reviews.js]"]
  node_comments["Team comments<br/>[index.js]"]
  node_http["HTTP utilities<br/>[http.js]"]
end

subgraph group_identity["Identity and teams"]
  node_auth_api["Authentication API<br/>[auth.js]"]
  node_refresh_api["Session refresh API<br/>[refresh.js]"]
  node_session["Session services<br/>[session.js]"]
  node_team_api["Team management<br/>[team.js]"]
end

subgraph group_storage["Persistence"]
  node_db[("Database access<br/>[db.js]")]
  node_schema["Database schema<br/>[schema.sql]"]
end

node_visitor(("Visitor"))
node_auth_service["Supabase Auth"]

node_visitor -->|"browses"| node_app
node_app -->|"reads statements"| node_corpus
node_problem_api -->|"loads list"| node_statement_data
node_statement_page -->|"loads pages"| node_statement_data
node_sitemap -->|"loads entries"| node_statement_data
node_statement_data -->|"parses Markdown"| node_corpus
node_auth_api -->|"calls auth"| node_session
node_refresh_api -->|"rotates session"| node_session
node_team_api -->|"checks access"| node_session
node_reviews -->|"checks access"| node_session
node_comments -->|"checks access"| node_session
node_session -->|"verifies and refreshes"| node_auth_service
node_session -->|"queries sessions"| node_db
node_team_api -->|"queries teams"| node_db
node_reviews -->|"stores reviews"| node_db
node_comments -->|"stores comments"| node_db
node_problem_api -->|"handles methods"| node_http
node_statement_page -->|"handles methods"| node_http
node_sitemap -->|"handles methods"| node_http
node_auth_api -->|"checks origin"| node_http
node_refresh_api -->|"checks origin"| node_http
node_team_api -->|"checks origin"| node_http
node_reviews -->|"checks origin"| node_http
node_comments -->|"checks origin"| node_http

click node_corpus "https://github.com/vigneshrdy/sih-ps-archive/tree/main/2026"
click node_app "https://github.com/vigneshrdy/sih-ps-archive/blob/main/app.js"
click node_statement_data "https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/statements.js"
click node_problem_api "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/problems/index.js"
click node_statement_page "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/statement.js"
click node_sitemap "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/sitemap.js"
click node_auth_api "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/auth.js"
click node_refresh_api "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/session/refresh.js"
click node_session "https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/session.js"
click node_team_api "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/team.js"
click node_reviews "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/reviews.js"
click node_comments "https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/comments/index.js"
click node_http "https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/http.js"
click node_db "https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/db.js"
click node_schema "https://github.com/vigneshrdy/sih-ps-archive/blob/main/supabase/schema.sql"

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_corpus,node_statement_data toneBlue
class node_app toneAmber
class node_problem_api,node_statement_page,node_sitemap,node_reviews,node_comments,node_http toneMint
class node_auth_api,node_refresh_api,node_session,node_team_api toneRose
class node_db,node_schema,node_visitor,node_auth_service toneIndigo
```

## Components

### Statement archive

- [2026 statements](https://github.com/vigneshrdy/sih-ps-archive/tree/main/2026): `2026`
- [Statement parser](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/statements.js): `lib/statements.js`

### Web experience

- [Selection desk](https://github.com/vigneshrdy/sih-ps-archive/blob/main/app.js): `app.js`

### Application API

- [Problem list API](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/problems/index.js): `api/problems/index.js`
- [Statement pages](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/statement.js): `api/statement.js`
- [Sitemap](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/sitemap.js): `api/sitemap.js`
- [Reviews and votes](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/reviews.js): `api/reviews.js`
- [Team comments](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/comments/index.js): `api/comments/index.js`
- [HTTP utilities](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/http.js): `lib/http.js`

### Identity and teams

- [Authentication API](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/auth.js): `api/auth.js`
- [Session refresh API](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/session/refresh.js): `api/session/refresh.js`
- [Session services](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/session.js): `lib/session.js`
- [Team management](https://github.com/vigneshrdy/sih-ps-archive/blob/main/api/team.js): `api/team.js`

### Persistence

- [Database access](https://github.com/vigneshrdy/sih-ps-archive/blob/main/lib/db.js): `lib/db.js`
- [Database schema](https://github.com/vigneshrdy/sih-ps-archive/blob/main/supabase/schema.sql): `supabase/schema.sql`

### Other components

- **Visitor**
- **Supabase Auth**

## Connections

- Visitor → Selection desk: browses (evidence: `README.md`)
- Selection desk → 2026 statements: reads statements (evidence: `README.md`)
- Problem list API → Statement parser: loads list (evidence: `api/problems/index.js`)
- Statement pages → Statement parser: loads pages (evidence: `api/statement.js`)
- Sitemap → Statement parser: loads entries (evidence: `api/sitemap.js`)
- Statement parser → 2026 statements: parses Markdown (evidence: `lib/statements.js`)
- Authentication API → Session services: calls auth (evidence: `api/auth.js`)
- Session refresh API → Session services: rotates session (evidence: `api/session/refresh.js`)
- Team management → Session services: checks access (evidence: `api/team.js`)
- Reviews and votes → Session services: checks access (evidence: `api/reviews.js`)
- Team comments → Session services: checks access (evidence: `api/comments/index.js`)
- Session services → Supabase Auth: verifies and refreshes (evidence: `lib/session.js`)
- Session services → Database access: queries sessions (evidence: `lib/session.js`)
- Team management → Database access: queries teams (evidence: `api/team.js`)
- Reviews and votes → Database access: stores reviews (evidence: `api/reviews.js`)
- Team comments → Database access: stores comments (evidence: `api/comments/index.js`)
- Problem list API → HTTP utilities: handles methods (evidence: `api/problems/index.js`)
- Statement pages → HTTP utilities: handles methods (evidence: `api/statement.js`)
- Sitemap → HTTP utilities: handles methods (evidence: `api/sitemap.js`)
- Authentication API → HTTP utilities: checks origin (evidence: `api/auth.js`)
- Session refresh API → HTTP utilities: checks origin (evidence: `api/session/refresh.js`)
- Team management → HTTP utilities: checks origin (evidence: `api/team.js`)
- Reviews and votes → HTTP utilities: checks origin (evidence: `api/reviews.js`)
- Team comments → HTTP utilities: checks origin (evidence: `api/comments/index.js`)
