# codechefvit/papers-codechef architecture

> Architecture diagram of the GitHub repository codechefvit/papers-codechef, 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/codechefvit/papers-codechef
- Repository: https://github.com/codechefvit/papers-codechef

## Overview

Papers is a Next.js application for finding, filtering, viewing, and downloading past CAT/FAT exam papers, with related-subject and upcoming-paper discovery. Users can also request missing papers, submit uploads, and report incorrect tags. The graph connects sampled API handlers to their documented service calls and sampled service logic to its data layer. UI-to-API wiring and several unsampled capabilities are represented only where the README or source index supports them; uncertain links are omitted.

Main entry points: [`src/lib/services/paper.ts`](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/paper.ts) (Paper services), [`src/lib/services/upcoming-sync.ts`](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/upcoming-sync.ts) (Upcoming sync), [`src/lib/services/subject.ts`](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/subject.ts) (Subject services), [`src/db/course.ts`](https://github.com/codechefvit/papers-codechef/blob/staging/src/db/course.ts) (Course records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Paper discovery"]
  node_catalogue["Paper catalogue<br/>[page.tsx]"]
  node_catalogue_ui["Catalogue experience"]
  node_paper_page["Paper viewer<br/>[page.tsx]"]
  node_pdf_viewer["PDF controls<br/>[newPdfViewer.tsx]"]
  node_pinned_page["Pinned papers<br/>[page.tsx]"]
  node_related_api["Related subjects API<br/>[route.ts]"]
  node_upcoming_api["Upcoming papers API<br/>[route.ts]"]
end

subgraph group_paperdata["Paper data"]
  node_paper_api["Paper query APIs<br/>[route.ts]"]
  node_id_api["Paper detail API<br/>[route.ts]"]
  node_user_papers_api["Selected papers API<br/>[route.ts]"]
  node_paper_service["Paper services<br/>[paper.ts]"]
  node_subject_service["Subject services<br/>[subject.ts]"]
  node_upcoming_sync["Upcoming sync<br/>[upcoming-sync.ts]"]
  node_papers_db[("Paper records<br/>[papers.ts]")]
  node_course_db[("Course records<br/>[course.ts]")]
  node_upcoming_db[("Upcoming records<br/>[upcoming-paper.ts]")]
  node_slot_db[("Slot records<br/>[upcoming-slot.ts]")]
  node_schedule_db[("Schedule records")]
end

subgraph group_contributions["Community contributions"]
  node_request_page["Paper request form<br/>[page.tsx]"]
  node_request_api["Paper request API<br/>[route.ts]"]
  node_upload_page["Paper upload form<br/>[page.tsx]"]
  node_upload_api["Upload API<br/>[route.ts]"]
  node_upload_service["Upload service<br/>[upload.ts]"]
  node_report_api["Tag report API<br/>[route.ts]"]
  node_report_service["Report service<br/>[report.ts]"]
  node_report_db[("Tag reports<br/>[tagReport.ts]")]
end

subgraph group_platform["Shared platform"]
  node_mongoose[("Mongo connection<br/>[mongoose.ts]")]
  node_download["Paper downloads<br/>[download.ts]"]
  node_posthog["Server analytics<br/>[posthog-server.ts]"]
end

node_visitor(("Student"))

node_visitor -->|"browses"| node_catalogue
node_catalogue -->|"presents"| node_catalogue_ui
node_visitor -->|"opens"| node_paper_page
node_paper_page -->|"renders"| node_pdf_viewer
node_visitor -->|"reviews"| node_pinned_page
node_visitor -->|"requests"| node_request_page
node_request_api -->|"creates request"| node_paper_service
node_request_api -->|"tracks event"| node_posthog
node_visitor -->|"submits papers"| node_upload_page
node_upload_api -->|"uploads files"| node_upload_service
node_upload_api -->|"tracks event"| node_posthog
node_visitor -->|"reports tags"| node_report_api
node_report_api -->|"submits report"| node_report_service
node_report_service -->|"writes report"| node_report_db
node_paper_api -->|"queries papers"| node_paper_service
node_id_api -->|"fetches paper"| node_paper_service
node_user_papers_api -->|"fetches papers"| node_paper_service
node_related_api -->|"fetches subjects"| node_subject_service
node_upcoming_api -->|"fetches upcoming"| node_subject_service
node_paper_service -->|"reads papers"| node_papers_db
node_paper_service -->|"reads counts"| node_course_db
node_paper_service -->|"connects to"| node_mongoose
node_subject_service -->|"reads courses"| node_course_db
node_subject_service -->|"reads subjects"| node_upcoming_db
node_subject_service -->|"checks sync"| node_upcoming_sync
node_upcoming_sync -->|"reads and updates"| node_slot_db
node_upcoming_sync -->|"reads schedule"| node_schedule_db
node_upcoming_sync -->|"ranks subjects"| node_course_db
node_upcoming_sync -->|"replaces subjects"| node_upcoming_db
node_pdf_viewer -->|"downloads"| node_download

click node_catalogue "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/catalogue/page.tsx"
click node_catalogue_ui "https://github.com/codechefvit/papers-codechef/blob/staging/src/components/CatalogueContent.tsx"
click node_paper_page "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/paper/%5Bid%5D/page.tsx"
click node_pdf_viewer "https://github.com/codechefvit/papers-codechef/blob/staging/src/components/newPdfViewer.tsx"
click node_pinned_page "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/pinned/page.tsx"
click node_related_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/related-subject/route.ts"
click node_upcoming_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/upcoming-papers/route.ts"
click node_paper_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/papers/route.ts"
click node_id_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/paper-by-id/%5Bid%5D/route.ts"
click node_user_papers_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/user-papers/route.ts"
click node_paper_service "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/paper.ts"
click node_subject_service "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/subject.ts"
click node_upcoming_sync "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/upcoming-sync.ts"
click node_papers_db "https://github.com/codechefvit/papers-codechef/blob/staging/src/db/papers.ts"
click node_course_db "https://github.com/codechefvit/papers-codechef/blob/staging/src/db/course.ts"
click node_upcoming_db "https://github.com/codechefvit/papers-codechef/blob/staging/src/db/upcoming-paper.ts"
click node_slot_db "https://github.com/codechefvit/papers-codechef/blob/staging/src/db/upcoming-slot.ts"
click node_schedule_db "https://github.com/codechefvit/papers-codechef/blob/staging/src/db/upcoming-schedule.ts"
click node_request_page "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/request/page.tsx"
click node_request_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/request/route.ts"
click node_upload_page "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/upload/page.tsx"
click node_upload_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/upload/route.ts"
click node_upload_service "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/upload.ts"
click node_report_api "https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/report-tag/route.ts"
click node_report_service "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/report.ts"
click node_report_db "https://github.com/codechefvit/papers-codechef/blob/staging/src/db/tagReport.ts"
click node_mongoose "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/database/mongoose.ts"
click node_download "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/utils/download.ts"
click node_posthog "https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/posthog-server.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_catalogue,node_catalogue_ui,node_paper_page,node_pdf_viewer,node_pinned_page,node_related_api,node_upcoming_api toneBlue
class node_paper_api,node_id_api,node_user_papers_api,node_paper_service,node_subject_service,node_upcoming_sync,node_papers_db,node_course_db,node_upcoming_db,node_slot_db,node_schedule_db toneAmber
class node_request_page,node_request_api,node_upload_page,node_upload_api,node_upload_service,node_report_api,node_report_service,node_report_db toneMint
class node_mongoose,node_download,node_posthog toneRose
class node_visitor toneIndigo
```

## Components

### Paper discovery

- [Paper catalogue](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/catalogue/page.tsx): `src/app/catalogue/page.tsx`
- [Catalogue experience](https://github.com/codechefvit/papers-codechef/blob/staging/src/components/CatalogueContent.tsx): `src/components/CatalogueContent.tsx`
- [Paper viewer](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/paper/%5Bid%5D/page.tsx): `src/app/paper/[id]/page.tsx`
- [PDF controls](https://github.com/codechefvit/papers-codechef/blob/staging/src/components/newPdfViewer.tsx): `src/components/newPdfViewer.tsx`
- [Pinned papers](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/pinned/page.tsx): `src/app/pinned/page.tsx`
- [Related subjects API](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/related-subject/route.ts): `src/app/api/related-subject/route.ts`
- [Upcoming papers API](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/upcoming-papers/route.ts): `src/app/api/upcoming-papers/route.ts`

### Paper data

- [Paper query APIs](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/papers/route.ts): `src/app/api/papers/route.ts`
- [Paper detail API](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/paper-by-id/%5Bid%5D/route.ts): `src/app/api/paper-by-id/[id]/route.ts`
- [Selected papers API](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/user-papers/route.ts): `src/app/api/user-papers/route.ts`
- [Paper services](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/paper.ts): `src/lib/services/paper.ts`
- [Subject services](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/subject.ts): `src/lib/services/subject.ts`
- [Upcoming sync](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/upcoming-sync.ts): `src/lib/services/upcoming-sync.ts`
- [Paper records](https://github.com/codechefvit/papers-codechef/blob/staging/src/db/papers.ts): `src/db/papers.ts`
- [Course records](https://github.com/codechefvit/papers-codechef/blob/staging/src/db/course.ts): `src/db/course.ts`
- [Upcoming records](https://github.com/codechefvit/papers-codechef/blob/staging/src/db/upcoming-paper.ts): `src/db/upcoming-paper.ts`
- [Slot records](https://github.com/codechefvit/papers-codechef/blob/staging/src/db/upcoming-slot.ts): `src/db/upcoming-slot.ts`
- [Schedule records](https://github.com/codechefvit/papers-codechef/blob/staging/src/db/upcoming-schedule.ts): `src/db/upcoming-schedule.ts`

### Community contributions

- [Paper request form](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/request/page.tsx): `src/app/request/page.tsx`
- [Paper request API](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/request/route.ts): `src/app/api/request/route.ts`
- [Paper upload form](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/upload/page.tsx): `src/app/upload/page.tsx`
- [Upload API](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/upload/route.ts): `src/app/api/upload/route.ts`
- [Upload service](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/upload.ts): `src/lib/services/upload.ts`
- [Tag report API](https://github.com/codechefvit/papers-codechef/blob/staging/src/app/api/report-tag/route.ts): `src/app/api/report-tag/route.ts`
- [Report service](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/services/report.ts): `src/lib/services/report.ts`
- [Tag reports](https://github.com/codechefvit/papers-codechef/blob/staging/src/db/tagReport.ts): `src/db/tagReport.ts`

### Shared platform

- [Mongo connection](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/database/mongoose.ts): `src/lib/database/mongoose.ts`
- [Paper downloads](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/utils/download.ts): `src/lib/utils/download.ts`
- [Server analytics](https://github.com/codechefvit/papers-codechef/blob/staging/src/lib/posthog-server.ts): `src/lib/posthog-server.ts`

### Other components

- **Student**

## Connections

- Student → Paper catalogue: browses
- Paper catalogue → Catalogue experience: presents
- Student → Paper viewer: opens
- Paper viewer → PDF controls: renders (evidence: `src/components/newPdfViewer.tsx`)
- Student → Pinned papers: reviews
- Student → Paper request form: requests
- Paper request API → Paper services: creates request (evidence: `src/app/api/request/route.ts`)
- Paper request API → Server analytics: tracks event (evidence: `src/app/api/request/route.ts`)
- Student → Paper upload form: submits papers
- Upload API → Upload service: uploads files (evidence: `src/app/api/upload/route.ts`)
- Upload API → Server analytics: tracks event (evidence: `src/app/api/upload/route.ts`)
- Student → Tag report API: reports tags (evidence: `src/app/api/report-tag/route.ts`)
- Tag report API → Report service: submits report (evidence: `src/app/api/report-tag/route.ts`)
- Report service → Tag reports: writes report (evidence: `src/lib/services/report.ts`)
- Paper query APIs → Paper services: queries papers (evidence: `src/app/api/papers/route.ts`)
- Paper detail API → Paper services: fetches paper (evidence: `src/app/api/paper-by-id/[id]/route.ts`)
- Selected papers API → Paper services: fetches papers (evidence: `src/app/api/user-papers/route.ts`)
- Related subjects API → Subject services: fetches subjects (evidence: `src/app/api/related-subject/route.ts`)
- Upcoming papers API → Subject services: fetches upcoming (evidence: `src/app/api/upcoming-papers/route.ts`)
- Paper services → Paper records: reads papers (evidence: `src/lib/services/paper.ts`)
- Paper services → Course records: reads counts (evidence: `src/lib/services/paper.ts`)
- Paper services → Mongo connection: connects to (evidence: `src/lib/services/paper.ts`)
- Subject services → Course records: reads courses (evidence: `src/lib/services/subject.ts`)
- Subject services → Upcoming records: reads subjects (evidence: `src/lib/services/subject.ts`)
- Subject services → Upcoming sync: checks sync (evidence: `src/lib/services/subject.ts`)
- Upcoming sync → Slot records: reads and updates (evidence: `src/lib/services/upcoming-sync.ts`)
- Upcoming sync → Schedule records: reads schedule (evidence: `src/lib/services/upcoming-sync.ts`)
- Upcoming sync → Course records: ranks subjects (evidence: `src/lib/services/upcoming-sync.ts`)
- Upcoming sync → Upcoming records: replaces subjects (evidence: `src/lib/services/upcoming-sync.ts`)
- PDF controls → Paper downloads: downloads (evidence: `src/components/newPdfViewer.tsx`)
