- β¨ Features
- ποΈ Architecture
- π οΈ Tech Stack
- π Repository Structure
- π Quick Start
- π User Flows
- π‘ API Reference
- π§ Model Training
- π Verification
- π‘ Development Tips
- π€ Contributing
- π License
| π | Smart Scholarship Recommendations Neural ranking with rule-based fallback β personalized to each student's profile |
| π | Intelligent Exam Matching Eligibility filtering + suitability scoring + neural blending for exam recommendations |
| π | Semantic Search Search scholarships by meaning, not just keywords |
| β‘ | Pre-trained Models Included Trained artefacts ( .keras) and preprocessors (.pkl) ship with the repo β no retraining needed |
| π | Real-time Stats Dashboard Live scholarship + exam statistics via combined API endpoints |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Diversion 2k26 β
ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ€
β Frontend (React+Vite) β Backend (FastAPI+Uvicorn) β
β http://localhost:5173 β http://localhost:8000 β
β β β
β ββββββββββββββββββββ β ββββββββββββββββββββββββββββββββββ β
β β Pages β β β Model Service β β
β β ββ Home β β β ββ Scholarship Recommender β β
β β ββ Scholarships ββββββΌβββΆβ ββ Exam Recommender β β
β β ββ Exams β β β ββ Text Matcher β β
β β ββ Olympiads β β β ββ Classifier β β
β β ββ Dashboard β β ββββββββββββββββ¬ββββββββββββββββββ β
β ββββββββββββββββββββ β β β
β β ββββββββββββββββΌββββββββββββββββββ β
β /api/* βββββββββββββββββΌβββΆβ Saved Models (.keras) β β
β β β Saved Preprocessors (.pkl) β β
β β β Data Files (JSON / CSV) β β
β β ββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββ
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite 7, Tailwind CSS 4, React Router, Axios |
| Backend | FastAPI, Uvicorn, Pydantic |
| ML / Data | TensorFlow / Keras, scikit-learn, pandas, NumPy |
| Dev Tooling | ESLint, PostCSS, Vite HMR |
Click to expand full tree
Diversion2k26/
βββ backend/
β βββ app.py β FastAPI server (port 8000)
β βββ model_service.py β Loads models & handles inference
β βββ requirements.txt
βββ frontend/
β βββ src/
β β βββ pages/ β Route-level page components
β β βββ components/ β Shared UI components
β β βββ services/api.js β Axios API client
β βββ vite.config.js β /api proxy β localhost:8000
β βββ package.json
βββ model/
β βββ train_models.py β Full training pipeline
β βββ quickstart.py β Quick train shortcut
β βββ saved_models/ β Pre-trained .keras files
β βββ saved_preprocessors/ β Serialized .pkl preprocessors
βββ data/ β Scholarship & exam datasets
βββ verify_system.py β Project health checker
βββ README.md
Prerequisites: Python 3.9+ Β· Node.js 18+ Β· npm 9+
git clone https://github.com/somyadipghosh/Diversion2k26_private.git
cd Diversion2k26cd backend
pip install -r requirements.txt
python app.py| URL | Description |
|---|---|
http://localhost:8000 |
API base |
http://localhost:8000/docs |
Swagger / Interactive docs |
http://localhost:8000/health |
Health check |
cd frontend
npm install
npm run devOpen http://localhost:5173 in your browser.
Vite automatically proxies all
/api/*requests from the frontend tohttp://localhost:8000.
π Scholarship Flow
User visits /scholarships or /all-scholarships
β
Frontend sends profile β POST /api/recommend
β
Backend model service:
ββ [Model loaded] β Neural recommender scoring
ββ [Fallback] β Heuristic rule-based scoring
β
Frontend displays ranked scholarships with match score
π Exam Flow
User visits /exams
β
Frontend sends student profile β POST /api/exams/recommend
β
Backend exam pipeline:
ββ Step 1: Eligibility filtering
ββ Step 2: Rule-based suitability scoring
ββ Step 3: Neural score blending (if model available)
β
Frontend displays ranked exams + score breakdown
Core Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Service metadata |
GET |
/health |
Health status (scholarship + exam systems) |
GET |
/api/combined-stats |
Aggregated stats |
Scholarship Endpoints
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/recommend |
Personalized scholarship recommendations |
POST |
/api/search |
Semantic scholarship search |
GET |
/api/search/{query} |
Search (GET variant) |
POST |
/api/classify |
Scholarship text classification |
GET |
/api/stats |
Scholarship statistics |
GET |
/api/categories |
All scholarship categories |
GET |
/api/scholarships/all |
Paginated scholarship list |
Exam Endpoints
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/exams/recommend |
Personalized exam recommendations |
GET |
/api/exams/all |
Paginated exam list with filters |
GET |
/api/exams/stats |
Exam statistics |
π Full request/response schemas live in the interactive Swagger docs when the backend is running.
Only needed if you want to retrain models from scratch. Pre-trained artefacts are already in the repo.
cd model
pip install -r requirements.txt
# Quick start (recommended)
python quickstart.py
# Full pipeline
python train_models.pyTraining output directories
model/
βββ saved_models/ β .keras model files
βββ saved_preprocessors/ β .pkl preprocessors
βββ training_logs/ β JSON training summary
βββ plots/ β Training curves
Run the built-in project health checker from the repo root:
python verify_system.py| Tip | Detail |
|---|---|
| Backend hot-reload | Uvicorn runs with reload=True β save a file, see changes instantly |
| Frontend HMR | Vite Hot Module Replacement keeps the browser in sync |
| API not reachable? | Check backend is on 8000, frontend on 5173, and proxy config in frontend/vite.config.js |
| Auth pages | /auth and /dashboard are demo-level UI β no real auth service is wired up yet |
Contributions are welcome! π
1. Fork the repository
2. Create your feature branch β git checkout -b feature/your-feature
3. Commit your changes β git commit -m "feat: add your feature"
4. Push to the branch β git push origin feature/your-feature
5. Open a Pull Request
This project is licensed under the MIT License.