# fudgeejane/applora architecture

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

- Interactive diagram: https://gitdiagram.com/fudgeejane/applora
- Repository: https://github.com/fudgeejane/applora

## Overview

Applora is a job-search workspace with a React frontend and an Express/MongoDB authentication backend. The evidenced runtime flow is browser navigation through route guards into account pages; authentication requests use the shared API client, reach the auth routes and controller, and persist user state. Verification emails are generated and sent through a separate email service. The README describes application tracking, resume management, interview scheduling, and AI career assistance, but the sampled code does not establish backend data flows for those product areas; those capabilities are shown as frontend areas, not as persisted services.

Main entry points: [`src/layouts/PrivateLayout.jsx`](https://github.com/fudgeejane/applora/blob/main/src/layouts/PrivateLayout.jsx) (Private workspace), [`src/routes/AppRoutes.jsx`](https://github.com/fudgeejane/applora/blob/main/src/routes/AppRoutes.jsx) (Route map), [`server/src/controllers/authController.js`](https://github.com/fudgeejane/applora/blob/main/server/src/controllers/authController.js) (Auth workflows), [`server/src/routes/authRoutes.js`](https://github.com/fudgeejane/applora/blob/main/server/src/routes/authRoutes.js) (Auth endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_routes["Route map<br/>[AppRoutes.jsx]"]
  node_public["Public pages"]
  node_dashboard["Application tracker<br/>[HomePage.jsx]"]
  node_resume["Resume manager<br/>[ResumePage.jsx]"]
  node_interviews["Interview planner<br/>[InterviewsPage.jsx]"]
  node_assistant["AI career assistant<br/>[ChatBotPage.jsx]"]
  node_accounttools["Workspace tools<br/>[SettingsPage.jsx]"]
  node_help["Help center<br/>[HelpCenterPage.jsx]"]
  node_private_layout["Private workspace<br/>[PrivateLayout.jsx]"]
end

subgraph group_authui["Account experience"]
  node_authpages["Verification and profile"]
  node_signin["Sign-in and signup"]
  node_guards["Route guards<br/>[RouteGuards.jsx]"]
  node_authcontext["Session context<br/>[AuthContext.jsx]"]
  node_api["API client<br/>[api.js]"]
end

subgraph group_authserver["Authentication service"]
  node_authroutes["Auth endpoints<br/>[authRoutes.js]"]
  node_controller["Auth workflows<br/>[authController.js]"]
  node_user[("User records<br/>[User.js]")]
  node_middleware["JWT protection<br/>[authMiddleware.js]"]
  node_otp["OTP generation<br/>[generateOTP.js]"]
  node_emailservice["Email delivery<br/>[emailServices.js]"]
  node_emailtemplate["Verification template"]
  node_databaseconfig["Database connection<br/>[db.js]"]
  node_server["Express server<br/>[server.js]"]
end

subgraph group_shared["Shared presentation"]
  node_dashboardui["Dashboard components<br/>[DashboardUI.jsx]"]
  node_styles["Theme styles<br/>[Style.jsx]"]
  node_darkmode["Theme state"]
end

node_jobseeker(("Job seeker"))
node_mongodb[("MongoDB")]
node_mailprovider["Email provider"]

node_jobseeker -->|"uses"| node_routes
node_routes -->|"routes to"| node_public
node_routes -->|"routes to"| node_signin
node_routes -->|"routes to"| node_authpages
node_routes -->|"wraps pages"| node_private_layout
node_private_layout -.->|"renders"| node_dashboard
node_private_layout -.->|"renders"| node_resume
node_private_layout -.->|"renders"| node_interviews
node_private_layout -.->|"renders"| node_assistant
node_private_layout -.->|"renders"| node_accounttools
node_private_layout -.->|"renders"| node_help
node_dashboard -->|"renders with"| node_dashboardui
node_dashboard -->|"uses styles"| node_styles
node_guards -->|"checks session"| node_authcontext
node_routes -->|"protects routes"| node_guards
node_signin -->|"sends requests"| node_api
node_authpages -->|"sends requests"| node_api
node_authcontext -->|"checks session"| node_api
node_api -.->|"calls API"| node_authroutes
node_server -->|"mounts routes"| node_authroutes
node_authroutes -->|"dispatches handlers"| node_controller
node_authroutes -->|"protects endpoints"| node_middleware
node_controller -->|"reads and writes"| node_user
node_middleware -->|"loads user"| node_user
node_controller -->|"generates codes"| node_otp
node_controller -->|"sends verification"| node_emailservice
node_emailservice -->|"renders"| node_emailtemplate
node_emailservice -->|"sends email"| node_mailprovider
node_server -->|"connects database"| node_databaseconfig
node_databaseconfig -.->|"connects"| node_mongodb
node_styles -->|"reads theme"| node_darkmode
node_private_layout -->|"uses styles"| node_styles
node_private_layout -->|"uses theme"| node_darkmode

click node_routes "https://github.com/fudgeejane/applora/blob/main/src/routes/AppRoutes.jsx"
click node_public "https://github.com/fudgeejane/applora/tree/main/src/pages/public"
click node_dashboard "https://github.com/fudgeejane/applora/blob/main/src/pages/app/HomePage.jsx"
click node_resume "https://github.com/fudgeejane/applora/blob/main/src/pages/app/ResumePage.jsx"
click node_interviews "https://github.com/fudgeejane/applora/blob/main/src/pages/app/InterviewsPage.jsx"
click node_assistant "https://github.com/fudgeejane/applora/blob/main/src/pages/app/ChatBotPage.jsx"
click node_accounttools "https://github.com/fudgeejane/applora/blob/main/src/pages/app/SettingsPage.jsx"
click node_help "https://github.com/fudgeejane/applora/blob/main/src/pages/app/HelpCenterPage.jsx"
click node_private_layout "https://github.com/fudgeejane/applora/blob/main/src/layouts/PrivateLayout.jsx"
click node_authpages "https://github.com/fudgeejane/applora/tree/main/src/pages/auth"
click node_signin "https://github.com/fudgeejane/applora/tree/main/src/pages/public"
click node_guards "https://github.com/fudgeejane/applora/blob/main/src/components/auth/RouteGuards.jsx"
click node_authcontext "https://github.com/fudgeejane/applora/blob/main/src/contexts/AuthContext.jsx"
click node_api "https://github.com/fudgeejane/applora/blob/main/src/lib/api.js"
click node_authroutes "https://github.com/fudgeejane/applora/blob/main/server/src/routes/authRoutes.js"
click node_controller "https://github.com/fudgeejane/applora/blob/main/server/src/controllers/authController.js"
click node_user "https://github.com/fudgeejane/applora/blob/main/server/src/models/User.js"
click node_middleware "https://github.com/fudgeejane/applora/blob/main/server/src/middleware/authMiddleware.js"
click node_otp "https://github.com/fudgeejane/applora/blob/main/server/src/utils/generateOTP.js"
click node_emailservice "https://github.com/fudgeejane/applora/blob/main/server/src/services/emailServices.js"
click node_emailtemplate "https://github.com/fudgeejane/applora/blob/main/server/src/emails/VerificationEmail.js"
click node_databaseconfig "https://github.com/fudgeejane/applora/blob/main/server/src/config/db.js"
click node_server "https://github.com/fudgeejane/applora/blob/main/server/src/server.js"
click node_dashboardui "https://github.com/fudgeejane/applora/blob/main/src/components/dashboard/DashboardUI.jsx"
click node_styles "https://github.com/fudgeejane/applora/blob/main/src/components/ui/Style.jsx"
click node_darkmode "https://github.com/fudgeejane/applora/blob/main/src/components/ui/DarkModeProvider.jsx"

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_routes,node_public,node_dashboard,node_resume,node_interviews,node_assistant,node_accounttools,node_help,node_private_layout toneBlue
class node_authpages,node_signin,node_guards,node_authcontext,node_api,node_mongodb toneAmber
class node_authroutes,node_controller,node_user,node_middleware,node_otp,node_emailservice,node_emailtemplate,node_databaseconfig,node_server toneMint
class node_dashboardui,node_styles,node_darkmode toneRose
class node_jobseeker,node_mailprovider toneIndigo
```

## Components

### Web application

- [Route map](https://github.com/fudgeejane/applora/blob/main/src/routes/AppRoutes.jsx): `src/routes/AppRoutes.jsx`
- [Public pages](https://github.com/fudgeejane/applora/tree/main/src/pages/public): `src/pages/public`
- [Application tracker](https://github.com/fudgeejane/applora/blob/main/src/pages/app/HomePage.jsx): `src/pages/app/HomePage.jsx`
- [Resume manager](https://github.com/fudgeejane/applora/blob/main/src/pages/app/ResumePage.jsx): `src/pages/app/ResumePage.jsx`
- [Interview planner](https://github.com/fudgeejane/applora/blob/main/src/pages/app/InterviewsPage.jsx): `src/pages/app/InterviewsPage.jsx`
- [AI career assistant](https://github.com/fudgeejane/applora/blob/main/src/pages/app/ChatBotPage.jsx): `src/pages/app/ChatBotPage.jsx`
- [Workspace tools](https://github.com/fudgeejane/applora/blob/main/src/pages/app/SettingsPage.jsx): `src/pages/app/SettingsPage.jsx`
- [Help center](https://github.com/fudgeejane/applora/blob/main/src/pages/app/HelpCenterPage.jsx): `src/pages/app/HelpCenterPage.jsx`
- [Private workspace](https://github.com/fudgeejane/applora/blob/main/src/layouts/PrivateLayout.jsx): `src/layouts/PrivateLayout.jsx`

### Account experience

- [Verification and profile](https://github.com/fudgeejane/applora/tree/main/src/pages/auth): `src/pages/auth`
- [Sign-in and signup](https://github.com/fudgeejane/applora/tree/main/src/pages/public): `src/pages/public`
- [Route guards](https://github.com/fudgeejane/applora/blob/main/src/components/auth/RouteGuards.jsx): `src/components/auth/RouteGuards.jsx`
- [Session context](https://github.com/fudgeejane/applora/blob/main/src/contexts/AuthContext.jsx): `src/contexts/AuthContext.jsx`
- [API client](https://github.com/fudgeejane/applora/blob/main/src/lib/api.js): `src/lib/api.js`

### Authentication service

- [Auth endpoints](https://github.com/fudgeejane/applora/blob/main/server/src/routes/authRoutes.js): `server/src/routes/authRoutes.js`
- [Auth workflows](https://github.com/fudgeejane/applora/blob/main/server/src/controllers/authController.js): `server/src/controllers/authController.js`
- [User records](https://github.com/fudgeejane/applora/blob/main/server/src/models/User.js): `server/src/models/User.js`
- [JWT protection](https://github.com/fudgeejane/applora/blob/main/server/src/middleware/authMiddleware.js): `server/src/middleware/authMiddleware.js`
- [OTP generation](https://github.com/fudgeejane/applora/blob/main/server/src/utils/generateOTP.js): `server/src/utils/generateOTP.js`
- [Email delivery](https://github.com/fudgeejane/applora/blob/main/server/src/services/emailServices.js): `server/src/services/emailServices.js`
- [Verification template](https://github.com/fudgeejane/applora/blob/main/server/src/emails/VerificationEmail.js): `server/src/emails/VerificationEmail.js`
- [Database connection](https://github.com/fudgeejane/applora/blob/main/server/src/config/db.js): `server/src/config/db.js`
- [Express server](https://github.com/fudgeejane/applora/blob/main/server/src/server.js): `server/src/server.js`

### Shared presentation

- [Dashboard components](https://github.com/fudgeejane/applora/blob/main/src/components/dashboard/DashboardUI.jsx): `src/components/dashboard/DashboardUI.jsx`
- [Theme styles](https://github.com/fudgeejane/applora/blob/main/src/components/ui/Style.jsx): `src/components/ui/Style.jsx`
- [Theme state](https://github.com/fudgeejane/applora/blob/main/src/components/ui/DarkModeProvider.jsx): `src/components/ui/DarkModeProvider.jsx`

### Other components

- **Job seeker**
- **MongoDB**
- **Email provider**

## Connections

- Job seeker → Route map: uses
- Route map → Public pages: routes to (evidence: `src/routes/AppRoutes.jsx`)
- Route map → Sign-in and signup: routes to (evidence: `src/routes/AppRoutes.jsx`)
- Route map → Verification and profile: routes to (evidence: `src/routes/AppRoutes.jsx`)
- Route map → Private workspace: wraps pages (evidence: `src/routes/AppRoutes.jsx`)
- Private workspace → Application tracker: renders
- Private workspace → Resume manager: renders
- Private workspace → Interview planner: renders
- Private workspace → AI career assistant: renders
- Private workspace → Workspace tools: renders
- Private workspace → Help center: renders
- Application tracker → Dashboard components: renders with (evidence: `src/pages/app/HomePage.jsx`)
- Application tracker → Theme styles: uses styles (evidence: `src/pages/app/HomePage.jsx`)
- Route guards → Session context: checks session (evidence: `src/components/auth/RouteGuards.jsx`)
- Route map → Route guards: protects routes (evidence: `src/routes/AppRoutes.jsx`)
- Sign-in and signup → API client: sends requests (evidence: `src/pages/public/SignInPage.jsx`)
- Verification and profile → API client: sends requests (evidence: `src/pages/auth/VerifyEmail.jsx`)
- Session context → API client: checks session (evidence: `src/contexts/AuthContext.jsx`)
- API client → Auth endpoints: calls API
- Express server → Auth endpoints: mounts routes (evidence: `server/src/server.js`)
- Auth endpoints → Auth workflows: dispatches handlers (evidence: `server/src/routes/authRoutes.js`)
- Auth endpoints → JWT protection: protects endpoints (evidence: `server/src/routes/authRoutes.js`)
- Auth workflows → User records: reads and writes (evidence: `server/src/controllers/authController.js`)
- JWT protection → User records: loads user (evidence: `server/src/middleware/authMiddleware.js`)
- Auth workflows → OTP generation: generates codes (evidence: `server/src/controllers/authController.js`)
- Auth workflows → Email delivery: sends verification (evidence: `server/src/controllers/authController.js`)
- Email delivery → Verification template: renders (evidence: `server/src/services/emailServices.js`)
- Email delivery → Email provider: sends email (evidence: `server/src/services/emailServices.js`)
- Express server → Database connection: connects database (evidence: `server/src/server.js`)
- Database connection → MongoDB: connects
- Theme styles → Theme state: reads theme (evidence: `src/components/ui/Style.jsx`)
- Private workspace → Theme styles: uses styles (evidence: `src/layouts/PrivateLayout.jsx`)
- Private workspace → Theme state: uses theme (evidence: `src/layouts/PrivateLayout.jsx`)
