A student career predictor app for predicting career path for students in Senior Secondary School in Nigeria.
# Smart Career Portal
## Project Summary
Smart Career Portal is a Nigerian student career guidance platform built as a multi-frontend system:
- `backend/`: FastAPI REST API with JWT authentication, machine learning inference, recommendation persistence and chat history.
- `app.py`: A Streamlit dashboard that can run independently or integrate with the backend API. It includes local user authentication, grade and test capture, local ML inference, Gemini narrative generation and chatbot interaction.
- `frontend/`: A React/Vite web portal that consumes the backend API for auth, academic records, test management, recommendation generation, and conversational follow-up.
The system is powered by:
- SQLite as the primary persistence layer (`career_portal.db`).
- XGBoost-based career recommendation ML artifacts in `backend/models/`.
- Google Gemini via `google-genai` for narrative generation and AI counselling.
## System Architecture
The platform is built as a service-oriented architecture with separate user-facing UI layers and a shared backend.
```mermaid
graph TB
subgraph "Frontend Layer"
React[React / Vite Web App Main Production Frontend]
Streamlit[Streamlit Dashboard Mock / Testing App]
end
subgraph "Backend Layer"
FastAPI[FastAPI REST API Server Core Business Logic]
SQLite[SQLite Database Users, Results, Tests, Recommendations, Chat]
ML[XGBoost ML Models Career Prediction]
Gemini[Google Gemini API Narrative & AI Chat]
end
subgraph "External Services"
Render[Render.com Hosting FastAPI]
StreamlitCloud[Streamlit Cloud Hosting Mock App]
end
React -->|JWT Auth + REST API Calls| FastAPI
Streamlit -->|REST API Calls / Local ML| FastAPI
Streamlit -.->|Testing Only| FastAPI
FastAPI -->|Persistence| SQLite
FastAPI -->|ML Inference| ML
FastAPI -->|Narrative Generation & Chat| Gemini
style React fill:#e3f2fd,stroke:#1565c0,stroke-width:3px
style Streamlit fill:#f1f8e9,stroke:#689f38,stroke-width:2px,stroke-dasharray: 5 5
style FastAPI fill:#f3e5f5,stroke:#7b1fa2,stroke- …