# haiderimam07/doc-campus architecture

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

- Interactive diagram: https://gitdiagram.com/haiderimam07/doc-campus
- Repository: https://github.com/haiderimam07/doc-campus

## Overview

DocCampus is a student-focused resource-sharing and social platform. Users register or sign in, publish document or link posts, browse a personalized feed and profiles, then save, discuss, like, share, and follow. The backend exposes these domain stages through Fastify routes and services backed by PostgreSQL; the Next.js frontend provides feed, post, profile, saved-resource, and login experiences. The route-to-service and app-to-route links are shown where excerpts establish them. Frontend-to-backend wiring and some integrations were not sampled, so those links are omitted.

Main entry points: [`backend/src/app.ts`](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/app.ts) (Fastify app), [`backend/src/db/schema.ts`](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/db/schema.ts) (Domain schema), [`backend/src/modules/auth/auth.routes.ts`](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/auth/auth.routes.ts) (Auth routes), [`backend/src/modules/posts/posts.routes.ts`](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/posts/posts.routes.ts) (Post routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Student interface"]
  node_web["Next.js interface<br/>[layout.tsx]"]
  node_feedpages["Feed and posts<br/>[page.tsx]"]
  node_profilepages["Profiles<br/>[page.tsx]"]
  node_savedpage["Saved resources<br/>[page.tsx]"]
  node_loginui["Sign-in forms<br/>[login.tsx]"]
  node_api_client["API client<br/>[doc-campus-api.ts]"]
end

subgraph group_runtime["Backend runtime"]
  node_app["Fastify app<br/>[app.ts]"]
  node_dbplugin["Database plugin<br/>[db.ts]"]
  node_authplugin["Auth plugin<br/>[auth.ts]"]
  node_schema[("Domain schema<br/>[schema.ts]")]
  node_env["Environment config<br/>[env.ts]"]
end

subgraph group_identity["Identity and profiles"]
  node_authroutes["Auth routes<br/>[auth.routes.ts]"]
  node_authservice["Auth service<br/>[auth.service.ts]"]
  node_user_routes["User routes<br/>[users.routes.ts]"]
  node_user_service["User service<br/>[users.service.ts]"]
end

subgraph group_resources["Resources and feed"]
  node_post_routes["Post routes<br/>[posts.routes.ts]"]
  node_post_service["Post service<br/>[posts.service.ts]"]
  node_feed_routes["Feed routes<br/>[feed.routes.ts]"]
  node_feed_service["Feed service<br/>[feed.service.ts]"]
  node_upload["File storage helper<br/>[upload.ts]"]
end

subgraph group_engagement["Community engagement"]
  node_comment_routes["Comment routes<br/>[comments.routes.ts]"]
  node_comment_service["Comment service"]
  node_like_routes["Like routes<br/>[likes.routes.ts]"]
  node_like_service["Like service<br/>[likes.service.ts]"]
  node_share_routes["Share routes<br/>[shares.routes.ts]"]
  node_share_service["Share service<br/>[shares.service.ts]"]
  node_social_graph["Social graph"]
end

node_students(("Students"))

node_students -->|"use"| node_web
node_app -->|"registers"| node_authroutes
node_app -->|"registers"| node_user_routes
node_app -->|"registers"| node_post_routes
node_app -->|"registers"| node_feed_routes
node_app -->|"registers"| node_like_routes
node_app -->|"registers"| node_comment_routes
node_app -->|"registers"| node_share_routes
node_app -->|"registers"| node_dbplugin
node_app -->|"registers"| node_authplugin
node_authroutes -->|"calls"| node_authservice
node_authservice -->|"queries"| node_schema
node_authroutes -->|"reads config"| node_env
node_user_routes -->|"calls"| node_user_service
node_user_service -->|"queries"| node_schema
node_post_routes -->|"calls"| node_post_service
node_post_routes -->|"uploads files"| node_upload
node_post_service -->|"queries"| node_schema
node_feed_routes -->|"calls"| node_feed_service
node_feed_service -->|"queries"| node_schema
node_feed_service -->|"uses graph"| node_social_graph
node_comment_routes -->|"calls"| node_comment_service
node_comment_service -->|"queries"| node_schema
node_like_routes -->|"calls"| node_like_service
node_like_service -->|"queries"| node_schema
node_share_routes -->|"calls"| node_share_service
node_share_service -->|"queries"| node_schema

click node_web "https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/layout.tsx"
click node_feedpages "https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/feed/page.tsx"
click node_profilepages "https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/profile/%5Busername%5D/page.tsx"
click node_savedpage "https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/saved/page.tsx"
click node_loginui "https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/(login)/login.tsx"
click node_api_client "https://github.com/haiderimam07/doc-campus/blob/main/frontend/lib/doc-campus-api.ts"
click node_app "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/app.ts"
click node_dbplugin "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/plugins/db.ts"
click node_authplugin "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/plugins/auth.ts"
click node_schema "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/db/schema.ts"
click node_env "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/config/env.ts"
click node_authroutes "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/auth/auth.routes.ts"
click node_authservice "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/auth/auth.service.ts"
click node_user_routes "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/users/users.routes.ts"
click node_user_service "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/users/users.service.ts"
click node_post_routes "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/posts/posts.routes.ts"
click node_post_service "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/posts/posts.service.ts"
click node_feed_routes "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/feed/feed.routes.ts"
click node_feed_service "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/feed/feed.service.ts"
click node_upload "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/lib/upload.ts"
click node_comment_routes "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/comments/comments.routes.ts"
click node_comment_service "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/comments/comments.service.ts"
click node_like_routes "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/likes/likes.routes.ts"
click node_like_service "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/likes/likes.service.ts"
click node_share_routes "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/shares/shares.routes.ts"
click node_share_service "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/shares/shares.service.ts"
click node_social_graph "https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/social-graph/social-graph.service.ts"

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_web,node_feedpages,node_profilepages,node_savedpage,node_loginui,node_api_client toneBlue
class node_app,node_dbplugin,node_authplugin,node_schema,node_env toneAmber
class node_authroutes,node_authservice,node_user_routes,node_user_service toneMint
class node_post_routes,node_post_service,node_feed_routes,node_feed_service,node_upload toneRose
class node_comment_routes,node_comment_service,node_like_routes,node_like_service,node_share_routes,node_share_service,node_social_graph,node_students toneIndigo
```

## Components

### Student interface

- [Next.js interface](https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/layout.tsx): `frontend/app/layout.tsx`
- [Feed and posts](https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/feed/page.tsx): `frontend/app/feed/page.tsx`
- [Profiles](https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/profile/%5Busername%5D/page.tsx): `frontend/app/profile/[username]/page.tsx`
- [Saved resources](https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/saved/page.tsx): `frontend/app/saved/page.tsx`
- [Sign-in forms](https://github.com/haiderimam07/doc-campus/blob/main/frontend/app/(login)/login.tsx): `frontend/app/(login)/login.tsx`
- [API client](https://github.com/haiderimam07/doc-campus/blob/main/frontend/lib/doc-campus-api.ts): `frontend/lib/doc-campus-api.ts`

### Backend runtime

- [Fastify app](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/app.ts): `backend/src/app.ts`
- [Database plugin](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/plugins/db.ts): `backend/src/plugins/db.ts`
- [Auth plugin](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/plugins/auth.ts): `backend/src/plugins/auth.ts`
- [Domain schema](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/db/schema.ts): `backend/src/db/schema.ts`
- [Environment config](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/config/env.ts): `backend/src/config/env.ts`

### Identity and profiles

- [Auth routes](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/auth/auth.routes.ts): `backend/src/modules/auth/auth.routes.ts`
- [Auth service](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/auth/auth.service.ts): `backend/src/modules/auth/auth.service.ts`
- [User routes](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/users/users.routes.ts): `backend/src/modules/users/users.routes.ts`
- [User service](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/users/users.service.ts): `backend/src/modules/users/users.service.ts`

### Resources and feed

- [Post routes](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/posts/posts.routes.ts): `backend/src/modules/posts/posts.routes.ts`
- [Post service](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/posts/posts.service.ts): `backend/src/modules/posts/posts.service.ts`
- [Feed routes](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/feed/feed.routes.ts): `backend/src/modules/feed/feed.routes.ts`
- [Feed service](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/feed/feed.service.ts): `backend/src/modules/feed/feed.service.ts`
- [File storage helper](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/lib/upload.ts): `backend/src/lib/upload.ts`

### Community engagement

- [Comment routes](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/comments/comments.routes.ts): `backend/src/modules/comments/comments.routes.ts`
- [Comment service](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/comments/comments.service.ts): `backend/src/modules/comments/comments.service.ts`
- [Like routes](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/likes/likes.routes.ts): `backend/src/modules/likes/likes.routes.ts`
- [Like service](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/likes/likes.service.ts): `backend/src/modules/likes/likes.service.ts`
- [Share routes](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/shares/shares.routes.ts): `backend/src/modules/shares/shares.routes.ts`
- [Share service](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/shares/shares.service.ts): `backend/src/modules/shares/shares.service.ts`
- [Social graph](https://github.com/haiderimam07/doc-campus/blob/main/backend/src/modules/social-graph/social-graph.service.ts): `backend/src/modules/social-graph/social-graph.service.ts`

### Other components

- **Students**

## Connections

- Students → Next.js interface: use
- Fastify app → Auth routes: registers (evidence: `backend/src/app.ts`)
- Fastify app → User routes: registers (evidence: `backend/src/app.ts`)
- Fastify app → Post routes: registers (evidence: `backend/src/app.ts`)
- Fastify app → Feed routes: registers (evidence: `backend/src/app.ts`)
- Fastify app → Like routes: registers (evidence: `backend/src/app.ts`)
- Fastify app → Comment routes: registers (evidence: `backend/src/app.ts`)
- Fastify app → Share routes: registers (evidence: `backend/src/app.ts`)
- Fastify app → Database plugin: registers (evidence: `backend/src/app.ts`)
- Fastify app → Auth plugin: registers (evidence: `backend/src/app.ts`)
- Auth routes → Auth service: calls (evidence: `backend/src/modules/auth/auth.routes.ts`)
- Auth service → Domain schema: queries (evidence: `backend/src/modules/auth/auth.service.ts`)
- Auth routes → Environment config: reads config (evidence: `backend/src/modules/auth/auth.routes.ts`)
- User routes → User service: calls (evidence: `backend/src/modules/users/users.routes.ts`)
- User service → Domain schema: queries (evidence: `backend/src/modules/users/users.service.ts`)
- Post routes → Post service: calls (evidence: `backend/src/modules/posts/posts.routes.ts`)
- Post routes → File storage helper: uploads files (evidence: `backend/src/modules/posts/posts.routes.ts`)
- Post service → Domain schema: queries (evidence: `backend/src/modules/posts/posts.service.ts`)
- Feed routes → Feed service: calls (evidence: `backend/src/modules/feed/feed.routes.ts`)
- Feed service → Domain schema: queries (evidence: `backend/src/modules/feed/feed.service.ts`)
- Feed service → Social graph: uses graph (evidence: `backend/src/modules/feed/feed.service.ts`)
- Comment routes → Comment service: calls (evidence: `backend/src/modules/comments/comments.routes.ts`)
- Comment service → Domain schema: queries (evidence: `backend/src/modules/comments/comments.service.ts`)
- Like routes → Like service: calls (evidence: `backend/src/modules/likes/likes.routes.ts`)
- Like service → Domain schema: queries (evidence: `backend/src/modules/likes/likes.service.ts`)
- Share routes → Share service: calls (evidence: `backend/src/modules/shares/shares.routes.ts`)
- Share service → Domain schema: queries
