# evarmedia/stechad-backend architecture

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

- Interactive diagram: https://gitdiagram.com/evarmedia/stechad-backend
- Repository: https://github.com/evarmedia/stechad-backend

## Overview

This is the backend for a role-based engineer marketplace and project platform. Users authenticate and onboard as engineers or project managers; engineers can browse and apply for jobs, while project managers manage projects and interviews. Admin, analytics, chat, notifications, exports, and referral/reward capabilities are also represented in the route tree and source index, though several are unsampled. The README provides no additional workflow detail, so links for those features are limited to route registrations and indexed imports.

Main entry points: [`server.js`](https://github.com/evarmedia/stechad-backend/blob/main/server.js) (Express server), [`controllers/authController.js`](https://github.com/evarmedia/stechad-backend/blob/main/controllers/authController.js) (Identity and onboarding), [`middleware/auth.js`](https://github.com/evarmedia/stechad-backend/blob/main/middleware/auth.js) (Authentication middleware), [`routes/engineerRoutes.js`](https://github.com/evarmedia/stechad-backend/blob/main/routes/engineerRoutes.js) (Engineer routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and access"]
  node_server["Express server<br/>[server.js]"]
  node_auth_routes["Authentication routes<br/>[authRoutes.js]"]
  node_engineer_routes["Engineer routes<br/>[engineerRoutes.js]"]
  node_jobs_routes["Job routes<br/>[jobsRoutes.js]"]
  node_application_routes["Application routes"]
  node_project_routes["Project routes<br/>[projectRoutes.js]"]
  node_interview_routes["Interview routes<br/>[interviewRoutes.js]"]
  node_chat_routes["Chat routes<br/>[chatRoutes.js]"]
  node_auth_middleware["Authentication middleware<br/>[auth.js]"]
  node_validation["Request validation<br/>[validation.js]"]
end

subgraph group_identity["Identity and profiles"]
  node_auth_controller["Identity and onboarding<br/>[authController.js]"]
  node_engineer_controller["Engineer profiles"]
  node_user_model["User accounts<br/>[User.js]"]
  node_engineer_model["Engineer profiles<br/>[Engineer.js]"]
  node_token_service["Token generation<br/>[generateTokens.js]"]
end

subgraph group_market["Jobs and applications"]
  node_job_controller["Job management<br/>[jobsController.js]"]
  node_application_controller["Job applications"]
  node_job_model["Job records<br/>[Job.js]"]
  node_application_model["Application records<br/>[Application.js]"]
end

subgraph group_delivery["Projects and collaboration"]
  node_project_controller["Project operations"]
  node_interview_controller["Interview scheduling"]
  node_chat_controller["Messaging<br/>[chatController.js]"]
  node_chat_util["Chat utilities<br/>[chatUtil.js]"]
end

subgraph group_platform["Administration and platform services"]
  node_email_service["Email delivery<br/>[sendEmail.js]"]
  node_admin_routes["Admin routes<br/>[adminRoutes.js]"]
  node_admin_controller["Administration<br/>[adminController.js]"]
  node_analytics_routes["Analytics routes<br/>[analyticsRoutes.js]"]
  node_analytics_controller["Analytics"]
  node_export_routes["Export routes<br/>[exportRoutes.js]"]
  node_export_controller["Data exports"]
  node_referral_routes["Referral routes<br/>[referralRoutes.js]"]
  node_referral_controller["Referral rewards"]
  node_notification_service["Notifications"]
end

node_client(("API client"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_auth_routes
node_server -->|"mounts routes"| node_engineer_routes
node_server -->|"mounts routes"| node_jobs_routes
node_server -->|"mounts routes"| node_application_routes
node_server -->|"mounts routes"| node_project_routes
node_server -->|"mounts routes"| node_interview_routes
node_server -->|"mounts routes"| node_chat_routes
node_server -->|"mounts routes"| node_admin_routes
node_server -->|"mounts routes"| node_analytics_routes
node_server -->|"mounts routes"| node_export_routes
node_server -->|"mounts routes"| node_referral_routes
node_auth_routes -->|"dispatches to"| node_auth_controller
node_engineer_routes -->|"dispatches to"| node_engineer_controller
node_jobs_routes -->|"dispatches to"| node_job_controller
node_application_routes -->|"dispatches to"| node_application_controller
node_project_routes -->|"dispatches to"| node_project_controller
node_interview_routes -->|"dispatches to"| node_interview_controller
node_chat_routes -->|"dispatches to"| node_chat_controller
node_admin_routes -->|"dispatches to"| node_admin_controller
node_analytics_routes -.->|"dispatches to"| node_analytics_controller
node_export_routes -.->|"dispatches to"| node_export_controller
node_referral_routes -.->|"dispatches to"| node_referral_controller
node_auth_routes -->|"applies access"| node_auth_middleware
node_engineer_routes -->|"applies access"| node_auth_middleware
node_engineer_routes -->|"applies checks"| node_validation
node_auth_middleware -->|"loads account"| node_user_model
node_auth_controller -->|"reads and writes"| node_user_model
node_auth_controller -->|"creates profile"| node_engineer_model
node_auth_controller -->|"generates tokens"| node_token_service
node_auth_controller -->|"sends email"| node_email_service
node_engineer_controller -->|"reads and writes"| node_engineer_model
node_engineer_controller -->|"checks applications"| node_application_model
node_job_controller -->|"queries jobs"| node_job_model
node_application_controller -.->|"handles applications"| node_application_model
node_project_routes -->|"applies access"| node_auth_middleware
node_interview_controller -->|"notifies users"| node_notification_service
node_project_controller -->|"notifies users"| node_notification_service
node_chat_controller -->|"uses helpers"| node_chat_util
node_admin_routes -->|"applies access"| node_auth_middleware
node_admin_controller -->|"sends email"| node_email_service

click node_server "https://github.com/evarmedia/stechad-backend/blob/main/server.js"
click node_auth_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/authRoutes.js"
click node_engineer_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/engineerRoutes.js"
click node_jobs_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/jobsRoutes.js"
click node_application_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/applicationRoutes.js"
click node_project_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/projectRoutes.js"
click node_interview_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/interviewRoutes.js"
click node_chat_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/chatRoutes.js"
click node_auth_middleware "https://github.com/evarmedia/stechad-backend/blob/main/middleware/auth.js"
click node_validation "https://github.com/evarmedia/stechad-backend/blob/main/middleware/validation.js"
click node_auth_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/authController.js"
click node_engineer_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/engineerController.js"
click node_user_model "https://github.com/evarmedia/stechad-backend/blob/main/models/User.js"
click node_engineer_model "https://github.com/evarmedia/stechad-backend/blob/main/models/Engineer.js"
click node_token_service "https://github.com/evarmedia/stechad-backend/blob/main/utils/generateTokens.js"
click node_email_service "https://github.com/evarmedia/stechad-backend/blob/main/utils/sendEmail.js"
click node_job_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/jobsController.js"
click node_application_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/applicationController.js"
click node_job_model "https://github.com/evarmedia/stechad-backend/blob/main/models/Job.js"
click node_application_model "https://github.com/evarmedia/stechad-backend/blob/main/models/Application.js"
click node_project_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/projectController.js"
click node_interview_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/interviewController.js"
click node_chat_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/chatController.js"
click node_chat_util "https://github.com/evarmedia/stechad-backend/blob/main/utils/chatUtil.js"
click node_admin_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/adminRoutes.js"
click node_admin_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/adminController.js"
click node_analytics_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/analyticsRoutes.js"
click node_analytics_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/analyticsController.js"
click node_export_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/exportRoutes.js"
click node_export_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/exportController.js"
click node_referral_routes "https://github.com/evarmedia/stechad-backend/blob/main/routes/referralRoutes.js"
click node_referral_controller "https://github.com/evarmedia/stechad-backend/blob/main/controllers/referralController.js"
click node_notification_service "https://github.com/evarmedia/stechad-backend/blob/main/utils/notificationUtil.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_server,node_auth_routes,node_engineer_routes,node_jobs_routes,node_application_routes,node_project_routes,node_interview_routes,node_chat_routes,node_auth_middleware,node_validation,node_client toneBlue
class node_auth_controller,node_engineer_controller,node_user_model,node_engineer_model,node_token_service toneAmber
class node_job_controller,node_application_controller,node_job_model,node_application_model toneMint
class node_project_controller,node_interview_controller,node_chat_controller,node_chat_util toneRose
class node_email_service,node_admin_routes,node_admin_controller,node_analytics_routes,node_analytics_controller,node_export_routes,node_export_controller,node_referral_routes,node_referral_controller,node_notification_service toneIndigo
```

## Components

### API and access

- [Express server](https://github.com/evarmedia/stechad-backend/blob/main/server.js): `server.js`
- [Authentication routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/authRoutes.js): `routes/authRoutes.js`
- [Engineer routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/engineerRoutes.js): `routes/engineerRoutes.js`
- [Job routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/jobsRoutes.js): `routes/jobsRoutes.js`
- [Application routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/applicationRoutes.js): `routes/applicationRoutes.js`
- [Project routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/projectRoutes.js): `routes/projectRoutes.js`
- [Interview routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/interviewRoutes.js): `routes/interviewRoutes.js`
- [Chat routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/chatRoutes.js): `routes/chatRoutes.js`
- [Authentication middleware](https://github.com/evarmedia/stechad-backend/blob/main/middleware/auth.js): `middleware/auth.js`
- [Request validation](https://github.com/evarmedia/stechad-backend/blob/main/middleware/validation.js): `middleware/validation.js`

### Identity and profiles

- [Identity and onboarding](https://github.com/evarmedia/stechad-backend/blob/main/controllers/authController.js): `controllers/authController.js`
- [Engineer profiles](https://github.com/evarmedia/stechad-backend/blob/main/controllers/engineerController.js): `controllers/engineerController.js`
- [User accounts](https://github.com/evarmedia/stechad-backend/blob/main/models/User.js): `models/User.js`
- [Engineer profiles](https://github.com/evarmedia/stechad-backend/blob/main/models/Engineer.js): `models/Engineer.js`
- [Token generation](https://github.com/evarmedia/stechad-backend/blob/main/utils/generateTokens.js): `utils/generateTokens.js`

### Jobs and applications

- [Job management](https://github.com/evarmedia/stechad-backend/blob/main/controllers/jobsController.js): `controllers/jobsController.js`
- [Job applications](https://github.com/evarmedia/stechad-backend/blob/main/controllers/applicationController.js): `controllers/applicationController.js`
- [Job records](https://github.com/evarmedia/stechad-backend/blob/main/models/Job.js): `models/Job.js`
- [Application records](https://github.com/evarmedia/stechad-backend/blob/main/models/Application.js): `models/Application.js`

### Projects and collaboration

- [Project operations](https://github.com/evarmedia/stechad-backend/blob/main/controllers/projectController.js): `controllers/projectController.js`
- [Interview scheduling](https://github.com/evarmedia/stechad-backend/blob/main/controllers/interviewController.js): `controllers/interviewController.js`
- [Messaging](https://github.com/evarmedia/stechad-backend/blob/main/controllers/chatController.js): `controllers/chatController.js`
- [Chat utilities](https://github.com/evarmedia/stechad-backend/blob/main/utils/chatUtil.js): `utils/chatUtil.js`

### Administration and platform services

- [Email delivery](https://github.com/evarmedia/stechad-backend/blob/main/utils/sendEmail.js): `utils/sendEmail.js`
- [Admin routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/adminRoutes.js): `routes/adminRoutes.js`
- [Administration](https://github.com/evarmedia/stechad-backend/blob/main/controllers/adminController.js): `controllers/adminController.js`
- [Analytics routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/analyticsRoutes.js): `routes/analyticsRoutes.js`
- [Analytics](https://github.com/evarmedia/stechad-backend/blob/main/controllers/analyticsController.js): `controllers/analyticsController.js`
- [Export routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/exportRoutes.js): `routes/exportRoutes.js`
- [Data exports](https://github.com/evarmedia/stechad-backend/blob/main/controllers/exportController.js): `controllers/exportController.js`
- [Referral routes](https://github.com/evarmedia/stechad-backend/blob/main/routes/referralRoutes.js): `routes/referralRoutes.js`
- [Referral rewards](https://github.com/evarmedia/stechad-backend/blob/main/controllers/referralController.js): `controllers/referralController.js`
- [Notifications](https://github.com/evarmedia/stechad-backend/blob/main/utils/notificationUtil.js): `utils/notificationUtil.js`

### Other components

- **API client**

## Connections

- API client → Express server: sends requests
- Express server → Authentication routes: mounts routes (evidence: `server.js`)
- Express server → Engineer routes: mounts routes (evidence: `server.js`)
- Express server → Job routes: mounts routes (evidence: `server.js`)
- Express server → Application routes: mounts routes (evidence: `server.js`)
- Express server → Project routes: mounts routes (evidence: `server.js`)
- Express server → Interview routes: mounts routes (evidence: `server.js`)
- Express server → Chat routes: mounts routes (evidence: `server.js`)
- Express server → Admin routes: mounts routes (evidence: `server.js`)
- Express server → Analytics routes: mounts routes (evidence: `server.js`)
- Express server → Export routes: mounts routes (evidence: `server.js`)
- Express server → Referral routes: mounts routes (evidence: `server.js`)
- Authentication routes → Identity and onboarding: dispatches to (evidence: `routes/authRoutes.js`)
- Engineer routes → Engineer profiles: dispatches to (evidence: `routes/engineerRoutes.js`)
- Job routes → Job management: dispatches to (evidence: `routes/jobsRoutes.js`)
- Application routes → Job applications: dispatches to (evidence: `routes/applicationRoutes.js`)
- Project routes → Project operations: dispatches to (evidence: `routes/projectRoutes.js`)
- Interview routes → Interview scheduling: dispatches to (evidence: `controllers/interviewController.js`)
- Chat routes → Messaging: dispatches to (evidence: `routes/chatRoutes.js`)
- Admin routes → Administration: dispatches to (evidence: `routes/adminRoutes.js`)
- Analytics routes → Analytics: dispatches to
- Export routes → Data exports: dispatches to
- Referral routes → Referral rewards: dispatches to
- Authentication routes → Authentication middleware: applies access (evidence: `routes/authRoutes.js`)
- Engineer routes → Authentication middleware: applies access (evidence: `routes/engineerRoutes.js`)
- Engineer routes → Request validation: applies checks (evidence: `routes/engineerRoutes.js`)
- Authentication middleware → User accounts: loads account (evidence: `middleware/auth.js`)
- Identity and onboarding → User accounts: reads and writes (evidence: `controllers/authController.js`)
- Identity and onboarding → Engineer profiles: creates profile (evidence: `controllers/authController.js`)
- Identity and onboarding → Token generation: generates tokens (evidence: `controllers/authController.js`)
- Identity and onboarding → Email delivery: sends email (evidence: `controllers/authController.js`)
- Engineer profiles → Engineer profiles: reads and writes (evidence: `controllers/engineerController.js`)
- Engineer profiles → Application records: checks applications (evidence: `controllers/engineerController.js`)
- Job management → Job records: queries jobs (evidence: `controllers/jobsController.js`)
- Job applications → Application records: handles applications
- Project routes → Authentication middleware: applies access (evidence: `routes/projectRoutes.js`)
- Interview scheduling → Notifications: notifies users (evidence: `controllers/interviewController.js`)
- Project operations → Notifications: notifies users (evidence: `controllers/projectController.js`)
- Messaging → Chat utilities: uses helpers (evidence: `utils/chatUtil.js`)
- Admin routes → Authentication middleware: applies access (evidence: `routes/adminRoutes.js`)
- Administration → Email delivery: sends email (evidence: `controllers/adminController.js`)
