A modern, FERPA-compliant system for assigning graduate students to grading positions using automated stable matching algorithms. Replaces legacy Microsoft Access database with a robust, multi-user web application.
This system manages the assignment of approximately 150 graduate students to grading positions each semester at Vanderbilt University's Computer Science department. It automates the complex matching process between student preferences and faculty requirements while respecting various constraints and qualifications.
- Automated Matching: Modified Gale-Shapley algorithm ensures stable, fair assignments
- Excel Integration: Import/export data from existing systems (Kuali, OAS)
- Multi-User Concurrent Access: SQLite with WAL mode supports simultaneous editing
- Real-Time Updates: WebSocket-based live updates across connected users
- FERPA Compliant: Comprehensive audit logging and access controls
- Manual Overrides: Administrators can adjust automated assignments with justification
- Rich Reporting: Generate faculty feedback forms and assignment summaries
Primary Validation: System matches 80%+ of historical Fall 2024 assignments when given the same input data.
Performance Targets:
- Import 150 applications in <10 seconds
- Complete matching algorithm in <5 seconds
- Database queries return in <500ms
- 90%+ test coverage
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User's Computer โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ React Frontend (Port 3000) โ โ
โ โ โข TypeScript + shadcn/ui โ โ
โ โ โข TanStack Query for state management โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ HTTP/WebSocket โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ FastAPI Backend (Port 8000) โ โ
โ โ โข REST API endpoints โ โ
โ โ โข WebSocket for real-time updates โ โ
โ โ โข Business logic & matching algorithm โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ SQLAlchemy ORM โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ SQLite Database (WAL mode) โ โ
โ โ โข Student records & applications โ โ
โ โ โข Course details & grades โ โ
โ โ โข Faculty rankings & assignments โ โ
โ โ โข FERPA-compliant audit log โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Python 3.11+
- Node.js 18+
- Git
# Clone the repository
git clone https://github.com/vanderbilt-data-science/grade-match.git
cd grade-match
# Backend setup
cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# Initialize database
alembic upgrade head
# Start backend server
uvicorn app.main:app --reload
# Frontend setup (in new terminal)
cd frontend
npm install
npm run devAccess the application at http://localhost:3000
grade-match/
โโโ backend/
โ โโโ app/
โ โ โโโ models/ # SQLAlchemy database models
โ โ โโโ schemas/ # Pydantic validation schemas
โ โ โโโ api/ # FastAPI route handlers
โ โ โโโ services/ # Business logic & matching algorithm
โ โ โโโ utils/ # Helper functions
โ โ โโโ database.py # Database configuration (WAL mode)
โ โ โโโ main.py # FastAPI application entry
โ โโโ tests/
โ โ โโโ critical/ # Fall 2024 validation test
โ โ โโโ integration/ # Workflow tests
โ โ โโโ performance/ # Performance benchmarks
โ โโโ alembic/ # Database migrations
โ โโโ requirements.txt
โโโ frontend/
โ โโโ src/
โ โ โโโ components/ # Reusable UI components
โ โ โโโ pages/ # Application pages
โ โ โโโ lib/ # Utilities and API client
โ โ โโโ App.tsx # Main application component
โ โโโ package.json
โ โโโ vite.config.ts
โโโ docs/ # Comprehensive documentation
โโโ 00-quick-start.md
โโโ 01-project-overview.md
โโโ 02-database-schema.md
โโโ 03-api-specification.md
โโโ 04-matching-algorithm.md
โโโ 05-excel-specification.md
โโโ 06-implementation-checklist.md
โโโ 07-ferpa-security.md
โโโ 08-testing-strategy.md
- Import Student Data - Load student bio information from Kuali export
- Import Applications - Load student course preferences
- Import Course Grades - Load historical grades from OAS
- Generate Faculty Feedback Forms - Export Excel forms for each course
- Import Faculty Rankings - Load completed faculty feedback
- Prepare Matching Worksheet - Build all valid student-course combinations
- Run Matching Algorithm - Execute stable matching algorithm
- Review & Adjust - Manual overrides if needed with justification
- Finalize Assignments - Lock in final decisions
- Export Results - Generate assignment summaries and reports
The system uses a modified Gale-Shapley stable matching algorithm with the following features:
- Ranked course choices (1st through 5th)
- Validated against course availability
- Rankings: 1 (Best), 2 (Acceptable), 3 (Not Suitable)
- Tiebreaking based on:
- Previous grader experience (+100 points)
- Course grade (A+ to F scale)
- Overall GPA (0-4 scale ร 10)
- Student preference ranking
do_not_hireflag exclusion- Faculty rank 3 (not suitable) exclusion
- Course capacity limits
- Grade prerequisites
- Stability verification (no blocking pairs)
- Metrics calculation (student/faculty satisfaction)
- 80%+ historical accuracy target
Comprehensive documentation is available in the /docs directory:
- Quick Start Guide - Get up and running
- Project Overview - Architecture and requirements
- Database Schema - Complete data model
- API Specification - All endpoints documented
- Matching Algorithm - Algorithm details and logic
- Excel Specification - Import/export formats
- Implementation Checklist - 15-week roadmap
- FERPA Security - Compliance requirements
- Testing Strategy - Test approach and coverage
# Run all backend tests
cd backend
pytest
# Run with coverage report
pytest --cov=app --cov-report=html
# Run critical Fall 2024 validation test
pytest tests/critical/
# Run frontend tests
cd frontend
npm test
# Run E2E tests
npm run test:e2eThe most important test validates that the matching algorithm can recreate historical Fall 2024 assignments with 80%+ accuracy. This proves the system works correctly.
- Comprehensive audit logging of all data access
- Role-based access control (Admin, Coordinator, Faculty, Read-Only)
- PII encryption at rest for sensitive fields
- Secure file permissions and data handling
- 7-year audit log retention
- Input validation on all endpoints (Pydantic schemas)
- SQL injection prevention (SQLAlchemy ORM)
- Secure file upload handling
- Generic error messages (no info leakage)
cd backend
source venv/bin/activate
# Run development server with auto-reload
uvicorn app.main:app --reload
# Run linters
black app/
ruff check app/
mypy app/
# Create new migration
alembic revision --autogenerate -m "Description"
# Apply migrations
alembic upgrade headcd frontend
# Development server
npm run dev
# Linting
npm run lint
# Type checking
npm run type-check
# Build for production
npm run buildSystem runs entirely on local machine - no cloud dependencies required.
Can be deployed on shared network drive with:
- Multiple users accessing same SQLite database
- WAL mode ensuring concurrent access safety
- HTTPS/TLS for secure connections
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Write tests for all new features (90%+ coverage target)
- Follow Python style guide (black + ruff)
- Use TypeScript strict mode
- Update documentation for API changes
- Ensure FERPA compliance for data handling
This project is licensed under the MIT License - see the LICENSE file for details.
Vanderbilt University Data Science Institute
- Computer Science department for requirements and historical data
- Carter and Graham for domain expertise and user testing
- Student graders who will benefit from improved assignment process
For questions or issues:
- Create an issue in this repository
- Contact: Vanderbilt Data Science Institute
- Documentation: See
/docsdirectory
- Complete system specifications
- Phase 1: Core backend (Weeks 1-2)
- Phase 2: Excel processing (Weeks 3-4)
- Phase 3: Matching algorithm (Weeks 5-6)
- Phase 4: Frontend UI (Weeks 7-10)
- Phase 5: Real-time features (Week 11)
- Phase 6: Integration & testing (Weeks 12-13)
- Phase 7: Documentation & deployment (Week 14)
- Phase 8: Training & handoff (Week 15)
Built with โค๏ธ by Vanderbilt Data Science