# vishal-gaikwad17/bookshelf-studentresourcesharing architecture

> Architecture diagram of the GitHub repository vishal-gaikwad17/bookshelf-studentresourcesharing, 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/vishal-gaikwad17/bookshelf-studentresourcesharing
- Repository: https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing

## Overview

StudyShelf is a student resource-sharing platform. Students sign in, upload files with resource metadata, browse and filter shared materials, then view, download, bookmark, or comment on resources. The graph includes the documented dashboard and theme capabilities; sampled route handlers support the backend calls and persistence shown. Page-level wiring and some UI behavior are described by the README but were not sampled, so those connections are limited to documented workflows.

Main entry points: [`app/api/resources/[id]/route.ts`](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/route.ts) (Resource management), [`lib/db.ts`](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/db.ts) (Database connection), [`lib/auth.ts`](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/auth.ts) (JWT utilities), [`app/api/resources/route.ts`](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/route.ts) (Resource feed API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_student_ui["Student experience"]
  node_home["Resource feed<br/>[page.tsx]"]
  node_detail["Resource details<br/>[page.tsx]"]
  node_upload_ui["Upload form<br/>[page.tsx]"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_bookmarks_ui["Saved resources<br/>[page.tsx]"]
  node_auth_ui["Sign in/up<br/>[page.tsx]"]
  node_auth_context["Auth state<br/>[AuthContext.tsx]"]
  node_theme["Theme state<br/>[ThemeContext.tsx]"]
end

subgraph group_api["Application API"]
  node_auth_api["Auth endpoints<br/>[route.ts]"]
  node_resources_api["Resource feed API<br/>[route.ts]"]
  node_resource_api["Resource management<br/>[route.ts]"]
  node_upload_api["File upload API<br/>[route.ts]"]
  node_bookmark_api["Bookmark API<br/>[route.ts]"]
  node_toggle_bookmark_api["Bookmark toggle<br/>[route.ts]"]
  node_comments_api["Comments and ratings<br/>[route.ts]"]
  node_download_api["Download tracking<br/>[route.ts]"]
end

subgraph group_data["Domain data"]
  node_auth_lib["JWT utilities<br/>[auth.ts]"]
  node_db_lib["Database connection<br/>[db.ts]"]
  node_resource_model["Resource model<br/>[Resource.ts]"]
  node_user_model["User model<br/>[User.ts]"]
  node_bookmark_model["Bookmark model<br/>[Bookmark.ts]"]
  node_comment_model["Comment model<br/>[Comment.ts]"]
  node_cloudinary_lib["Cloudinary client<br/>[cloudinary.ts]"]
end

subgraph group_services["External services"]
  node_mongodb[("MongoDB")]
  node_cloudinary[("Cloudinary storage")]
end

node_student(("Student"))

node_student -->|"browses"| node_home
node_student -->|"signs in"| node_auth_ui
node_student -->|"uploads"| node_upload_ui
node_student -->|"views"| node_detail
node_student -->|"manages uploads"| node_dashboard
node_student -->|"views saved"| node_bookmarks_ui
node_auth_ui -->|"uses auth state"| node_auth_context
node_auth_context -->|"checks and updates"| node_auth_api
node_home -->|"searches and filters"| node_resources_api
node_dashboard -->|"loads own uploads"| node_resources_api
node_dashboard -->|"edits and deletes"| node_resource_api
node_upload_ui -->|"sends file"| node_upload_api
node_upload_ui -->|"creates metadata"| node_resources_api
node_detail -->|"loads resource"| node_resource_api
node_detail -->|"loads and posts"| node_comments_api
node_detail -->|"toggles saved state"| node_toggle_bookmark_api
node_detail -->|"requests download"| node_download_api
node_bookmarks_ui -->|"loads saved items"| node_bookmark_api
node_theme -->|"provides theme state"| node_student
node_auth_api -->|"signs and verifies"| node_auth_lib
node_auth_api -->|"connects"| node_db_lib
node_auth_api -->|"reads and writes users"| node_user_model
node_resources_api -->|"checks identity"| node_auth_lib
node_resources_api -->|"connects"| node_db_lib
node_resources_api -->|"queries and creates"| node_resource_model
node_upload_api -->|"checks identity"| node_auth_lib
node_upload_api -->|"uploads file"| node_cloudinary_lib
node_cloudinary_lib -->|"stores file"| node_cloudinary
node_resource_api -->|"checks identity"| node_auth_lib
node_resource_api -->|"connects"| node_db_lib
node_resource_api -->|"reads and changes"| node_resource_model
node_resource_api -->|"deletes related comments"| node_comment_model
node_resource_api -->|"deletes related bookmarks"| node_bookmark_model
node_resource_api -->|"deletes stored file"| node_cloudinary
node_bookmark_api -->|"checks identity"| node_auth_lib
node_bookmark_api -->|"connects"| node_db_lib
node_bookmark_api -->|"loads saved items"| node_bookmark_model
node_toggle_bookmark_api -->|"checks identity"| node_auth_lib
node_toggle_bookmark_api -->|"connects"| node_db_lib
node_toggle_bookmark_api -->|"toggles record"| node_bookmark_model
node_comments_api -->|"checks identity"| node_auth_lib
node_comments_api -->|"connects"| node_db_lib
node_comments_api -->|"reads and creates"| node_comment_model
node_comments_api -->|"updates rating totals"| node_resource_model
node_download_api -->|"connects"| node_db_lib
node_download_api -->|"increments count"| node_resource_model
node_db_lib -->|"connects"| node_mongodb

click node_home "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/page.tsx"
click node_detail "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/resource/%5Bid%5D/page.tsx"
click node_upload_ui "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/upload/page.tsx"
click node_dashboard "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/dashboard/page.tsx"
click node_bookmarks_ui "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/bookmarks/page.tsx"
click node_auth_ui "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/login/page.tsx"
click node_auth_context "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/context/AuthContext.tsx"
click node_theme "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/context/ThemeContext.tsx"
click node_auth_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/auth/login/route.ts"
click node_resources_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/route.ts"
click node_resource_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/route.ts"
click node_upload_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/upload/route.ts"
click node_bookmark_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/bookmarks/route.ts"
click node_toggle_bookmark_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/bookmark/route.ts"
click node_comments_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/comments/route.ts"
click node_download_api "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/download/route.ts"
click node_auth_lib "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/auth.ts"
click node_db_lib "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/db.ts"
click node_resource_model "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/Resource.ts"
click node_user_model "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/User.ts"
click node_bookmark_model "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/Bookmark.ts"
click node_comment_model "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/Comment.ts"
click node_cloudinary_lib "https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/cloudinary.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_home,node_detail,node_upload_ui,node_dashboard,node_bookmarks_ui,node_auth_ui,node_auth_context,node_theme toneBlue
class node_auth_api,node_resources_api,node_resource_api,node_upload_api,node_bookmark_api,node_toggle_bookmark_api,node_comments_api,node_download_api toneAmber
class node_auth_lib,node_db_lib,node_resource_model,node_user_model,node_bookmark_model,node_comment_model,node_cloudinary_lib toneMint
class node_mongodb,node_cloudinary toneRose
class node_student toneIndigo
```

## Components

### Student experience

- [Resource feed](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/page.tsx): `app/page.tsx`
- [Resource details](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/resource/%5Bid%5D/page.tsx): `app/resource/[id]/page.tsx`
- [Upload form](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/upload/page.tsx): `app/upload/page.tsx`
- [Dashboard](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`
- [Saved resources](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/bookmarks/page.tsx): `app/bookmarks/page.tsx`
- [Sign in/up](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/login/page.tsx): `app/login/page.tsx`
- [Auth state](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/context/AuthContext.tsx): `context/AuthContext.tsx`
- [Theme state](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/context/ThemeContext.tsx): `context/ThemeContext.tsx`

### Application API

- [Auth endpoints](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/auth/login/route.ts): `app/api/auth/login/route.ts`
- [Resource feed API](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/route.ts): `app/api/resources/route.ts`
- [Resource management](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/route.ts): `app/api/resources/[id]/route.ts`
- [File upload API](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/upload/route.ts): `app/api/upload/route.ts`
- [Bookmark API](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/bookmarks/route.ts): `app/api/bookmarks/route.ts`
- [Bookmark toggle](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/bookmark/route.ts): `app/api/resources/[id]/bookmark/route.ts`
- [Comments and ratings](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/comments/route.ts): `app/api/resources/[id]/comments/route.ts`
- [Download tracking](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/app/api/resources/%5Bid%5D/download/route.ts): `app/api/resources/[id]/download/route.ts`

### Domain data

- [JWT utilities](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/auth.ts): `lib/auth.ts`
- [Database connection](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/db.ts): `lib/db.ts`
- [Resource model](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/Resource.ts): `models/Resource.ts`
- [User model](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/User.ts): `models/User.ts`
- [Bookmark model](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/Bookmark.ts): `models/Bookmark.ts`
- [Comment model](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/models/Comment.ts): `models/Comment.ts`
- [Cloudinary client](https://github.com/vishal-gaikwad17/bookshelf-studentresourcesharing/blob/main/lib/cloudinary.ts): `lib/cloudinary.ts`

### External services

- **MongoDB**
- **Cloudinary storage**

### Other components

- **Student**

## Connections

- Student → Resource feed: browses
- Student → Sign in/up: signs in
- Student → Upload form: uploads
- Student → Resource details: views
- Student → Dashboard: manages uploads
- Student → Saved resources: views saved
- Sign in/up → Auth state: uses auth state
- Auth state → Auth endpoints: checks and updates
- Resource feed → Resource feed API: searches and filters
- Dashboard → Resource feed API: loads own uploads
- Dashboard → Resource management: edits and deletes
- Upload form → File upload API: sends file
- Upload form → Resource feed API: creates metadata
- Resource details → Resource management: loads resource
- Resource details → Comments and ratings: loads and posts
- Resource details → Bookmark toggle: toggles saved state
- Resource details → Download tracking: requests download
- Saved resources → Bookmark API: loads saved items
- Theme state → Student: provides theme state
- Auth endpoints → JWT utilities: signs and verifies
- Auth endpoints → Database connection: connects
- Auth endpoints → User model: reads and writes users
- Resource feed API → JWT utilities: checks identity
- Resource feed API → Database connection: connects
- Resource feed API → Resource model: queries and creates
- File upload API → JWT utilities: checks identity
- File upload API → Cloudinary client: uploads file
- Cloudinary client → Cloudinary storage: stores file
- Resource management → JWT utilities: checks identity
- Resource management → Database connection: connects
- Resource management → Resource model: reads and changes
- Resource management → Comment model: deletes related comments
- Resource management → Bookmark model: deletes related bookmarks
- Resource management → Cloudinary storage: deletes stored file
- Bookmark API → JWT utilities: checks identity
- Bookmark API → Database connection: connects
- Bookmark API → Bookmark model: loads saved items
- Bookmark toggle → JWT utilities: checks identity
- Bookmark toggle → Database connection: connects
- Bookmark toggle → Bookmark model: toggles record
- Comments and ratings → JWT utilities: checks identity
- Comments and ratings → Database connection: connects
- Comments and ratings → Comment model: reads and creates
- Comments and ratings → Resource model: updates rating totals
- Download tracking → Database connection: connects
- Download tracking → Resource model: increments count
- Database connection → MongoDB: connects
