# jamir4270/subscription-tracker architecture

> Architecture diagram of the GitHub repository jamir4270/subscription-tracker, 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/jamir4270/subscription-tracker
- Repository: https://github.com/jamir4270/subscription-tracker

## Overview

SubDub is an Express REST API for account authentication and subscription lifecycle management, with MongoDB persistence and scheduled renewal reminders. The main workflow is a client request through routing and authorization to a controller and stored data; subscription creation additionally triggers an Upstash workflow, which reads the subscription and sends 7-, 5-, and 1-day email reminders. The graph reflects the sampled source and README; user CRUD and some subscription endpoints are placeholders, and their internals are not expanded.

Main entry points: [`app.js`](https://github.com/jamir4270/subscription-tracker/blob/main/app.js) (Express App), [`models/user.model.js`](https://github.com/jamir4270/subscription-tracker/blob/main/models/user.model.js) (User Model), [`routes/user.routes.js`](https://github.com/jamir4270/subscription-tracker/blob/main/routes/user.routes.js) (User Routes), [`routes/subscription.routes.js`](https://github.com/jamir4270/subscription-tracker/blob/main/routes/subscription.routes.js) (Subscription Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and Security"]
  node_app["Express App<br/>[app.js]"]
  node_arcjet["Arcjet Guard"]
  node_authmw["JWT Authorization<br/>[auth.middleware.js]"]
  node_errors["Error Handler"]
  node_authroutes["Auth Routes<br/>[auth.routes.js]"]
  node_userroutes["User Routes<br/>[user.routes.js]"]
  node_subroutes["Subscription Routes"]
  node_workflowroutes["Workflow Route<br/>[workflow.routes.js]"]
end

subgraph group_domain["Account and Subscriptions"]
  node_authctl["Authentication<br/>[auth.controller.js]"]
  node_userctl["User Queries<br/>[user.controller.js]"]
  node_subctl["Subscription Management"]
  node_usermodel["User Model<br/>[user.model.js]"]
  node_submodel["Subscription Model"]
end

subgraph group_reminders["Reminder Delivery"]
  node_workflowctl["Reminder Workflow"]
  node_emailutil["Email Sender<br/>[send-email.js]"]
  node_template["Email Templates<br/>[email-template.js]"]
end

subgraph group_infrastructure["Runtime Services"]
  node_dbconn["Mongo Connection<br/>[mongodb.js]"]
  node_upstashcfg["Workflow Client<br/>[upstash.js]"]
  node_mailcfg["Mail Transport<br/>[nodemailer.js]"]
end

node_client(("API Client"))
node_mongodb[("MongoDB")]
node_upstash["Upstash Workflows"]
node_smtp(("Gmail SMTP"))
node_arcjetsvc(("Arcjet Service"))

node_client -->|"sends requests"| node_app
node_app -->|"runs guard"| node_arcjet
node_arcjet -->|"checks traffic"| node_arcjetsvc
node_app -->|"mounts routes"| node_authroutes
node_app -->|"mounts routes"| node_userroutes
node_app -->|"mounts routes"| node_subroutes
node_app -->|"mounts routes"| node_workflowroutes
node_app -->|"connects database"| node_dbconn
node_app -->|"handles errors"| node_errors
node_authroutes -->|"dispatches"| node_authctl
node_userroutes -->|"authorizes selected routes"| node_authmw
node_userroutes -->|"dispatches"| node_userctl
node_subroutes -->|"authorizes protected routes"| node_authmw
node_subroutes -->|"dispatches"| node_subctl
node_workflowroutes -->|"dispatches"| node_workflowctl
node_authmw -->|"loads user"| node_usermodel
node_authctl -->|"reads and creates"| node_usermodel
node_userctl -->|"queries"| node_usermodel
node_subctl -->|"manages records"| node_submodel
node_workflowctl -->|"loads subscription"| node_submodel
node_usermodel -->|"persists data"| node_mongodb
node_submodel -->|"persists data"| node_mongodb
node_subctl -->|"uses client"| node_upstashcfg
node_upstashcfg -->|"triggers workflow"| node_upstash
node_upstash -->|"posts reminder request"| node_app
node_workflowctl -->|"sends reminder"| node_emailutil
node_emailutil -->|"renders message"| node_template
node_emailutil -->|"uses transport"| node_mailcfg
node_mailcfg -->|"delivers email"| node_smtp

click node_app "https://github.com/jamir4270/subscription-tracker/blob/main/app.js"
click node_arcjet "https://github.com/jamir4270/subscription-tracker/blob/main/middlewares/arcjet.middleware.js"
click node_authmw "https://github.com/jamir4270/subscription-tracker/blob/main/middlewares/auth.middleware.js"
click node_errors "https://github.com/jamir4270/subscription-tracker/blob/main/middlewares/error.middleware.js"
click node_authroutes "https://github.com/jamir4270/subscription-tracker/blob/main/routes/auth.routes.js"
click node_userroutes "https://github.com/jamir4270/subscription-tracker/blob/main/routes/user.routes.js"
click node_subroutes "https://github.com/jamir4270/subscription-tracker/blob/main/routes/subscription.routes.js"
click node_workflowroutes "https://github.com/jamir4270/subscription-tracker/blob/main/routes/workflow.routes.js"
click node_authctl "https://github.com/jamir4270/subscription-tracker/blob/main/controllers/auth.controller.js"
click node_userctl "https://github.com/jamir4270/subscription-tracker/blob/main/controllers/user.controller.js"
click node_subctl "https://github.com/jamir4270/subscription-tracker/blob/main/controllers/subscription.controller.js"
click node_usermodel "https://github.com/jamir4270/subscription-tracker/blob/main/models/user.model.js"
click node_submodel "https://github.com/jamir4270/subscription-tracker/blob/main/models/subscription.model.js"
click node_workflowctl "https://github.com/jamir4270/subscription-tracker/blob/main/controllers/workflow.controller.js"
click node_emailutil "https://github.com/jamir4270/subscription-tracker/blob/main/utils/send-email.js"
click node_template "https://github.com/jamir4270/subscription-tracker/blob/main/utils/email-template.js"
click node_dbconn "https://github.com/jamir4270/subscription-tracker/blob/main/database/mongodb.js"
click node_upstashcfg "https://github.com/jamir4270/subscription-tracker/blob/main/config/upstash.js"
click node_mailcfg "https://github.com/jamir4270/subscription-tracker/blob/main/config/nodemailer.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_arcjet,node_authmw,node_errors,node_authroutes,node_userroutes,node_subroutes,node_workflowroutes,node_client toneBlue
class node_authctl,node_userctl,node_subctl,node_usermodel,node_submodel,node_mongodb toneAmber
class node_workflowctl,node_emailutil,node_template toneMint
class node_dbconn,node_upstashcfg,node_mailcfg toneRose
class node_upstash,node_smtp,node_arcjetsvc toneIndigo
```

## Components

### API and Security

- [Express App](https://github.com/jamir4270/subscription-tracker/blob/main/app.js): `app.js`
- [Arcjet Guard](https://github.com/jamir4270/subscription-tracker/blob/main/middlewares/arcjet.middleware.js): `middlewares/arcjet.middleware.js`
- [JWT Authorization](https://github.com/jamir4270/subscription-tracker/blob/main/middlewares/auth.middleware.js): `middlewares/auth.middleware.js`
- [Error Handler](https://github.com/jamir4270/subscription-tracker/blob/main/middlewares/error.middleware.js): `middlewares/error.middleware.js`
- [Auth Routes](https://github.com/jamir4270/subscription-tracker/blob/main/routes/auth.routes.js): `routes/auth.routes.js`
- [User Routes](https://github.com/jamir4270/subscription-tracker/blob/main/routes/user.routes.js): `routes/user.routes.js`
- [Subscription Routes](https://github.com/jamir4270/subscription-tracker/blob/main/routes/subscription.routes.js): `routes/subscription.routes.js`
- [Workflow Route](https://github.com/jamir4270/subscription-tracker/blob/main/routes/workflow.routes.js): `routes/workflow.routes.js`

### Account and Subscriptions

- [Authentication](https://github.com/jamir4270/subscription-tracker/blob/main/controllers/auth.controller.js): `controllers/auth.controller.js`
- [User Queries](https://github.com/jamir4270/subscription-tracker/blob/main/controllers/user.controller.js): `controllers/user.controller.js`
- [Subscription Management](https://github.com/jamir4270/subscription-tracker/blob/main/controllers/subscription.controller.js): `controllers/subscription.controller.js`
- [User Model](https://github.com/jamir4270/subscription-tracker/blob/main/models/user.model.js): `models/user.model.js`
- [Subscription Model](https://github.com/jamir4270/subscription-tracker/blob/main/models/subscription.model.js): `models/subscription.model.js`

### Reminder Delivery

- [Reminder Workflow](https://github.com/jamir4270/subscription-tracker/blob/main/controllers/workflow.controller.js): `controllers/workflow.controller.js`
- [Email Sender](https://github.com/jamir4270/subscription-tracker/blob/main/utils/send-email.js): `utils/send-email.js`
- [Email Templates](https://github.com/jamir4270/subscription-tracker/blob/main/utils/email-template.js): `utils/email-template.js`

### Runtime Services

- [Mongo Connection](https://github.com/jamir4270/subscription-tracker/blob/main/database/mongodb.js): `database/mongodb.js`
- [Workflow Client](https://github.com/jamir4270/subscription-tracker/blob/main/config/upstash.js): `config/upstash.js`
- [Mail Transport](https://github.com/jamir4270/subscription-tracker/blob/main/config/nodemailer.js): `config/nodemailer.js`

### Other components

- **API Client**
- **MongoDB**
- **Upstash Workflows**
- **Gmail SMTP**
- **Arcjet Service**

## Connections

- API Client → Express App: sends requests
- Express App → Arcjet Guard: runs guard
- Arcjet Guard → Arcjet Service: checks traffic
- Express App → Auth Routes: mounts routes
- Express App → User Routes: mounts routes
- Express App → Subscription Routes: mounts routes
- Express App → Workflow Route: mounts routes
- Express App → Mongo Connection: connects database
- Express App → Error Handler: handles errors
- Auth Routes → Authentication: dispatches
- User Routes → JWT Authorization: authorizes selected routes
- User Routes → User Queries: dispatches
- Subscription Routes → JWT Authorization: authorizes protected routes
- Subscription Routes → Subscription Management: dispatches
- Workflow Route → Reminder Workflow: dispatches
- JWT Authorization → User Model: loads user
- Authentication → User Model: reads and creates
- User Queries → User Model: queries
- Subscription Management → Subscription Model: manages records
- Reminder Workflow → Subscription Model: loads subscription
- User Model → MongoDB: persists data
- Subscription Model → MongoDB: persists data
- Subscription Management → Workflow Client: uses client
- Workflow Client → Upstash Workflows: triggers workflow
- Upstash Workflows → Express App: posts reminder request
- Reminder Workflow → Email Sender: sends reminder
- Email Sender → Email Templates: renders message
- Email Sender → Mail Transport: uses transport
- Mail Transport → Gmail SMTP: delivers email
