# yumnanoor1/scholarfit-ai architecture

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

- Interactive diagram: https://gitdiagram.com/yumnanoor1/scholarfit-ai
- Repository: https://github.com/yumnanoor1/scholarfit-ai

## Overview

FitScholar AI helps students build a profile, explore and compare scholarships, assess eligibility and financial feasibility, save opportunities, and ask scholarship questions. The React application communicates with a FastAPI API backed by SQL; a separate optional discovery process collects candidate scholarships for administrator review before publication. The graph preserves those product branches and the documented RAG capability. Several route and service implementations were not sampled, so their internal call relationships are omitted rather than inferred.

Main entry points: [`backend/main.py`](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/main.py) (FastAPI app), [`src/navigation/AppRoutes.jsx`](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/navigation/AppRoutes.jsx) (App routes), [`backend/app/database.py`](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/database.py) (SQL database), [`src/context/ProfileContext.jsx`](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/context/ProfileContext.jsx) (Profile context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_student_app["Student application"]
  node_routes["App routes<br/>[AppRoutes.jsx]"]
  node_auth_context["Auth context<br/>[AuthContext.jsx]"]
  node_auth_service["Auth client<br/>[authApi.js]"]
  node_api_client["API client<br/>[api.js]"]
  node_admin_ui["Admin workspace"]
end

subgraph group_api["API and identity"]
  node_fastapi["FastAPI app<br/>[main.py]"]
  node_auth_routes["Authentication routes<br/>[auth.py]"]
  node_profile_routes["Profile routes<br/>[profile.py]"]
  node_database[("SQL database<br/>[database.py]")]
end

subgraph group_scholarships["Scholarship workflows"]
  node_scholarship_routes["Scholarship routes<br/>[scholarships.py]"]
  node_eligibility_routes["Eligibility routes<br/>[eligibility.py]"]
  node_financial_routes["Financial feasibility"]
  node_recommendation_routes["Recommendations<br/>[recommendations.py]"]
  node_opportunity_model[("Opportunity records<br/>[opportunity.py]")]
end

subgraph group_knowledge["Knowledge and discovery"]
  node_admin_routes["Scholarship administration"]
  node_assistant_routes["Assistant routes<br/>[assistant.py]"]
  node_rag["Grounded answers<br/>[rag_service.py]"]
  node_knowledge_store[("Knowledge records")]
  node_discovery_scheduler["Discovery scheduler"]
  node_discovery_data[("Discovery records")]
end

subgraph group_state["Profiles and persistence"]
  node_profile_context["Profile context<br/>[ProfileContext.jsx]"]
  node_profile_client["Profile client<br/>[profileApi.js]"]
  node_browser_storage["Browser storage<br/>[userStorage.js]"]
  node_user_model[("User records<br/>[user.py]")]
end

node_student(("Student"))

node_student -->|"opens app"| node_routes
node_routes -->|"provides auth"| node_auth_context
node_routes -->|"provides profile"| node_profile_context
node_auth_context -->|"calls"| node_auth_service
node_profile_context -->|"loads and saves"| node_profile_client
node_profile_context -->|"reads and writes"| node_browser_storage
node_api_client -->|"HTTP requests"| node_fastapi
node_fastapi -->|"registers"| node_auth_routes
node_fastapi -->|"registers"| node_profile_routes
node_fastapi -->|"registers"| node_scholarship_routes
node_fastapi -->|"registers"| node_eligibility_routes
node_fastapi -->|"registers"| node_financial_routes
node_fastapi -->|"registers"| node_recommendation_routes
node_fastapi -->|"registers"| node_admin_routes
node_fastapi -->|"registers"| node_assistant_routes
node_fastapi -->|"creates schema"| node_database
node_rag -->|"retrieves approved documents"| node_knowledge_store
node_discovery_scheduler -.->|"records runs and candidates"| node_discovery_data
node_admin_ui -.->|"manages scholarships"| node_admin_routes
node_database -->|"persists"| node_user_model
node_database -->|"persists"| node_opportunity_model

click node_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/navigation/AppRoutes.jsx"
click node_auth_context "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/context/AuthContext.jsx"
click node_profile_context "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/context/ProfileContext.jsx"
click node_auth_service "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/authApi.js"
click node_profile_client "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/profileApi.js"
click node_browser_storage "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/userStorage.js"
click node_api_client "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/api.js"
click node_fastapi "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/main.py"
click node_auth_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/auth.py"
click node_profile_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/profile.py"
click node_scholarship_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/scholarships.py"
click node_eligibility_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/eligibility.py"
click node_financial_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/financial_feasibility.py"
click node_recommendation_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/recommendations.py"
click node_admin_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/admin_scholarships.py"
click node_assistant_routes "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/assistant.py"
click node_rag "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/services/rag_service.py"
click node_knowledge_store "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/scholarship_knowledge.py"
click node_discovery_scheduler "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/run_scholarship_discovery_scheduler.py"
click node_discovery_data "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/scholarship_discovery.py"
click node_user_model "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/user.py"
click node_opportunity_model "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/opportunity.py"
click node_database "https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/database.py"
click node_admin_ui "https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/pages/AdminScholarships.jsx"

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_routes,node_auth_context,node_auth_service,node_api_client,node_admin_ui toneBlue
class node_fastapi,node_auth_routes,node_profile_routes,node_database toneAmber
class node_scholarship_routes,node_eligibility_routes,node_financial_routes,node_recommendation_routes,node_opportunity_model toneMint
class node_admin_routes,node_assistant_routes,node_rag,node_knowledge_store,node_discovery_scheduler,node_discovery_data toneRose
class node_profile_context,node_profile_client,node_browser_storage,node_user_model,node_student toneIndigo
```

## Components

### Student application

- [App routes](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/navigation/AppRoutes.jsx): `src/navigation/AppRoutes.jsx`
- [Auth context](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/context/AuthContext.jsx): `src/context/AuthContext.jsx`
- [Auth client](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/authApi.js): `src/services/authApi.js`
- [API client](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/api.js): `src/services/api.js`
- [Admin workspace](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/pages/AdminScholarships.jsx): `src/pages/AdminScholarships.jsx`

### API and identity

- [FastAPI app](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/main.py): `backend/main.py`
- [Authentication routes](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/auth.py): `backend/app/routers/auth.py`
- [Profile routes](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/profile.py): `backend/app/routers/profile.py`
- [SQL database](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/database.py): `backend/app/database.py`

### Scholarship workflows

- [Scholarship routes](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/scholarships.py): `backend/app/routers/scholarships.py`
- [Eligibility routes](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/eligibility.py): `backend/app/routers/eligibility.py`
- [Financial feasibility](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/financial_feasibility.py): `backend/app/routers/financial_feasibility.py`
- [Recommendations](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/recommendations.py): `backend/app/routers/recommendations.py`
- [Opportunity records](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/opportunity.py): `backend/app/models/opportunity.py`

### Knowledge and discovery

- [Scholarship administration](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/admin_scholarships.py): `backend/app/routers/admin_scholarships.py`
- [Assistant routes](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/routers/assistant.py): `backend/app/routers/assistant.py`
- [Grounded answers](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/services/rag_service.py): `backend/app/services/rag_service.py`
- [Knowledge records](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/scholarship_knowledge.py): `backend/app/models/scholarship_knowledge.py`
- [Discovery scheduler](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/run_scholarship_discovery_scheduler.py): `backend/run_scholarship_discovery_scheduler.py`
- [Discovery records](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/scholarship_discovery.py): `backend/app/models/scholarship_discovery.py`

### Profiles and persistence

- [Profile context](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/context/ProfileContext.jsx): `src/context/ProfileContext.jsx`
- [Profile client](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/profileApi.js): `src/services/profileApi.js`
- [Browser storage](https://github.com/yumnanoor1/scholarfit-ai/blob/main/src/services/userStorage.js): `src/services/userStorage.js`
- [User records](https://github.com/yumnanoor1/scholarfit-ai/blob/main/backend/app/models/user.py): `backend/app/models/user.py`

### Other components

- **Student**

## Connections

- Student → App routes: opens app (evidence: `src/navigation/AppRoutes.jsx`)
- App routes → Auth context: provides auth (evidence: `src/navigation/AppRoutes.jsx`)
- App routes → Profile context: provides profile (evidence: `src/navigation/AppRoutes.jsx`)
- Auth context → Auth client: calls (evidence: `src/context/AuthContext.jsx`)
- Profile context → Profile client: loads and saves (evidence: `src/context/ProfileContext.jsx`)
- Profile context → Browser storage: reads and writes (evidence: `src/context/ProfileContext.jsx`)
- API client → FastAPI app: HTTP requests (evidence: `README.md`)
- FastAPI app → Authentication routes: registers (evidence: `backend/main.py`)
- FastAPI app → Profile routes: registers (evidence: `backend/main.py`)
- FastAPI app → Scholarship routes: registers (evidence: `backend/main.py`)
- FastAPI app → Eligibility routes: registers (evidence: `backend/main.py`)
- FastAPI app → Financial feasibility: registers (evidence: `backend/main.py`)
- FastAPI app → Recommendations: registers (evidence: `backend/main.py`)
- FastAPI app → Scholarship administration: registers (evidence: `backend/main.py`)
- FastAPI app → Assistant routes: registers (evidence: `backend/main.py`)
- FastAPI app → SQL database: creates schema (evidence: `backend/main.py`)
- Grounded answers → Knowledge records: retrieves approved documents (evidence: `backend/app/services/rag_service.py`)
- Discovery scheduler → Discovery records: records runs and candidates
- Admin workspace → Scholarship administration: manages scholarships
- SQL database → User records: persists (evidence: `backend/app/database.py`)
- SQL database → Opportunity records: persists (evidence: `backend/app/database.py`)
