# pranshu3099/careerops-backend architecture

> Architecture diagram of the GitHub repository pranshu3099/careerops-backend, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pranshu3099/careerops-backend
- Repository: https://github.com/pranshu3099/careerops-backend

## Overview

CareerOps is a job-application tracking backend. Users authenticate, manage applications and their status, then track interviews and scheduled follow-ups; analytics, notifications, and settings support that workflow. The Express application mounts the feature routes, whose controllers coordinate service logic and background scheduling. Queue workers handle asynchronous email, follow-up, ghost-detection, and notification work. Sampled application and authentication code confirms key service, persistence, cache, and scheduling interactions; some feature-module internals were not sampled, so their internal wiring is omitted.

Main entry points: [`src/app.js`](https://github.com/pranshu3099/careerops-backend/blob/main/src/app.js) (Express app), [`src/modules/application/application.controller.js`](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.controller.js) (Applications), [`src/modules/application/application.service.js`](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.service.js) (Application service), [`src/modules/auth/auth.controller.js`](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/auth/auth.controller.js) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and identity"]
  node_app["Express app<br/>[app.js]"]
  node_auth["Authentication<br/>[auth.controller.js]"]
  node_authsvc["Auth service<br/>[auth.service.js]"]
end

subgraph group_tracking["Career tracking"]
  node_application["Applications"]
  node_appsvc["Application service"]
  node_apprepo["Application repository"]
  node_followups["Follow-ups"]
  node_followupsvc["Follow-up service"]
  node_interviews["Interviews"]
  node_interviewsvc["Interview service"]
end

subgraph group_insights["Insights and alerts"]
  node_settings["Alert settings"]
  node_analytic["Analytics"]
  node_notification["Notifications"]
end

subgraph group_async["Background jobs"]
  node_ghost["Ghost checks"]
  node_followupqueue["Follow-up queue<br/>[followup.queue.js]"]
  node_emailqueue["Email queue<br/>[email.queue.js]"]
  node_notifyqueue["Notification queue"]
  node_ghostqueue["Ghost queue<br/>[ghost.queue.js]"]
  node_followworker["Follow-up worker<br/>[followup.worker.js]"]
  node_emailworker["Email worker<br/>[email.worker.js]"]
  node_ghostworker["Ghost worker<br/>[ghost.worker.js]"]
  node_notifyworker["Notification worker"]
end

node_user(("User"))
node_database[("Application database")]
node_redis[("Redis")]
node_email["Email provider"]

node_user -->|"sends requests"| node_app
node_app -->|"mounts auth routes"| node_auth
node_app -->|"mounts application routes"| node_application
node_app -->|"mounts follow-up routes"| node_followups
node_app -->|"mounts interview routes"| node_interviews
node_app -->|"mounts settings routes"| node_settings
node_app -->|"mounts analytics routes"| node_analytic
node_app -->|"mounts notification routes"| node_notification
node_auth -->|"calls"| node_authsvc
node_authsvc -->|"reads and writes"| node_database
node_application -->|"calls"| node_appsvc
node_appsvc -->|"reads and writes"| node_database
node_appsvc -->|"queries"| node_apprepo
node_appsvc -->|"caches results"| node_redis
node_application -->|"schedules follow-ups"| node_followupqueue
node_application -->|"schedules checks"| node_ghost
node_ghost -->|"enqueues jobs"| node_ghostqueue
node_followupqueue -->|"dispatches jobs"| node_followworker
node_emailqueue -->|"dispatches jobs"| node_emailworker
node_ghostqueue -->|"dispatches jobs"| node_ghostworker
node_notifyqueue -->|"dispatches jobs"| node_notifyworker
node_followworker -->|"sends messages"| node_email
node_emailworker -->|"sends messages"| node_email
node_followups -->|"calls"| node_followupsvc
node_interviews -->|"calls"| node_interviewsvc
node_settings -->|"invalidates cache"| node_redis

click node_app "https://github.com/pranshu3099/careerops-backend/blob/main/src/app.js"
click node_auth "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/auth/auth.controller.js"
click node_authsvc "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/auth/auth.service.js"
click node_application "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.controller.js"
click node_appsvc "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.service.js"
click node_apprepo "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.repo.js"
click node_followups "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/followup/followup.controller.js"
click node_followupsvc "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/followup/followup.service.js"
click node_interviews "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/interview/interview.controller.js"
click node_interviewsvc "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/interview/interview.service.js"
click node_settings "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/settings/settings.controller.js"
click node_analytic "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/analytics/analytics.controller.js"
click node_notification "https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/notification/notification.controller.js"
click node_ghost "https://github.com/pranshu3099/careerops-backend/blob/main/src/services/ghostQueue.service.js"
click node_followupqueue "https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/followup.queue.js"
click node_emailqueue "https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/email.queue.js"
click node_notifyqueue "https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/notification.queue.js"
click node_ghostqueue "https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/ghost.queue.js"
click node_followworker "https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/followup.worker.js"
click node_emailworker "https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/email.worker.js"
click node_ghostworker "https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/ghost.worker.js"
click node_notifyworker "https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/notification.worker.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_app,node_auth,node_authsvc,node_user toneBlue
class node_application,node_appsvc,node_apprepo,node_followups,node_followupsvc,node_interviews,node_interviewsvc,node_database,node_redis toneAmber
class node_settings,node_analytic,node_notification toneMint
class node_ghost,node_followupqueue,node_emailqueue,node_notifyqueue,node_ghostqueue,node_followworker,node_emailworker,node_ghostworker,node_notifyworker toneRose
class node_email toneIndigo
```

## Components

### API and identity

- [Express app](https://github.com/pranshu3099/careerops-backend/blob/main/src/app.js): `src/app.js`
- [Authentication](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/auth/auth.controller.js): `src/modules/auth/auth.controller.js`
- [Auth service](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/auth/auth.service.js): `src/modules/auth/auth.service.js`

### Career tracking

- [Applications](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.controller.js): `src/modules/application/application.controller.js`
- [Application service](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.service.js): `src/modules/application/application.service.js`
- [Application repository](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/application/application.repo.js): `src/modules/application/application.repo.js`
- [Follow-ups](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/followup/followup.controller.js): `src/modules/followup/followup.controller.js`
- [Follow-up service](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/followup/followup.service.js): `src/modules/followup/followup.service.js`
- [Interviews](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/interview/interview.controller.js): `src/modules/interview/interview.controller.js`
- [Interview service](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/interview/interview.service.js): `src/modules/interview/interview.service.js`

### Insights and alerts

- [Alert settings](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/settings/settings.controller.js): `src/modules/settings/settings.controller.js`
- [Analytics](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/analytics/analytics.controller.js): `src/modules/analytics/analytics.controller.js`
- [Notifications](https://github.com/pranshu3099/careerops-backend/blob/main/src/modules/notification/notification.controller.js): `src/modules/notification/notification.controller.js`

### Background jobs

- [Ghost checks](https://github.com/pranshu3099/careerops-backend/blob/main/src/services/ghostQueue.service.js): `src/services/ghostQueue.service.js`
- [Follow-up queue](https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/followup.queue.js): `src/queues/followup.queue.js`
- [Email queue](https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/email.queue.js): `src/queues/email.queue.js`
- [Notification queue](https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/notification.queue.js): `src/queues/notification.queue.js`
- [Ghost queue](https://github.com/pranshu3099/careerops-backend/blob/main/src/queues/ghost.queue.js): `src/queues/ghost.queue.js`
- [Follow-up worker](https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/followup.worker.js): `src/workers/followup.worker.js`
- [Email worker](https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/email.worker.js): `src/workers/email.worker.js`
- [Ghost worker](https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/ghost.worker.js): `src/workers/ghost.worker.js`
- [Notification worker](https://github.com/pranshu3099/careerops-backend/blob/main/src/workers/notification.worker.js): `src/workers/notification.worker.js`

### Other components

- **User**
- **Application database**
- **Redis**
- **Email provider**

## Connections

- User → Express app: sends requests
- Express app → Authentication: mounts auth routes
- Express app → Applications: mounts application routes
- Express app → Follow-ups: mounts follow-up routes
- Express app → Interviews: mounts interview routes
- Express app → Alert settings: mounts settings routes
- Express app → Analytics: mounts analytics routes
- Express app → Notifications: mounts notification routes
- Authentication → Auth service: calls
- Auth service → Application database: reads and writes
- Applications → Application service: calls
- Application service → Application database: reads and writes
- Application service → Application repository: queries
- Application service → Redis: caches results
- Applications → Follow-up queue: schedules follow-ups
- Applications → Ghost checks: schedules checks
- Ghost checks → Ghost queue: enqueues jobs
- Follow-up queue → Follow-up worker: dispatches jobs
- Email queue → Email worker: dispatches jobs
- Ghost queue → Ghost worker: dispatches jobs
- Notification queue → Notification worker: dispatches jobs
- Follow-up worker → Email provider: sends messages
- Email worker → Email provider: sends messages
- Follow-ups → Follow-up service: calls
- Interviews → Interview service: calls
- Alert settings → Redis: invalidates cache
