# saicharan-nukala/skillswap architecture

> Architecture diagram of the GitHub repository saicharan-nukala/skillswap, 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/saicharan-nukala/skillswap
- Repository: https://github.com/saicharan-nukala/skillswap

## Overview

SkillSwap is a peer-to-peer skill-exchange platform. The main workflow is account creation and email verification, profile and skill-request discovery, swap response and acceptance, then chat and scheduled sessions through completion. The graph reflects the documented product capabilities and the sampled route/controller wiring; frontend API-call details and several route/controller implementations were not sampled, so uncertain connections are omitted.

Main entry points: [`skillswap-backend/server.js`](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/server.js) (HTTP and socket server), [`skillswap/src/App.jsx`](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/App.jsx) (React app), [`skillswap-backend/controllers/swapController.js`](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/swapController.js) (Swap lifecycle), [`skillswap-backend/controllers/swapRequestController.js`](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/swapRequestController.js) (Request matching)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_webapp["React app<br/>[App.jsx]"]
  node_authui["Auth screens<br/>[SignUp.jsx]"]
  node_profileui["Profile pages<br/>[ProfilePage.jsx]"]
  node_requestui["Skill requests<br/>[NewSwapsPage.jsx]"]
  node_swapui["Swap workflow<br/>[Swaps.jsx]"]
  node_chatui["Chat interface<br/>[Chats.jsx]"]
  node_sessionui["Session views"]
end

subgraph group_api["API workflows"]
  node_server["HTTP and socket server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_useroutes["User routes<br/>[userRoutes.js]"]
  node_requestroutes["Request routes"]
  node_swaproutes["Swap routes<br/>[swapRoutes.js]"]
  node_sessionroutes["Session routes<br/>[sessionRoutes.js]"]
end

subgraph group_domain["Platform domain"]
  node_authcontroller["Authentication<br/>[authController.js]"]
  node_requestcontroller["Request matching"]
  node_swapcontroller["Swap lifecycle<br/>[swapController.js]"]
  node_sessioncontroller["Session management"]
  node_userservice["Profile service<br/>[userService.js]"]
  node_users[("User records<br/>[User.js]")]
  node_requests[("Skill requests<br/>[SwapRequest.js]")]
  node_swaps[("Swaps and messages<br/>[Swap.js]")]
  node_sessions[("Sessions<br/>[Session.js]")]
end

subgraph group_realtime["Realtime and email"]
  node_email["Email delivery<br/>[emailService.js]"]
  node_mailprovider["SendGrid"]
end

node_learner(("Participant"))

node_learner -->|"uses"| node_webapp
node_webapp -->|"renders"| node_authui
node_webapp -->|"renders"| node_profileui
node_webapp -->|"renders"| node_requestui
node_webapp -->|"renders"| node_swapui
node_webapp -->|"renders"| node_chatui
node_webapp -->|"renders"| node_sessionui
node_authui -->|"API requests"| node_server
node_profileui -->|"API requests"| node_server
node_requestui -->|"API requests"| node_server
node_swapui -->|"API requests"| node_server
node_chatui -->|"chat events"| node_server
node_sessionui -->|"API requests"| node_server
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_useroutes
node_server -->|"mounts"| node_requestroutes
node_server -->|"mounts"| node_swaproutes
node_server -->|"mounts"| node_sessionroutes
node_requestroutes -->|"dispatches"| node_requestcontroller
node_swaproutes -->|"dispatches"| node_swapcontroller
node_sessionroutes -->|"dispatches"| node_sessioncontroller
node_authcontroller -->|"reads and writes"| node_users
node_authcontroller -->|"sends OTP"| node_email
node_useroutes -.-> node_userservice
node_userservice -->|"reads and updates"| node_users
node_requestcontroller -->|"reads and writes"| node_requests
node_requestcontroller -->|"creates swap"| node_swaps
node_swapcontroller -->|"reads and updates"| node_swaps
node_swapcontroller -->|"reads and updates"| node_users
node_swapcontroller -->|"deactivates"| node_requests
node_swapcontroller -->|"checks progress"| node_sessions
node_swapcontroller -->|"emits chat events"| node_server
node_sessioncontroller -->|"reads and writes"| node_sessions
node_sessioncontroller -->|"checks participant swap"| node_swaps
node_server -->|"tests delivery"| node_email
node_email -->|"sends mail"| node_mailprovider

click node_webapp "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/App.jsx"
click node_authui "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/SignUp.jsx"
click node_profileui "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/ProfilePage.jsx"
click node_requestui "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/NewSwapsPage.jsx"
click node_swapui "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/Swaps.jsx"
click node_chatui "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/Chats.jsx"
click node_sessionui "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/SessionDetailPage.jsx"
click node_server "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/server.js"
click node_authroutes "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/authRoutes.js"
click node_useroutes "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/userRoutes.js"
click node_requestroutes "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/swapRequestRoutes.js"
click node_swaproutes "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/swapRoutes.js"
click node_sessionroutes "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/sessionRoutes.js"
click node_authcontroller "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/authController.js"
click node_requestcontroller "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/swapRequestController.js"
click node_swapcontroller "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/swapController.js"
click node_sessioncontroller "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/sessionController.js"
click node_userservice "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/services/userService.js"
click node_users "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/User.js"
click node_requests "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/SwapRequest.js"
click node_swaps "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/Swap.js"
click node_sessions "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/Session.js"
click node_email "https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/services/emailService.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_webapp,node_authui,node_profileui,node_requestui,node_swapui,node_chatui,node_sessionui toneBlue
class node_server,node_authroutes,node_useroutes,node_requestroutes,node_swaproutes,node_sessionroutes toneAmber
class node_authcontroller,node_requestcontroller,node_swapcontroller,node_sessioncontroller,node_userservice,node_users,node_requests,node_swaps,node_sessions toneMint
class node_email,node_mailprovider toneRose
class node_learner toneIndigo
```

## Components

### Web client

- [React app](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/App.jsx): `skillswap/src/App.jsx`
- [Auth screens](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/SignUp.jsx): `skillswap/src/components/SignUp.jsx`
- [Profile pages](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/ProfilePage.jsx): `skillswap/src/components/ProfilePage.jsx`
- [Skill requests](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/NewSwapsPage.jsx): `skillswap/src/components/NewSwapsPage.jsx`
- [Swap workflow](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/Swaps.jsx): `skillswap/src/components/Swaps.jsx`
- [Chat interface](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/Chats.jsx): `skillswap/src/components/Chats.jsx`
- [Session views](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap/src/components/SessionDetailPage.jsx): `skillswap/src/components/SessionDetailPage.jsx`

### API workflows

- [HTTP and socket server](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/server.js): `skillswap-backend/server.js`
- [Auth routes](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/authRoutes.js): `skillswap-backend/routes/authRoutes.js`
- [User routes](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/userRoutes.js): `skillswap-backend/routes/userRoutes.js`
- [Request routes](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/swapRequestRoutes.js): `skillswap-backend/routes/swapRequestRoutes.js`
- [Swap routes](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/swapRoutes.js): `skillswap-backend/routes/swapRoutes.js`
- [Session routes](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/routes/sessionRoutes.js): `skillswap-backend/routes/sessionRoutes.js`

### Platform domain

- [Authentication](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/authController.js): `skillswap-backend/controllers/authController.js`
- [Request matching](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/swapRequestController.js): `skillswap-backend/controllers/swapRequestController.js`
- [Swap lifecycle](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/swapController.js): `skillswap-backend/controllers/swapController.js`
- [Session management](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/controllers/sessionController.js): `skillswap-backend/controllers/sessionController.js`
- [Profile service](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/services/userService.js): `skillswap-backend/services/userService.js`
- [User records](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/User.js): `skillswap-backend/models/User.js`
- [Skill requests](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/SwapRequest.js): `skillswap-backend/models/SwapRequest.js`
- [Swaps and messages](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/Swap.js): `skillswap-backend/models/Swap.js`
- [Sessions](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/models/Session.js): `skillswap-backend/models/Session.js`

### Realtime and email

- [Email delivery](https://github.com/saicharan-nukala/skillswap/blob/main/skillswap-backend/services/emailService.js): `skillswap-backend/services/emailService.js`
- **SendGrid**

### Other components

- **Participant**

## Connections

- Participant → React app: uses
- React app → Auth screens: renders
- React app → Profile pages: renders
- React app → Skill requests: renders
- React app → Swap workflow: renders
- React app → Chat interface: renders
- React app → Session views: renders
- Auth screens → HTTP and socket server: API requests
- Profile pages → HTTP and socket server: API requests
- Skill requests → HTTP and socket server: API requests
- Swap workflow → HTTP and socket server: API requests
- Chat interface → HTTP and socket server: chat events
- Session views → HTTP and socket server: API requests
- HTTP and socket server → Auth routes: mounts
- HTTP and socket server → User routes: mounts
- HTTP and socket server → Request routes: mounts
- HTTP and socket server → Swap routes: mounts
- HTTP and socket server → Session routes: mounts
- Request routes → Request matching: dispatches
- Swap routes → Swap lifecycle: dispatches
- Session routes → Session management: dispatches
- Authentication → User records: reads and writes
- Authentication → Email delivery: sends OTP
- User routes → Profile service
- Profile service → User records: reads and updates
- Request matching → Skill requests: reads and writes
- Request matching → Swaps and messages: creates swap
- Swap lifecycle → Swaps and messages: reads and updates
- Swap lifecycle → User records: reads and updates
- Swap lifecycle → Skill requests: deactivates
- Swap lifecycle → Sessions: checks progress
- Swap lifecycle → HTTP and socket server: emits chat events
- Session management → Sessions: reads and writes
- Session management → Swaps and messages: checks participant swap
- HTTP and socket server → Email delivery: tests delivery
- Email delivery → SendGrid: sends mail
