# rakib304832/jobserch-portel architecture

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

- Interactive diagram: https://gitdiagram.com/rakib304832/jobserch-portel
- Repository: https://github.com/rakib304832/jobserch-portel

## Overview

HireLoop is a demo job portal for job seekers, recruiters, and administrators. Seekers browse and save listings, apply, and track applications; recruiters register companies, publish jobs, and manage applicants; administrators oversee users and company approval. The Next.js UI calls route handlers through a shared browser API client. Handlers enforce sessions and plan rules and use an in-memory store, rather than a persistent database. The map includes major API domains and shared runtime modules; several UI pages and routes were not sampled, so their internal connections are omitted where unverified.

Main entry points: [`src/lib/store.ts`](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/store.ts) (In-memory domain store), [`src/lib/session.ts`](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/session.ts) (Session handling), [`src/app/api/companies/route.ts`](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/companies/route.ts) (Company routes), [`src/app/api/saved-jobs/route.ts`](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/saved-jobs/route.ts) (Saved-job routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web interface"]
  node_public_ui["Public pages<br/>[page.tsx]"]
  node_jobs_ui["Job listings<br/>[page.tsx]"]
  node_job_card["Job cards<br/>[job-card.tsx]"]
  node_providers["Auth and toast<br/>[providers.tsx]"]
  node_client["API client<br/>[api-client.ts]"]
  node_highlight_hook["Highlight hook"]
end

subgraph group_api["API workflows"]
  node_auth_api["Authentication routes<br/>[route.ts]"]
  node_jobs_api["Jobs routes<br/>[route.ts]"]
  node_companies_api["Company routes<br/>[route.ts]"]
  node_applications_api["Applications routes<br/>[route.ts]"]
  node_saved_api["Saved-job routes<br/>[route.ts]"]
  node_payments_api["Payments routes<br/>[route.ts]"]
  node_stats_api["Statistics routes<br/>[route.ts]"]
  node_profile_api["Profile routes<br/>[route.ts]"]
  node_admin_api["Admin users<br/>[route.ts]"]
  node_upload_api["File upload<br/>[route.ts]"]
end

subgraph group_identity["Identity and plans"]
  node_session["Session handling<br/>[session.ts]"]
  node_plans["Plans and limits<br/>[plans.ts]"]
end

subgraph group_data["Domain data"]
  node_store[("In-memory domain store<br/>[store.ts]")]
  node_seed["Demo seed data<br/>[seed.ts]"]
end

subgraph group_shared["Shared contracts"]
  node_types["Domain types<br/>[types.ts]"]
  node_api_types["API contracts<br/>[api-types.ts]"]
  node_format["Display formatting<br/>[format.ts]"]
  node_highlight["Code highlighting<br/>[highlighter.tsx]"]
end

node_visitor(("Visitor or user"))

node_visitor -->|"visits"| node_public_ui
node_visitor -->|"searches"| node_jobs_ui
node_jobs_ui -.->|"renders"| node_job_card
node_providers -->|"calls"| node_client
node_providers -->|"requests auth"| node_auth_api
node_client -.->|"fetches routes"| node_jobs_api
node_auth_api -.->|"uses sessions"| node_session
node_auth_api -->|"reads users"| node_store
node_jobs_api -.->|"checks identity"| node_session
node_jobs_api -.->|"queries jobs"| node_store
node_companies_api -->|"checks identity"| node_session
node_companies_api -->|"reads and writes"| node_store
node_companies_api -->|"uses industries"| node_plans
node_applications_api -->|"checks identity"| node_session
node_applications_api -->|"reads and writes"| node_store
node_saved_api -->|"checks identity"| node_session
node_saved_api -->|"manages bookmarks"| node_store
node_saved_api -->|"checks cap"| node_plans
node_payments_api -->|"checks identity"| node_session
node_payments_api -->|"records payments"| node_store
node_payments_api -->|"looks up plans"| node_plans
node_stats_api -.->|"checks identity"| node_session
node_stats_api -.->|"reads metrics"| node_store
node_profile_api -.->|"updates profile"| node_store
node_admin_api -->|"checks identity"| node_session
node_admin_api -->|"manages users"| node_store
node_upload_api -->|"checks identity"| node_session
node_store -->|"loads seed data"| node_seed
node_session -->|"loads user"| node_store
node_job_card -->|"formats details"| node_format
node_job_card -->|"uses job types"| node_types
node_highlight_hook -->|"uses highlighter"| node_highlight
node_api_types -->|"extends domain types"| node_types

click node_public_ui "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/(public)/page.tsx"
click node_jobs_ui "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/(public)/jobs/page.tsx"
click node_job_card "https://github.com/rakib304832/jobserch-portel/blob/main/src/components/jobs/job-card.tsx"
click node_providers "https://github.com/rakib304832/jobserch-portel/blob/main/src/components/providers.tsx"
click node_client "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/api-client.ts"
click node_auth_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/auth/login/route.ts"
click node_jobs_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/jobs/route.ts"
click node_companies_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/companies/route.ts"
click node_applications_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/applications/route.ts"
click node_saved_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/saved-jobs/route.ts"
click node_payments_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/payments/route.ts"
click node_stats_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/stats/%5Bscope%5D/route.ts"
click node_profile_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/profile/route.ts"
click node_admin_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/admin/users/route.ts"
click node_upload_api "https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/upload/route.ts"
click node_session "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/session.ts"
click node_plans "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/plans.ts"
click node_store "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/store.ts"
click node_seed "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/seed.ts"
click node_types "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/types.ts"
click node_api_types "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/api-types.ts"
click node_format "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/format.ts"
click node_highlight "https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/highlighter.tsx"
click node_highlight_hook "https://github.com/rakib304832/jobserch-portel/blob/main/src/hooks/use-highlighted-code.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_public_ui,node_jobs_ui,node_job_card,node_providers,node_client,node_highlight_hook,node_visitor toneBlue
class node_auth_api,node_jobs_api,node_companies_api,node_applications_api,node_saved_api,node_payments_api,node_stats_api,node_profile_api,node_admin_api,node_upload_api toneAmber
class node_session,node_plans toneMint
class node_store,node_seed toneRose
class node_types,node_api_types,node_format,node_highlight toneIndigo
```

## Components

### Web interface

- [Public pages](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/(public)/page.tsx): `src/app/(public)/page.tsx`
- [Job listings](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/(public)/jobs/page.tsx): `src/app/(public)/jobs/page.tsx`
- [Job cards](https://github.com/rakib304832/jobserch-portel/blob/main/src/components/jobs/job-card.tsx): `src/components/jobs/job-card.tsx`
- [Auth and toast](https://github.com/rakib304832/jobserch-portel/blob/main/src/components/providers.tsx): `src/components/providers.tsx`
- [API client](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/api-client.ts): `src/lib/api-client.ts`
- [Highlight hook](https://github.com/rakib304832/jobserch-portel/blob/main/src/hooks/use-highlighted-code.ts): `src/hooks/use-highlighted-code.ts`

### API workflows

- [Authentication routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/auth/login/route.ts): `src/app/api/auth/login/route.ts`
- [Jobs routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/jobs/route.ts): `src/app/api/jobs/route.ts`
- [Company routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/companies/route.ts): `src/app/api/companies/route.ts`
- [Applications routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/applications/route.ts): `src/app/api/applications/route.ts`
- [Saved-job routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/saved-jobs/route.ts): `src/app/api/saved-jobs/route.ts`
- [Payments routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/payments/route.ts): `src/app/api/payments/route.ts`
- [Statistics routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/stats/%5Bscope%5D/route.ts): `src/app/api/stats/[scope]/route.ts`
- [Profile routes](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/profile/route.ts): `src/app/api/profile/route.ts`
- [Admin users](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/admin/users/route.ts): `src/app/api/admin/users/route.ts`
- [File upload](https://github.com/rakib304832/jobserch-portel/blob/main/src/app/api/upload/route.ts): `src/app/api/upload/route.ts`

### Identity and plans

- [Session handling](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/session.ts): `src/lib/session.ts`
- [Plans and limits](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/plans.ts): `src/lib/plans.ts`

### Domain data

- [In-memory domain store](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/store.ts): `src/lib/store.ts`
- [Demo seed data](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/seed.ts): `src/lib/seed.ts`

### Shared contracts

- [Domain types](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/types.ts): `src/lib/types.ts`
- [API contracts](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/api-types.ts): `src/lib/api-types.ts`
- [Display formatting](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/format.ts): `src/lib/format.ts`
- [Code highlighting](https://github.com/rakib304832/jobserch-portel/blob/main/src/lib/highlighter.tsx): `src/lib/highlighter.tsx`

### Other components

- **Visitor or user**

## Connections

- Visitor or user → Public pages: visits
- Visitor or user → Job listings: searches
- Job listings → Job cards: renders
- Auth and toast → API client: calls (evidence: `src/components/providers.tsx`)
- Auth and toast → Authentication routes: requests auth (evidence: `src/components/providers.tsx`)
- API client → Jobs routes: fetches routes
- Authentication routes → Session handling: uses sessions (evidence: `src/app/api/auth/login/route.ts`)
- Authentication routes → In-memory domain store: reads users (evidence: `src/app/api/auth/login/route.ts`)
- Jobs routes → Session handling: checks identity (evidence: `src/app/api/jobs/route.ts`)
- Jobs routes → In-memory domain store: queries jobs (evidence: `src/app/api/jobs/route.ts`)
- Company routes → Session handling: checks identity (evidence: `src/app/api/companies/route.ts`)
- Company routes → In-memory domain store: reads and writes (evidence: `src/app/api/companies/route.ts`)
- Company routes → Plans and limits: uses industries (evidence: `src/app/api/companies/route.ts`)
- Applications routes → Session handling: checks identity (evidence: `src/app/api/applications/route.ts`)
- Applications routes → In-memory domain store: reads and writes (evidence: `src/app/api/applications/route.ts`)
- Saved-job routes → Session handling: checks identity (evidence: `src/app/api/saved-jobs/route.ts`)
- Saved-job routes → In-memory domain store: manages bookmarks (evidence: `src/app/api/saved-jobs/route.ts`)
- Saved-job routes → Plans and limits: checks cap (evidence: `src/app/api/saved-jobs/route.ts`)
- Payments routes → Session handling: checks identity (evidence: `src/app/api/payments/route.ts`)
- Payments routes → In-memory domain store: records payments (evidence: `src/app/api/payments/route.ts`)
- Payments routes → Plans and limits: looks up plans (evidence: `src/app/api/payments/route.ts`)
- Statistics routes → Session handling: checks identity (evidence: `src/app/api/stats/[scope]/route.ts`)
- Statistics routes → In-memory domain store: reads metrics (evidence: `src/app/api/stats/[scope]/route.ts`)
- Profile routes → In-memory domain store: updates profile (evidence: `src/app/api/profile/route.ts`)
- Admin users → Session handling: checks identity (evidence: `src/app/api/admin/users/route.ts`)
- Admin users → In-memory domain store: manages users (evidence: `src/app/api/admin/users/route.ts`)
- File upload → Session handling: checks identity (evidence: `src/app/api/upload/route.ts`)
- In-memory domain store → Demo seed data: loads seed data (evidence: `src/lib/store.ts`)
- Session handling → In-memory domain store: loads user (evidence: `src/lib/session.ts`)
- Job cards → Display formatting: formats details (evidence: `src/components/jobs/job-card.tsx`)
- Job cards → Domain types: uses job types (evidence: `src/components/jobs/job-card.tsx`)
- Highlight hook → Code highlighting: uses highlighter (evidence: `src/hooks/use-highlighted-code.ts`)
- API contracts → Domain types: extends domain types (evidence: `src/lib/api-types.ts`)
