# ankit-yadav9988/sarkari-bharti architecture

> Architecture diagram of the GitHub repository ankit-yadav9988/sarkari-bharti, 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/ankit-yadav9988/sarkari-bharti
- Repository: https://github.com/ankit-yadav9988/sarkari-bharti

## Overview

Sarkari Bharti is a bilingual government-job information portal. Aspirants browse server-rendered listings and detail pages; the frontend retrieves data over HTTP from a Spring REST API backed by PostgreSQL. Administrators authenticate and maintain jobs and related exam resources, while subscribers can opt into optional email alerts. The tree and README establish the broader resource and page capabilities; sampled source confirms selected homepage, job, authentication, subscription, and broadcast paths, so unsampled controller wiring is shown only at subsystem level.

Main entry points: [`frontend/lib/api.js`](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/frontend/lib/api.js) (API client), [`backend/src/main/java/com/sarkariportal/backend/controller/AdminJobController.java`](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/AdminJobController.java) (Job admin), [`backend/src/main/java/com/sarkariportal/backend/service/JobService.java`](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/JobService.java) (Job workflows), [`frontend/pages/admin`](https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/frontend/pages/admin) (Admin pages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Public portal"]
  node_webpages["Public pages"]
  node_homepage["Home digest<br/>[index.js]"]
  node_adminpages["Admin pages"]
  node_api_client["API client<br/>[api.js]"]
  node_auth_client["Admin auth<br/>[auth.js]"]
end

subgraph group_api["REST API"]
  node_job_api["Job endpoints<br/>[JobController.java]"]
  node_admin_job_api["Job admin"]
  node_auth_api["Login endpoint"]
  node_resource_apis["Exam resources"]
  node_subscriber_api["Subscriber endpoint"]
  node_security["API security"]
end

subgraph group_content["Content services"]
  node_job_service["Job workflows<br/>[JobService.java]"]
  node_resource_services["Resource workflows"]
  node_job_store[("Job data<br/>[JobRepository.java]")]
  node_resource_stores[("Resource data")]
end

subgraph group_admin["Admin and alerts"]
  node_sub_service["Subscription service"]
  node_broadcast["Broadcast service"]
  node_mail["Mail delivery<br/>[MailService.java]"]
  node_subscriber_store[("Subscriber data")]
end

subgraph group_pipeline["Source discovery"]
  node_discover["Discover sources<br/>[discover.js]"]
  node_pipeline_run["Pipeline runner<br/>[run.js]"]
  node_extract["Job extraction<br/>[extract.js]"]
end

node_aspirant(("Aspirant"))
node_adminuser(("Administrator"))
node_mail_provider["Mail provider"]
node_source_sites["Recruitment sites"]

node_aspirant -->|"browses"| node_webpages
node_homepage -->|"fetches listings"| node_api_client
node_webpages -->|"requests data"| node_api_client
node_api_client -->|"HTTP requests"| node_job_api
node_job_api -->|"delegates"| node_job_service
node_job_service -->|"queries and updates"| node_job_store
node_job_service -->|"returns listings"| node_homepage
node_resource_apis -->|"delegates"| node_resource_services
node_resource_services -->|"queries and updates"| node_resource_stores
node_resource_apis -->|"serves resource data"| node_api_client
node_adminuser -->|"manages content"| node_adminpages
node_adminpages -->|"submits login"| node_auth_client
node_auth_client -->|"HTTP login"| node_auth_api
node_auth_api -->|"issues JWT"| node_security
node_adminpages -->|"sends changes"| node_api_client
node_api_client -->|"admin requests"| node_admin_job_api
node_admin_job_api -->|"delegates"| node_job_service
node_admin_job_api -->|"requires authorization"| node_security
node_admin_job_api -->|"returns job results"| node_api_client
node_subscriber_api -->|"manages signups"| node_sub_service
node_sub_service -->|"stores subscribers"| node_subscriber_store
node_subscriber_api -->|"starts broadcast"| node_broadcast
node_broadcast -->|"loads recipients"| node_subscriber_store
node_broadcast -->|"sends messages"| node_mail
node_mail -.->|"delivers email"| node_mail_provider
node_source_sites -.->|"provides source pages"| node_discover
node_pipeline_run -->|"finds listings"| node_discover
node_pipeline_run -->|"extracts job data"| node_extract

click node_webpages "https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/frontend/pages"
click node_homepage "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/frontend/pages/index.js"
click node_adminpages "https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/frontend/pages/admin"
click node_api_client "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/frontend/lib/api.js"
click node_auth_client "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/frontend/lib/auth.js"
click node_job_api "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/JobController.java"
click node_admin_job_api "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/AdminJobController.java"
click node_auth_api "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/AuthController.java"
click node_resource_apis "https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/backend/src/main/java/com/sarkariportal/backend/controller"
click node_subscriber_api "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/SubscriberController.java"
click node_security "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/config/SecurityConfig.java"
click node_job_service "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/JobService.java"
click node_resource_services "https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/backend/src/main/java/com/sarkariportal/backend/service"
click node_job_store "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/repository/JobRepository.java"
click node_resource_stores "https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/backend/src/main/java/com/sarkariportal/backend/repository"
click node_sub_service "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/SubscriberService.java"
click node_broadcast "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/BroadcastService.java"
click node_mail "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/MailService.java"
click node_subscriber_store "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/repository/SubscriberRepository.java"
click node_discover "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/pipeline/discover.js"
click node_pipeline_run "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/pipeline/run.js"
click node_extract "https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/pipeline/lib/extract.js"

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_webpages,node_homepage,node_adminpages,node_api_client,node_auth_client toneBlue
class node_job_api,node_admin_job_api,node_auth_api,node_resource_apis,node_subscriber_api,node_security toneAmber
class node_job_service,node_resource_services,node_job_store,node_resource_stores toneMint
class node_sub_service,node_broadcast,node_mail,node_subscriber_store toneRose
class node_discover,node_pipeline_run,node_extract,node_aspirant,node_adminuser,node_mail_provider,node_source_sites toneIndigo
```

## Components

### Public portal

- [Public pages](https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/frontend/pages): `frontend/pages`
- [Home digest](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/frontend/pages/index.js): `frontend/pages/index.js`
- [Admin pages](https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/frontend/pages/admin): `frontend/pages/admin`
- [API client](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/frontend/lib/api.js): `frontend/lib/api.js`
- [Admin auth](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/frontend/lib/auth.js): `frontend/lib/auth.js`

### REST API

- [Job endpoints](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/JobController.java): `backend/src/main/java/com/sarkariportal/backend/controller/JobController.java`
- [Job admin](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/AdminJobController.java): `backend/src/main/java/com/sarkariportal/backend/controller/AdminJobController.java`
- [Login endpoint](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/AuthController.java): `backend/src/main/java/com/sarkariportal/backend/controller/AuthController.java`
- [Exam resources](https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/backend/src/main/java/com/sarkariportal/backend/controller): `backend/src/main/java/com/sarkariportal/backend/controller`
- [Subscriber endpoint](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/controller/SubscriberController.java): `backend/src/main/java/com/sarkariportal/backend/controller/SubscriberController.java`
- [API security](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/config/SecurityConfig.java): `backend/src/main/java/com/sarkariportal/backend/config/SecurityConfig.java`

### Content services

- [Job workflows](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/JobService.java): `backend/src/main/java/com/sarkariportal/backend/service/JobService.java`
- [Resource workflows](https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/backend/src/main/java/com/sarkariportal/backend/service): `backend/src/main/java/com/sarkariportal/backend/service`
- [Job data](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/repository/JobRepository.java): `backend/src/main/java/com/sarkariportal/backend/repository/JobRepository.java`
- [Resource data](https://github.com/ankit-yadav9988/sarkari-bharti/tree/main/backend/src/main/java/com/sarkariportal/backend/repository): `backend/src/main/java/com/sarkariportal/backend/repository`

### Admin and alerts

- [Subscription service](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/SubscriberService.java): `backend/src/main/java/com/sarkariportal/backend/service/SubscriberService.java`
- [Broadcast service](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/BroadcastService.java): `backend/src/main/java/com/sarkariportal/backend/service/BroadcastService.java`
- [Mail delivery](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/service/MailService.java): `backend/src/main/java/com/sarkariportal/backend/service/MailService.java`
- [Subscriber data](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/backend/src/main/java/com/sarkariportal/backend/repository/SubscriberRepository.java): `backend/src/main/java/com/sarkariportal/backend/repository/SubscriberRepository.java`

### Source discovery

- [Discover sources](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/pipeline/discover.js): `pipeline/discover.js`
- [Pipeline runner](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/pipeline/run.js): `pipeline/run.js`
- [Job extraction](https://github.com/ankit-yadav9988/sarkari-bharti/blob/main/pipeline/lib/extract.js): `pipeline/lib/extract.js`

### Other components

- **Aspirant**
- **Administrator**
- **Mail provider**
- **Recruitment sites**

## Connections

- Aspirant → Public pages: browses
- Home digest → API client: fetches listings
- Public pages → API client: requests data
- API client → Job endpoints: HTTP requests
- Job endpoints → Job workflows: delegates
- Job workflows → Job data: queries and updates
- Job workflows → Home digest: returns listings
- Exam resources → Resource workflows: delegates
- Resource workflows → Resource data: queries and updates
- Exam resources → API client: serves resource data
- Administrator → Admin pages: manages content
- Admin pages → Admin auth: submits login
- Admin auth → Login endpoint: HTTP login
- Login endpoint → API security: issues JWT
- Admin pages → API client: sends changes
- API client → Job admin: admin requests
- Job admin → Job workflows: delegates
- Job admin → API security: requires authorization
- Job admin → API client: returns job results
- Subscriber endpoint → Subscription service: manages signups
- Subscription service → Subscriber data: stores subscribers
- Subscriber endpoint → Broadcast service: starts broadcast
- Broadcast service → Subscriber data: loads recipients
- Broadcast service → Mail delivery: sends messages
- Mail delivery → Mail provider: delivers email
- Recruitment sites → Discover sources: provides source pages
- Pipeline runner → Discover sources: finds listings
- Pipeline runner → Job extraction: extracts job data
