# vision2050-dev/visionmysuru-2050 architecture

> Architecture diagram of the GitHub repository vision2050-dev/visionmysuru-2050, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vision2050-dev/visionmysuru-2050
- Repository: https://github.com/vision2050-dev/visionmysuru-2050

## Overview

VisionMysuru 2050 is an event and innovation-challenge platform. Visitors explore event information and social updates; participants register and submit ideas; judges evaluate submissions; administrators manage entries and shortlists. The Edition 2 Juryza workflow is backed by both server-side services and resilient browser storage. The graph follows documented routing and source references; several UI-to-API details and unsampled subsystems are not shown, so their connections are omitted rather than inferred.

Main entry points: [`client/src/App.jsx`](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/App.jsx) (Client router), [`server/index.js`](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/index.js) (API server), [`client/src/services/juryzaStorage.js`](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/services/juryzaStorage.js) (Resilient local store), [`client/src/pages/LandingPage.jsx`](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/LandingPage.jsx) (Event landing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Public event site"]
  node_app["Client router<br/>[App.jsx]"]
  node_landing["Event landing<br/>[LandingPage.jsx]"]
  node_edition["Edition archive<br/>[EditionOnePage.jsx]"]
  node_updates["Event updates<br/>[Updates.jsx]"]
  node_instagram_ui["Instagram feed UI"]
end

subgraph group_juryza["Juryza challenge"]
  node_participant["Participant portal"]
  node_gateway["Participant gateway<br/>[JuryzaGateway.jsx]"]
  node_judge["Judge hub<br/>[JuryzaHub.jsx]"]
  node_admin["Juryza admin"]
  node_browser_store[("Resilient local store<br/>[juryzaStorage.js]")]
end

subgraph group_legacy["Legacy submissions"]
  node_submission_form["Idea submission"]
  node_legacy_admin["Legacy admin<br/>[AdminDashboard.jsx]"]
end

subgraph group_backend["Server and integrations"]
  node_server["API server<br/>[index.js]"]
  node_jury_routes["Juryza routes<br/>[juryzaRoutes.js]"]
  node_jury_controller["Juryza workflows"]
  node_jury_auth["Juryza authentication<br/>[juryzaAuth.js]"]
  node_edition_model[("Edition 2 submissions")]
  node_drive["Google Drive service"]
  node_spreadsheet["Spreadsheet sync"]
  node_instagram_routes["Instagram routes<br/>[instagramRoutes.js]"]
  node_instagram_controller["Instagram feed service"]
  node_legacy_routes["Submission routes"]
  node_submission_controller["Submission processing"]
  node_legacy_models[("Submission records<br/>[Student.js]")]
  node_legacy_admin_routes["Admin routes<br/>[adminRoutes.js]"]
  node_legacy_admin_controller["Admin submission management<br/>[adminController.js]"]
end

node_visitor(("Visitor"))
node_instagram_service["Instagram"]

node_visitor -->|"opens"| node_app
node_app -->|"routes to"| node_landing
node_app -->|"routes to"| node_edition
node_app -->|"routes to"| node_participant
node_app -->|"routes to"| node_gateway
node_app -->|"routes to"| node_judge
node_app -->|"routes to"| node_admin
node_landing -->|"renders"| node_updates
node_landing -->|"renders"| node_instagram_ui
node_participant -->|"uses"| node_browser_store
node_gateway -->|"uses"| node_browser_store
node_judge -->|"uses"| node_browser_store
node_admin -->|"uses"| node_browser_store
node_server -->|"mounts"| node_jury_routes
node_server -->|"mounts"| node_legacy_routes
node_server -->|"mounts"| node_legacy_admin_routes
node_server -->|"mounts"| node_instagram_routes
node_jury_routes -->|"dispatches"| node_jury_controller
node_jury_routes -->|"verifies tokens"| node_jury_auth
node_jury_controller -->|"reads and writes"| node_edition_model
node_jury_controller -->|"syncs records"| node_spreadsheet
node_spreadsheet -->|"uses"| node_drive
node_instagram_routes -->|"dispatches"| node_instagram_controller
node_instagram_controller -->|"fetches feed"| node_instagram_service
node_legacy_routes -->|"dispatches"| node_submission_controller
node_submission_controller -->|"creates records"| node_legacy_models
node_legacy_admin_routes -->|"dispatches"| node_legacy_admin_controller
node_legacy_admin_controller -->|"reads and updates"| node_legacy_models

click node_app "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/App.jsx"
click node_landing "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/LandingPage.jsx"
click node_edition "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/EditionOnePage.jsx"
click node_updates "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/Components/landing/Updates.jsx"
click node_instagram_ui "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/Components/landing/InstagramFeedSection.jsx"
click node_participant "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/ParticipantPortal.jsx"
click node_gateway "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/JuryzaGateway.jsx"
click node_judge "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/JuryzaHub.jsx"
click node_admin "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/AdminJuryzaPlatform.jsx"
click node_browser_store "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/services/juryzaStorage.js"
click node_submission_form "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/Components/Submission/forms/useSubmissionForm.js"
click node_legacy_admin "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/AdminDashboard.jsx"
click node_server "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/index.js"
click node_jury_routes "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/juryzaRoutes.js"
click node_jury_controller "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/juryzaController.js"
click node_jury_auth "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/middleware/juryzaAuth.js"
click node_edition_model "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/models/Edition2Submission.js"
click node_drive "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/services/googleDriveService.js"
click node_spreadsheet "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/services/spreadsheetService.js"
click node_instagram_routes "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/instagramRoutes.js"
click node_instagram_controller "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/instagramController.js"
click node_legacy_routes "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/submissionRoutes.js"
click node_submission_controller "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/submissionController.js"
click node_legacy_models "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/models/Student.js"
click node_legacy_admin_routes "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/adminRoutes.js"
click node_legacy_admin_controller "https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/adminController.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_app,node_landing,node_edition,node_updates,node_instagram_ui toneBlue
class node_participant,node_gateway,node_judge,node_admin,node_browser_store toneAmber
class node_submission_form,node_legacy_admin toneMint
class node_server,node_jury_routes,node_jury_controller,node_jury_auth,node_edition_model,node_drive,node_spreadsheet,node_instagram_routes,node_instagram_controller,node_legacy_routes,node_submission_controller,node_legacy_models,node_legacy_admin_routes,node_legacy_admin_controller toneRose
class node_visitor,node_instagram_service toneIndigo
```

## Components

### Public event site

- [Client router](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Event landing](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/LandingPage.jsx): `client/src/pages/LandingPage.jsx`
- [Edition archive](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/EditionOnePage.jsx): `client/src/pages/EditionOnePage.jsx`
- [Event updates](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/Components/landing/Updates.jsx): `client/src/Components/landing/Updates.jsx`
- [Instagram feed UI](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/Components/landing/InstagramFeedSection.jsx): `client/src/Components/landing/InstagramFeedSection.jsx`

### Juryza challenge

- [Participant portal](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/ParticipantPortal.jsx): `client/src/pages/ParticipantPortal.jsx`
- [Participant gateway](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/JuryzaGateway.jsx): `client/src/pages/JuryzaGateway.jsx`
- [Judge hub](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/JuryzaHub.jsx): `client/src/pages/JuryzaHub.jsx`
- [Juryza admin](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/AdminJuryzaPlatform.jsx): `client/src/pages/AdminJuryzaPlatform.jsx`
- [Resilient local store](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/services/juryzaStorage.js): `client/src/services/juryzaStorage.js`

### Legacy submissions

- [Idea submission](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/Components/Submission/forms/useSubmissionForm.js): `client/src/Components/Submission/forms/useSubmissionForm.js`
- [Legacy admin](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/client/src/pages/AdminDashboard.jsx): `client/src/pages/AdminDashboard.jsx`

### Server and integrations

- [API server](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/index.js): `server/index.js`
- [Juryza routes](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/juryzaRoutes.js): `server/routes/juryzaRoutes.js`
- [Juryza workflows](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/juryzaController.js): `server/controllers/juryzaController.js`
- [Juryza authentication](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/middleware/juryzaAuth.js): `server/middleware/juryzaAuth.js`
- [Edition 2 submissions](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/models/Edition2Submission.js): `server/models/Edition2Submission.js`
- [Google Drive service](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/services/googleDriveService.js): `server/services/googleDriveService.js`
- [Spreadsheet sync](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/services/spreadsheetService.js): `server/services/spreadsheetService.js`
- [Instagram routes](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/instagramRoutes.js): `server/routes/instagramRoutes.js`
- [Instagram feed service](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/instagramController.js): `server/controllers/instagramController.js`
- [Submission routes](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/submissionRoutes.js): `server/routes/submissionRoutes.js`
- [Submission processing](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/submissionController.js): `server/controllers/submissionController.js`
- [Submission records](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/models/Student.js): `server/models/Student.js`
- [Admin routes](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/routes/adminRoutes.js): `server/routes/adminRoutes.js`
- [Admin submission management](https://github.com/vision2050-dev/visionmysuru-2050/blob/main/server/controllers/adminController.js): `server/controllers/adminController.js`

### Other components

- **Visitor**
- **Instagram**

## Connections

- Visitor → Client router: opens (evidence: `client/src/App.jsx`)
- Client router → Event landing: routes to (evidence: `client/src/App.jsx`)
- Client router → Edition archive: routes to (evidence: `client/src/App.jsx`)
- Client router → Participant portal: routes to (evidence: `client/src/App.jsx`)
- Client router → Participant gateway: routes to (evidence: `client/src/App.jsx`)
- Client router → Judge hub: routes to (evidence: `client/src/App.jsx`)
- Client router → Juryza admin: routes to (evidence: `client/src/App.jsx`)
- Event landing → Event updates: renders (evidence: `client/src/pages/LandingPage.jsx`)
- Event landing → Instagram feed UI: renders (evidence: `client/src/pages/LandingPage.jsx`)
- Participant portal → Resilient local store: uses
- Participant gateway → Resilient local store: uses (evidence: `client/src/pages/JuryzaGateway.jsx`)
- Judge hub → Resilient local store: uses (evidence: `client/src/pages/JuryzaHub.jsx`)
- Juryza admin → Resilient local store: uses (evidence: `client/src/pages/AdminJuryzaPlatform.jsx`)
- API server → Juryza routes: mounts (evidence: `server/index.js`)
- API server → Submission routes: mounts (evidence: `server/index.js`)
- API server → Admin routes: mounts (evidence: `server/index.js`)
- API server → Instagram routes: mounts (evidence: `server/index.js`)
- Juryza routes → Juryza workflows: dispatches (evidence: `server/routes/juryzaRoutes.js`)
- Juryza routes → Juryza authentication: verifies tokens (evidence: `server/routes/juryzaRoutes.js`)
- Juryza workflows → Edition 2 submissions: reads and writes (evidence: `server/controllers/juryzaController.js`)
- Juryza workflows → Spreadsheet sync: syncs records (evidence: `server/controllers/juryzaController.js`)
- Spreadsheet sync → Google Drive service: uses (evidence: `server/services/spreadsheetService.js`)
- Instagram routes → Instagram feed service: dispatches (evidence: `server/routes/instagramRoutes.js`)
- Instagram feed service → Instagram: fetches feed (evidence: `server/controllers/instagramController.js`)
- Submission routes → Submission processing: dispatches (evidence: `server/routes/submissionRoutes.js`)
- Submission processing → Submission records: creates records (evidence: `server/controllers/submissionController.js`)
- Admin routes → Admin submission management: dispatches (evidence: `server/routes/adminRoutes.js`)
- Admin submission management → Submission records: reads and updates (evidence: `server/controllers/adminController.js`)
