How radebeneo/subscription-tracker works
Subscription Tracker is an Express API for account identity and recurring-subscription management. Users sign up or sign in, or authenticate through Clerk; authenticated requests reach profile or subscription endpoints, where subscriptions are stored and creation schedules an Upstash reminder workflow. That workflow checks renewal status and sends reminder email at 7, 5, 2, and 1 days before renewal. The graph also preserves the documented security and persistence layers. Some subsystem links rely on README or SOURCE INDEX references because their implementation excerpts were not provided.
Main entry points: app.js Express application · subscription.routes.js Subscription routes · user.model.js User model · subscription.controller.js Subscription handlers
Components 27
API and access
- Express application
app.js - Auth routes
routes/auth.routes.js - Signup and login
controllers/auth.controller.js - User routes
routes/user.routes.js - User profile
controllers/user.controller.js - JWT authorization
middlewares/auth.middleware.js
Identity
- Identity routes
routes/identity.routes.js - Clerk authorization
middlewares/clerk-auth.middleware.js - Clerk token verifier
services/clerk-verifier.js - Identity handlers
controllers/identity.controller.js - Identity resolution
services/identity-service.js - Clerk profile lookup
services/clerk-profile.js
Subscriptions
- Subscription routes
routes/subscription.routes.js - Subscription handlers
controllers/subscription.controller.js - Owned subscriptions
services/owned-subscription-service.js
Reminder delivery
- Workflow route
routes/workflow.routes.js - Reminder workflow
controllers/workflow.controller.js - Email delivery
utils/send-email.js - Reminder template
utils/email-template.js - Upstash workflow service
config/upstash.js - Mailer configuration
config/nodemailer.js
Persistence and security
- User model
models/user.model.js - Subscription model
models/subscription.model.js - MongoDB connection
database/mongodb.js - Arcjet protection
middlewares/arcjet.middleware.js - Arcjet configuration
config/arcjet.js
Other components
- API client
Connections 38
- API client → Express application: sends requests
README.md - Express application → Auth routes: mounts auth
app.js - Express application → Identity routes: mounts identity
app.js - Express application → User routes: mounts users
app.js - Express application → Subscription routes: mounts subscriptions
app.js - Express application → Workflow route: mounts workflows
app.js - Express application → MongoDB connection: connects database
app.js - Express application → Arcjet protection: uses protection
app.js - Auth routes → Signup and login: dispatches
routes/auth.routes.js - Signup and login → User model: reads and creates
controllers/auth.controller.js - API client → Identity routes: requests identity
README.md - Identity routes → Clerk authorization: authorizes
routes/identity.routes.js - Clerk authorization → Clerk token verifier: verifies token
middlewares/clerk-auth.middleware.js - Identity routes → Identity handlers: dispatches
routes/identity.routes.js - Identity handlers → Identity resolution: resolves identity
controllers/identity.controller.js - Identity resolution → User model: finds or creates
services/identity-service.js - Identity resolution → Clerk profile lookup: looks up profile
services/identity-service.js - API client → User routes: requests profile
README.md - User routes → JWT authorization: authorizes
routes/user.routes.js - User routes → User profile: dispatches
routes/user.routes.js - JWT authorization → User model: loads user
middlewares/auth.middleware.js - User profile → User model: reads profile
controllers/user.controller.js - API client → Subscription routes: manages subscriptions
README.md - Subscription routes → JWT authorization: authorizes create
routes/subscription.routes.js - Subscription routes → Clerk authorization: authorizes listing
routes/subscription.routes.js - Subscription routes → Subscription handlers: dispatches
routes/subscription.routes.js - Subscription handlers → Subscription model: creates subscription
controllers/subscription.controller.js - Subscription handlers → Upstash workflow service: triggers workflow
controllers/subscription.controller.js - Subscription handlers → Owned subscriptions: lists owned items
controllers/subscription.controller.js - Owned subscriptions → Subscription model: queries subscriptions
services/owned-subscription-service.js - Owned subscriptions → User model: checks ownership
services/owned-subscription-service.js - API client → Workflow route: workflow callback
README.md - Workflow route → Reminder workflow: dispatches
routes/workflow.routes.js - Reminder workflow → Subscription model: loads subscription
controllers/workflow.controller.js - Reminder workflow → Email delivery: sends reminders
controllers/workflow.controller.js - Email delivery → Reminder template: renders message
utils/send-email.js - Email delivery → Mailer configuration: uses transport
utils/send-email.js - Arcjet protection → Arcjet configuration: uses configuration
middlewares/arcjet.middleware.js