# tanyamaheshwari2010-creator/url-shortner architecture

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

- Interactive diagram: https://gitdiagram.com/tanyamaheshwari2010-creator/url-shortner
- Repository: https://github.com/tanyamaheshwari2010-creator/url-shortner

## Overview

This is an Express URL-shortening application with account login, user-scoped URL creation, redirects, and visit analytics. A browser request enters through the Express app, which dispatches routes and authentication middleware; controllers use Mongoose models for user and URL data. The root page lists a logged-in user’s URLs, while generated short IDs redirect to their destinations and record visits. The README also documents REST API support. The graph reflects sampled source; unsampled implementation details are omitted.

Main entry points: [`index.js`](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/index.js) (Express App), [`routes/user.js`](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/user.js) (User Routes), [`models/url.js`](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/models/url.js) (URL Model), [`routes/static-router.js`](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/static-router.js) (Static Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Web Application"]
  node_app["Express App<br/>[index.js]"]
  node_static_routes["Static Routes<br/>[static-router.js]"]
end

subgraph group_identity["Accounts &amp; Sessions"]
  node_user_routes["User Routes<br/>[user.js]"]
  node_user_controller["User Controller<br/>[user.js]"]
  node_auth_middleware["Auth Middleware<br/>[auth.js]"]
  node_auth_service[("Session Map<br/>[auth.js]")]
  node_url_middleware["URL Auth Gate<br/>[auth.js]"]
end

subgraph group_shortening["URL Shortening"]
  node_url_routes["URL Routes<br/>[url.js]"]
  node_url_controller["URL Controller<br/>[url.js]"]
end

subgraph group_storage["Data Persistence"]
  node_mongo_connect["Mongo Connection<br/>[connect.js]"]
  node_user_model["User Model<br/>[user.js]"]
  node_url_model["URL Model<br/>[url.js]"]
end

subgraph group_presentation["Web Views"]
  node_home["Home View<br/>[home.ejs]"]
  node_login["Login View<br/>[login.ejs]"]
  node_signup["Signup View<br/>[signup.ejs]"]
end

node_visitor(("Browser User"))
node_mongo[("MongoDB")]

node_visitor -->|"requests"| node_app
node_app -->|"connects"| node_mongo_connect
node_mongo_connect -->|"opens connection"| node_mongo
node_app -->|"mounts"| node_user_routes
node_app -->|"checks requests"| node_auth_middleware
node_app -->|"mounts"| node_static_routes
node_app -->|"guards /url"| node_url_middleware
node_app -->|"mounts"| node_url_routes
node_app -->|"looks up and records visits"| node_url_model
node_auth_middleware -->|"gets session"| node_auth_service
node_url_middleware -->|"gets session"| node_auth_service
node_user_routes -->|"dispatches"| node_user_controller
node_user_controller -->|"creates and finds users"| node_user_model
node_user_controller -->|"sets session"| node_auth_service
node_user_model -->|"persists users"| node_mongo
node_static_routes -->|"lists user URLs"| node_url_model
node_static_routes -->|"renders"| node_home
node_user_routes -->|"renders"| node_login
node_user_routes -->|"renders"| node_signup
node_url_routes -->|"dispatches"| node_url_controller
node_url_controller -->|"creates and queries URLs"| node_url_model
node_url_controller -->|"renders"| node_home
node_url_model -->|"stores URL data"| node_mongo
node_app -->|"renders test listing"| node_home
node_app -->|"redirects unauthenticated users"| node_login

click node_app "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/index.js"
click node_mongo_connect "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/connect.js"
click node_user_routes "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/user.js"
click node_user_controller "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/controllers/user.js"
click node_auth_middleware "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/middlewares/auth.js"
click node_auth_service "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/services/auth.js"
click node_user_model "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/models/user.js"
click node_static_routes "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/static-router.js"
click node_url_middleware "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/middlewares/auth.js"
click node_url_routes "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/url.js"
click node_url_controller "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/controllers/url.js"
click node_url_model "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/models/url.js"
click node_home "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/views/home.ejs"
click node_login "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/views/login.ejs"
click node_signup "https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/views/signup.ejs"

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_static_routes,node_visitor toneBlue
class node_user_routes,node_user_controller,node_auth_middleware,node_auth_service,node_url_middleware,node_mongo toneAmber
class node_url_routes,node_url_controller toneMint
class node_mongo_connect,node_user_model,node_url_model toneRose
class node_home,node_login,node_signup toneIndigo
```

## Components

### Web Application

- [Express App](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/index.js): `index.js`
- [Static Routes](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/static-router.js): `routes/static-router.js`

### Accounts & Sessions

- [User Routes](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/user.js): `routes/user.js`
- [User Controller](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/controllers/user.js): `controllers/user.js`
- [Auth Middleware](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/middlewares/auth.js): `middlewares/auth.js`
- [Session Map](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/services/auth.js): `services/auth.js`
- [URL Auth Gate](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/middlewares/auth.js): `middlewares/auth.js`

### URL Shortening

- [URL Routes](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/routes/url.js): `routes/url.js`
- [URL Controller](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/controllers/url.js): `controllers/url.js`

### Data Persistence

- [Mongo Connection](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/connect.js): `connect.js`
- [User Model](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/models/user.js): `models/user.js`
- [URL Model](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/models/url.js): `models/url.js`

### Web Views

- [Home View](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/views/home.ejs): `views/home.ejs`
- [Login View](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/views/login.ejs): `views/login.ejs`
- [Signup View](https://github.com/tanyamaheshwari2010-creator/url-shortner/blob/main/views/signup.ejs): `views/signup.ejs`

### Other components

- **Browser User**
- **MongoDB**

## Connections

- Browser User → Express App: requests
- Express App → Mongo Connection: connects
- Mongo Connection → MongoDB: opens connection
- Express App → User Routes: mounts
- Express App → Auth Middleware: checks requests
- Express App → Static Routes: mounts
- Express App → URL Auth Gate: guards /url
- Express App → URL Routes: mounts
- Express App → URL Model: looks up and records visits
- Auth Middleware → Session Map: gets session
- URL Auth Gate → Session Map: gets session
- User Routes → User Controller: dispatches
- User Controller → User Model: creates and finds users
- User Controller → Session Map: sets session
- User Model → MongoDB: persists users
- Static Routes → URL Model: lists user URLs
- Static Routes → Home View: renders
- User Routes → Login View: renders
- User Routes → Signup View: renders
- URL Routes → URL Controller: dispatches
- URL Controller → URL Model: creates and queries URLs
- URL Controller → Home View: renders
- URL Model → MongoDB: stores URL data
- Express App → Home View: renders test listing
- Express App → Login View: redirects unauthenticated users
