# shubh3819/mini-jira architecture

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

- Interactive diagram: https://gitdiagram.com/shubh3819/mini-jira
- Repository: https://github.com/shubh3819/mini-jira

## Overview

Mini Jira is a team project and issue tracker. Users register or sign in, enter protected project and dashboard views, manage project membership, then create, search, filter, assign, and update numbered tickets; ticket and project data is served by an authenticated Express API backed by MongoDB. The graph includes the documented dashboard and management capabilities, but unsampled page implementations leave some client-side wiring implicit. The ticket and project controller relationships are grounded in sampled source; other feature coverage follows the README and tree.

Main entry points: [`client/src/App.jsx`](https://github.com/shubh3819/mini-jira/blob/main/client/src/App.jsx) (Route application), [`server/server.js`](https://github.com/shubh3819/mini-jira/blob/main/server/server.js) (API server), [`server/controllers/projectController.js`](https://github.com/shubh3819/mini-jira/blob/main/server/controllers/projectController.js) (Project controller), [`client/src/services/api.js`](https://github.com/shubh3819/mini-jira/blob/main/client/src/services/api.js) (HTTP client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_app["Route application<br/>[App.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_api["HTTP client<br/>[api.js]"]
end

subgraph group_identity["Authentication"]
  node_authstate["Auth state<br/>[AuthContext.jsx]"]
  node_guard["Route guard<br/>[ProtectedRoute.jsx]"]
  node_login["Login and register<br/>[Login.jsx]"]
  node_register["Registration view<br/>[Register.jsx]"]
  node_authsvc["Auth requests<br/>[authService.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_authcontroller["Auth controller<br/>[authController.js]"]
  node_middleware["JWT protection<br/>[authMiddleware.js]"]
  node_token["Token creation<br/>[generateToken.js]"]
  node_userstore["User records<br/>[User.js]"]
end

subgraph group_projects["Project management"]
  node_projectlist["Project list<br/>[Projects.jsx]"]
  node_projectview["Project details<br/>[ProjectDetails.jsx]"]
  node_projectsvc["Project requests<br/>[projectService.js]"]
  node_projectroutes["Project routes<br/>[projectRoutes.js]"]
  node_projectcontroller["Project controller"]
  node_projectstore["Project records<br/>[Project.js]"]
end

subgraph group_tickets["Ticket management"]
  node_ticketview["Ticket details<br/>[TicketDetails.jsx]"]
  node_ticketsvc["Ticket requests<br/>[ticketService.js]"]
  node_ticketroutes["Ticket routes<br/>[ticketRoutes.js]"]
  node_ticketcontroller["Ticket controller"]
  node_ticketstore["Ticket records<br/>[Ticket.js]"]
end

subgraph group_backend["API and persistence"]
  node_server["API server<br/>[server.js]"]
  node_dbconnect["DB connection<br/>[db.js]"]
  node_mongodb[("MongoDB")]
end

node_user(("Team member"))

node_user -->|"uses"| node_app
node_app -->|"routes"| node_login
node_app -->|"routes"| node_register
node_app -->|"routes"| node_dashboard
node_app -->|"routes"| node_projectlist
node_app -->|"routes"| node_projectview
node_app -->|"routes"| node_ticketview
node_app -->|"protects views"| node_guard
node_authstate -->|"provides state"| node_app
node_login -->|"authenticates"| node_authsvc
node_register -->|"registers"| node_authsvc
node_authsvc -->|"sends requests"| node_api
node_projectlist -->|"manages projects"| node_projectsvc
node_projectview -->|"manages members"| node_projectsvc
node_projectview -->|"manages tickets"| node_ticketsvc
node_ticketview -->|"updates ticket"| node_ticketsvc
node_dashboard -->|"loads overview"| node_projectsvc
node_dashboard -->|"loads statistics"| node_ticketsvc
node_projectsvc -->|"sends requests"| node_api
node_ticketsvc -->|"sends requests"| node_api
node_api -->|"REST requests"| node_server
node_server -->|"connects before API"| node_dbconnect
node_server -->|"mounts auth"| node_authroutes
node_server -->|"mounts projects"| node_projectroutes
node_server -->|"mounts tickets"| node_ticketroutes
node_authroutes -->|"protects current-user route"| node_middleware
node_authroutes -->|"dispatches"| node_authcontroller
node_projectroutes -->|"protects routes"| node_middleware
node_projectroutes -->|"dispatches"| node_projectcontroller
node_ticketroutes -->|"protects routes"| node_middleware
node_ticketroutes -->|"dispatches"| node_ticketcontroller
node_authcontroller -->|"reads and writes"| node_userstore
node_authcontroller -->|"creates JWT"| node_token
node_projectcontroller -->|"reads and writes"| node_projectstore
node_projectcontroller -->|"validates members"| node_userstore
node_projectcontroller -->|"clears assignments"| node_ticketstore
node_ticketcontroller -->|"reads and writes"| node_ticketstore
node_ticketcontroller -->|"checks membership"| node_projectstore
node_dbconnect -->|"connects"| node_mongodb
node_userstore -->|"persists records"| node_mongodb
node_projectstore -->|"persists records"| node_mongodb
node_ticketstore -->|"persists records"| node_mongodb

click node_app "https://github.com/shubh3819/mini-jira/blob/main/client/src/App.jsx"
click node_authstate "https://github.com/shubh3819/mini-jira/blob/main/client/src/context/AuthContext.jsx"
click node_guard "https://github.com/shubh3819/mini-jira/blob/main/client/src/components/ProtectedRoute.jsx"
click node_login "https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Login.jsx"
click node_register "https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Register.jsx"
click node_authsvc "https://github.com/shubh3819/mini-jira/blob/main/client/src/services/authService.js"
click node_dashboard "https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Dashboard.jsx"
click node_projectlist "https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Projects.jsx"
click node_projectview "https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/ProjectDetails.jsx"
click node_projectsvc "https://github.com/shubh3819/mini-jira/blob/main/client/src/services/projectService.js"
click node_ticketview "https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/TicketDetails.jsx"
click node_ticketsvc "https://github.com/shubh3819/mini-jira/blob/main/client/src/services/ticketService.js"
click node_api "https://github.com/shubh3819/mini-jira/blob/main/client/src/services/api.js"
click node_server "https://github.com/shubh3819/mini-jira/blob/main/server/server.js"
click node_authroutes "https://github.com/shubh3819/mini-jira/blob/main/server/routes/authRoutes.js"
click node_authcontroller "https://github.com/shubh3819/mini-jira/blob/main/server/controllers/authController.js"
click node_middleware "https://github.com/shubh3819/mini-jira/blob/main/server/middleware/authMiddleware.js"
click node_token "https://github.com/shubh3819/mini-jira/blob/main/server/utils/generateToken.js"
click node_projectroutes "https://github.com/shubh3819/mini-jira/blob/main/server/routes/projectRoutes.js"
click node_projectcontroller "https://github.com/shubh3819/mini-jira/blob/main/server/controllers/projectController.js"
click node_ticketroutes "https://github.com/shubh3819/mini-jira/blob/main/server/routes/ticketRoutes.js"
click node_ticketcontroller "https://github.com/shubh3819/mini-jira/blob/main/server/controllers/ticketController.js"
click node_userstore "https://github.com/shubh3819/mini-jira/blob/main/server/models/User.js"
click node_projectstore "https://github.com/shubh3819/mini-jira/blob/main/server/models/Project.js"
click node_ticketstore "https://github.com/shubh3819/mini-jira/blob/main/server/models/Ticket.js"
click node_dbconnect "https://github.com/shubh3819/mini-jira/blob/main/server/config/db.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_dashboard,node_api toneBlue
class node_authstate,node_guard,node_login,node_register,node_authsvc,node_authroutes,node_authcontroller,node_middleware,node_token,node_userstore toneAmber
class node_projectlist,node_projectview,node_projectsvc,node_projectroutes,node_projectcontroller,node_projectstore toneMint
class node_ticketview,node_ticketsvc,node_ticketroutes,node_ticketcontroller,node_ticketstore toneRose
class node_server,node_dbconnect,node_mongodb,node_user toneIndigo
```

## Components

### React client

- [Route application](https://github.com/shubh3819/mini-jira/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Dashboard](https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Dashboard.jsx): `client/src/pages/Dashboard.jsx`
- [HTTP client](https://github.com/shubh3819/mini-jira/blob/main/client/src/services/api.js): `client/src/services/api.js`

### Authentication

- [Auth state](https://github.com/shubh3819/mini-jira/blob/main/client/src/context/AuthContext.jsx): `client/src/context/AuthContext.jsx`
- [Route guard](https://github.com/shubh3819/mini-jira/blob/main/client/src/components/ProtectedRoute.jsx): `client/src/components/ProtectedRoute.jsx`
- [Login and register](https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Login.jsx): `client/src/pages/Login.jsx`
- [Registration view](https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Register.jsx): `client/src/pages/Register.jsx`
- [Auth requests](https://github.com/shubh3819/mini-jira/blob/main/client/src/services/authService.js): `client/src/services/authService.js`
- [Auth routes](https://github.com/shubh3819/mini-jira/blob/main/server/routes/authRoutes.js): `server/routes/authRoutes.js`
- [Auth controller](https://github.com/shubh3819/mini-jira/blob/main/server/controllers/authController.js): `server/controllers/authController.js`
- [JWT protection](https://github.com/shubh3819/mini-jira/blob/main/server/middleware/authMiddleware.js): `server/middleware/authMiddleware.js`
- [Token creation](https://github.com/shubh3819/mini-jira/blob/main/server/utils/generateToken.js): `server/utils/generateToken.js`
- [User records](https://github.com/shubh3819/mini-jira/blob/main/server/models/User.js): `server/models/User.js`

### Project management

- [Project list](https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/Projects.jsx): `client/src/pages/Projects.jsx`
- [Project details](https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/ProjectDetails.jsx): `client/src/pages/ProjectDetails.jsx`
- [Project requests](https://github.com/shubh3819/mini-jira/blob/main/client/src/services/projectService.js): `client/src/services/projectService.js`
- [Project routes](https://github.com/shubh3819/mini-jira/blob/main/server/routes/projectRoutes.js): `server/routes/projectRoutes.js`
- [Project controller](https://github.com/shubh3819/mini-jira/blob/main/server/controllers/projectController.js): `server/controllers/projectController.js`
- [Project records](https://github.com/shubh3819/mini-jira/blob/main/server/models/Project.js): `server/models/Project.js`

### Ticket management

- [Ticket details](https://github.com/shubh3819/mini-jira/blob/main/client/src/pages/TicketDetails.jsx): `client/src/pages/TicketDetails.jsx`
- [Ticket requests](https://github.com/shubh3819/mini-jira/blob/main/client/src/services/ticketService.js): `client/src/services/ticketService.js`
- [Ticket routes](https://github.com/shubh3819/mini-jira/blob/main/server/routes/ticketRoutes.js): `server/routes/ticketRoutes.js`
- [Ticket controller](https://github.com/shubh3819/mini-jira/blob/main/server/controllers/ticketController.js): `server/controllers/ticketController.js`
- [Ticket records](https://github.com/shubh3819/mini-jira/blob/main/server/models/Ticket.js): `server/models/Ticket.js`

### API and persistence

- [API server](https://github.com/shubh3819/mini-jira/blob/main/server/server.js): `server/server.js`
- [DB connection](https://github.com/shubh3819/mini-jira/blob/main/server/config/db.js): `server/config/db.js`
- **MongoDB**

### Other components

- **Team member**

## Connections

- Team member → Route application: uses
- Route application → Login and register: routes
- Route application → Registration view: routes
- Route application → Dashboard: routes
- Route application → Project list: routes
- Route application → Project details: routes
- Route application → Ticket details: routes
- Route application → Route guard: protects views
- Auth state → Route application: provides state
- Login and register → Auth requests: authenticates
- Registration view → Auth requests: registers
- Auth requests → HTTP client: sends requests
- Project list → Project requests: manages projects
- Project details → Project requests: manages members
- Project details → Ticket requests: manages tickets
- Ticket details → Ticket requests: updates ticket
- Dashboard → Project requests: loads overview
- Dashboard → Ticket requests: loads statistics
- Project requests → HTTP client: sends requests
- Ticket requests → HTTP client: sends requests
- HTTP client → API server: REST requests
- API server → DB connection: connects before API
- API server → Auth routes: mounts auth
- API server → Project routes: mounts projects
- API server → Ticket routes: mounts tickets
- Auth routes → JWT protection: protects current-user route
- Auth routes → Auth controller: dispatches
- Project routes → JWT protection: protects routes
- Project routes → Project controller: dispatches
- Ticket routes → JWT protection: protects routes
- Ticket routes → Ticket controller: dispatches
- Auth controller → User records: reads and writes
- Auth controller → Token creation: creates JWT
- Project controller → Project records: reads and writes
- Project controller → User records: validates members
- Project controller → Ticket records: clears assignments
- Ticket controller → Ticket records: reads and writes
- Ticket controller → Project records: checks membership
- DB connection → MongoDB: connects
- User records → MongoDB: persists records
- Project records → MongoDB: persists records
- Ticket records → MongoDB: persists records
