A comprehensive web-based platform for managing Final Year Projects (FYP), from student registration through final viva evaluation. Built with modern technologies and containerized for easy deployment.
- Features
- Technology Stack
- Architecture
- Prerequisites
- Installation
- Configuration
- Usage
- Docker Deployment
- API Documentation
- Database Schema
- User Roles & Permissions
- Project Structure
- Contributing
- Authors
- License
- FYP Registration: Students register projects with supervisor assignment
- Registration Approval Workflow: Multi-stage verification (Student β Supervisor β Coordinator)
- Progress Tracking: Students submit 12 progress logs throughout the academic year
- Proposal Evaluation: Supervisors evaluate and provide feedback on proposals
- Interim Evaluations: Two-stage interim evaluation (Stage 1 & 2) with independent committee member marks
- Final Evaluation & Viva: Complete committee assignment, rubric configuration, weighted average calculation, and results publication
- Scheduling Management: Defense and evaluation schedule creation and management
- Role-Based Access Control: 4 distinct user roles with specific permissions
- β Light/Dark Theme: Persistent theme preference with localStorage
- β Responsive Design: Mobile and desktop friendly UI
- β Real-time Updates: Instant feedback and data synchronization
- β JSON Data Flexibility: Nested data storage (committees, rubrics, marks)
- β File Upload Support: Progress log attachments and proposal documents
- β Automatic Calculation: Weighted average calculation from committee marks
- β Docker Containerization: Complete containerized stack ready for deployment
- React 19.2.0 - UI library
- TypeScript - Type-safe JavaScript
- Vite - Lightning-fast build tool
- Tailwind CSS - Utility-first CSS framework
- Shadcn/ui - High-quality accessible components
- Radix UI - Headless component primitives
- React Hook Form - Efficient form management
- Lucide Icons - Beautiful icon library
- FastAPI - Modern async Python web framework
- SQLModel - Type-safe ORM (SQLAlchemy + Pydantic)
- Pydantic - Data validation using Python type hints
- PostgreSQL - Relational database (production)
- SQLite - Lightweight database (development)
- Uvicorn - ASGI server
- Docker - Container runtime
- Docker Compose - Multi-container orchestration
- Git - Version control
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (React) β
β Running on Port 5173 β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
β HTTP Requests
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backend (FastAPI) β
β Running on Port 8000 β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Routes: Registration, Scheduling, Progress, etc. β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
β SQL Queries
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Database (PostgreSQL) β
β Running on Port 5432 β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 11 Core Tables + JSON Columns β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3-Tier Architecture:
- Presentation Tier: React SPA with Tailwind & Shadcn/ui
- Application Tier: FastAPI RESTful API with async operations
- Data Tier: PostgreSQL with SQLModel ORM
- Docker Desktop / Docker Engine
- Docker Compose 2.0+
- Node.js 20+ LTS
- Python 3.11+
- PostgreSQL 15+ (or use SQLite for dev)
- Clone the repository
git clone https://github.com/WeWeBunnyX/OpenFYP.git
cd OpenFYP- Build and start all services
docker-compose up --build- Access the application
Frontend: http://localhost:5173
Backend API: http://localhost:8000
API Docs: http://localhost:8000/docs
Database: localhost:5433
That's it! β No manual setup needed. Docker handles everything.
# Install Node.js dependencies
npm install
# Start development server
npm run dev
# Accessible at http://localhost:5173# Create virtual environment
python -m venv venv
# Activate virtual environment
# On Linux/macOS:
source venv/bin/activate
# On Windows:
venv\Scripts\activate
# Install Python dependencies
pip install -r backend/requirements.txt
# Navigate to backend
cd backend
# Start FastAPI server
uvicorn app.main:app --reload --port 8000
# Accessible at http://localhost:8000# PostgreSQL (if using Docker for DB only)
docker run -d \
-e POSTGRES_USER=openfyp \
-e POSTGRES_PASSWORD=example \
-e POSTGRES_DB=fypdb \
-p 5433:5432 \
postgres:15
# Or use SQLite (included, no setup needed)DATABASE_URL=postgresql+psycopg2://openfyp:example@localhost:5433/fypdb
# Or for SQLite:
DATABASE_URL=sqlite:///./dev.db
PORT=8000
APP_TITLE=OpenFYP
DEBUG=TrueVITE_API_URL=http://localhost:8000 # Local development
# Docker: http://backend:8000 (internal)Edit docker-compose.yml to customize:
- Port mappings
- Database credentials
- Environment variables
- Volume mounts
| Role | Password | |
|---|---|---|
| Student | student@example.com | password |
| Supervisor | supervisor@example.com | password |
| Coordinator | coordinator@example.com | password |
| Committee | committee@example.com | password |
- Register FYP project
- Upload proposal document
- Submit 12 progress logs
- View evaluations and results
- Verify student registrations
- Evaluate proposals
- Review and grade progress
- Submit interim and final marks
- Approve/reject registrations
- Create defense schedules
- Assign committee members
- Manage grading rubrics
- Approve marks and publish results
- View assigned evaluations
- Submit interim marks (Stage 1 & 2)
- Submit final viva marks with feedback
β Complete Isolation: Each service in its own container β Auto-management: All dependencies handled β Easy Scaling: Add more backend instances if needed β Database Persistence: Data survives container restarts β Hot Reload: Code changes reflect instantly (dev mode) β No Local Setup: Run production-like environment anywhere
# Build and start all services
docker-compose up --build
# Start in background
docker-compose up -d
# View logs
docker-compose logs -f
# View specific service logs
docker-compose logs -f backend
# Stop all services
docker-compose stop
# Stop and remove containers
docker-compose down
# Remove everything including volumes
docker-compose down -v
# Restart services
docker-compose restart
# Rebuild specific service
docker-compose build --no-cache backendFor production, consider:
- Kubernetes: Use Helm charts for complex deployments
- AWS ECS: Elastic Container Service for managed containers
- Azure Container Instances: Serverless container deployment
- DigitalOcean App Platform: Simple container hosting
- Docker Swarm: Simple orchestration on VMs
See OpenFYP_Software_Design_Specification.docx for detailed deployment scenarios.
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
POST /login
Request: { email, password }
Response: { user: { email, name, role } }
POST /registrations - Create registration
GET /registrations - List registrations
PATCH /registrations/{id}/verify - Supervisor verify
PATCH /registrations/{id}/approve - Coordinator approve
POST /schedule - Create defense schedule
GET /schedules - List schedules
DELETE /schedules/{id} - Delete schedule
POST /api/progress/logs - Upload progress log
GET /api/progress/logs - List student progress
GET /api/progress/logs/{id}/download - Download file
POST /api/final-evaluation - Create evaluation
GET /api/final-evaluation/coordinator - List all
POST /api/final-evaluation/{id}/committee - Add committee
POST /api/final-evaluation/{id}/committee/{member_id}/marks - Submit marks
PATCH /api/final-evaluation/{id}/approve - Approve marks
POST /api/final-evaluation/{id}/publish - Publish results
For complete API specification, see the interactive docs at /docs
| Table | Purpose |
|---|---|
| User | Authentication & user profiles |
| Registration | FYP registration tracking |
| Attachment | File uploads for registrations |
| Notification | System notifications |
| Scheduling | Defense schedule management |
| InterimScheduling | Interim evaluation schedules |
| ProposalEvaluation | Proposal evaluation records |
| ProgressLog | Student progress submissions (12 per student) |
| ProgressGrading | Supervisor progress grading |
| InterimEvaluationMarks | Two-stage interim marks |
| FinalEvaluationViva | Final viva with committee marks |
- JSON columns for nested data (committees, rubrics, marks)
- Automatic timestamps (created_at, updated_at)
- Role-based data filtering
- Cascading operations (approval creates final eval)
- β Register FYP
- β Submit 12 progress logs
- β View evaluations (read-only)
- β Access settings (theme, profile)
- β Verify registrations
- β Evaluate proposals
- β Grade progress (12 submissions)
- β Submit interim marks (Stage 1, 2)
- β View supervised students' results
- β Approve/reject registrations
- β Create schedules (defense, interim)
- β Assign committee members
- β Configure grading rubric
- β Approve and publish marks
- β View system statistics
- β Submit interim marks
- β Submit final viva marks
- β Write-once policy (can't modify)
OpenFYP/
βββ src/ # Frontend (React)
β βββ components/ # UI Components
β β βββ Sidebar.tsx # Navigation
β β βββ DashboardHome.tsx # Welcome page
β β βββ ui/ # Shadcn/ui components
β βββ dashboards/ # Role-based dashboards
β β βββ StudentDashboard.tsx
β β βββ CoordinatorDashboard.tsx
β β βββ SupervisorDashboard.tsx
β β βββ CommitteeDashboard.tsx
β βββ features/ # Feature modules
β β βββ registration/
β β βββ Scheduling/
β β βββ ProgressTracking/
β β βββ FinalEvaluationandVivas/
β β βββ Interim_Evaluation/
β β βββ ...
β βββ contexts/ # React Context (Auth)
β βββ App.tsx # Main app component
β βββ main.tsx # Entry point
β
βββ backend/ # Backend (FastAPI)
β βββ app/
β β βββ main.py # FastAPI app
β β βββ models.py # SQLModel definitions
β β βββ routes_registrations.py # Auth & registration
β β βββ routes_scheduling_evaluation.py
β β βββ routes_progress.py
β β βββ routes_interim_marks.py
β β βββ routes_final_evaluations_viva.py
β β βββ utils.py # Helpers
β βββ requirements.txt
β βββ Dockerfile
β
βββ docker-compose.yml # Docker orchestration
βββ Dockerfile.frontend # Frontend container
βββ package.json
βββ vite.config.ts
βββ tsconfig.json
βββ README.md
# Frontend (if tests added)
npm run test
# Backend (if tests added)
pytest backend/# Frontend
npm run build
# Output: dist/
# Backend
# Dockerize and deploy
docker build -f backend/Dockerfile -t openfyp-backend .# Lint frontend
npm run lint
# Format code
npm run format- Software Design Specification:
OpenFYP_Software_Design_Specification.docx - Class Diagrams:
OpenFYP_Complete_Diagram.puml - API Documentation: http://localhost:8000/docs (when running)
Containers won't start
# Check logs
docker-compose logs
# Restart everything
docker-compose down && docker-compose up --buildPort already in use
# Change ports in docker-compose.yml
ports:
- "5174:5173" # Frontend
- "8001:8000" # Backend
- "5434:5432" # DatabaseDatabase connection errors
# Ensure DB service is running
docker-compose up db
# Check database credentials in docker-compose.ymlAPI calls returning 404
- Ensure
VITE_API_URLis set correctly - For Docker:
http://backend:8000 - For local:
http://localhost:8000
Theme not persisting
- Check browser localStorage (DevTools > Application)
- Clear cache and reload
Import errors
# Reinstall dependencies
pip install -r backend/requirements.txtDatabase migrations failed
# Drop and recreate tables (dev only)
# Update models.py and restartWe welcome contributions! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GPLv2 License - see the LICENSE file for details.
- Hashir Asad (@WeWeBunnyX)
- Malik Daniyal Ahmed (@danisensei)
For issues, questions, or suggestions:
- Open an issue on GitHub
- Check existing issues for solutions
- Review API documentation at
/docs
OpenFYP is designed to streamline the Final Year Project lifecycle in academic institutions. It provides a complete solution for managing student projects from registration through final evaluation, with role-based access control and comprehensive tracking capabilities.
Last Updated: December 2025
Version: 1.0.0
Status: Production Ready β
Made with β€οΈ for academic excellence