ā EduGrade

A secure web application for teachers to manage student grades, classes, and performance tracking. Built with Python (Quart) and JavaScript.
ā Features
- Class & Student Management - Create classes, add students, track individual performance
- Subject-Based Organization - Divide classes into multiple subjects (default subject can be renamed, e.g., "Math")
- Grade Tracking - Record grades with customizable categories, weights, and percentage-based +/~/- systems
- Student Import - Import student lists via CSV or JSON for quick class setup
- Analytics & Charts - Visual charts and detailed statistics for student performance
- PDF Export - Download and print detailed student views with grades and charts
- Grade Sharing with Students - Securely share grades with students using PIN-protected access links with expiration dates
- Customizable Categories - Define grade categories with custom weights and names
- Plus/Minus Grade System - Configurable percentage-based grading system with plus, neutral, and minus values
- Participation Tracking - Track and record student participation grades
- Grade Percentage Ranges - Customizable percentage-to-grade mapping
- Data Export/Import - Backup and restore data in JSON format
- Dark/Light Mode - Comfortable viewing in any environment
- Responsive Design - Works on desktop, tablet, and mobile
- Tutorial System - Guided onboarding for new users
ā Security
- AES-256-GCM Encryption - All user data encrypted at rest with password-derived keys
- Encrypted Grade Shares - Shared grade data is encrypted using a master key
- PBKDF2 Key Derivation - 200k iterations for password hashing, 100k for encryption keys
- 1-Hour Sessions - Short-lived sessions with automatic cleanup
- Zero-Knowledge - Server admins cannot read user data without the password
- PIN-Protected Access - Student grade access secured with 6-digit PINs
- Smart Caching - In-memory cache with heartbeat system for performance
- Automatic Share Cleanup - Expired and revoked shares are automatically removed
ā Tech Stack
| Component | Technology |
|---|
| Backend | Python 3.8+, Quart (async) |
| Frontend | HTML5, JavaScript, Tailwind CSS, Basecoat |
| Storage | JSON files with AES-256-GCM encryption |
| Charts | Chart.js |
ā Quick Start
ā š³ Docker (Recommended)
The easiest way to run EduGrade:
# Pull the latest image
docker pull redwolf2467/edugrade
# Run container (accessible at http://localhost:8080)
docker run -d \
--name edugrade \
-p 8080:1601 \
-v edugrade-data:/app/data \
--restart unless-stopped \
redwolf2467/edugrade:latest
Done! Open http://localhost:8080 in your browser.
ā Docker Compose
# Download docker-compose.yml
curl -O https://raw.githubusercontent.com/rwolf2467/EduGrade/main/docker-compose.yml
# Edit ports if needed (default: 1601:1601, change to 8080:1601 for external port 8080)
nano docker-compose.yml
# Start
docker-compose up -d
See DOCKER.mdā for more Docker options and production setup.
ā š Manual Installation
# Clone and install
git clone https://github.com/rwolf2467/edugrade.git
cd edugrade
pip install -r requirements.txt
# Run
python app.py
Open http://localhost:1601 in your browser.
ā Virtual Environment (Recommended)
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip install -r requirements.txt
ā Project Structure
edugrade/
āāā app.py # Main application, routes, auth, encryption
āāā requirements.txt # Python dependencies
āāā static/
ā āāā css/ # Styles
ā āāā i18n/ # Internationalization files
ā āāā logo.svg # Logo files
ā āāā scripts/ # JavaScript modules
āāā templates/
ā āāā index.html # Main dashboard
ā āāā login.html # Authentication page
ā āāā student_grades.html # Student grade view
āāā data/
āāā edugrade.json # Encrypted user data (auto-created)
ā Configuration
Edit app.py to customize:
| Setting | Default | Description |
|---|
| Port | 1601 | Server port |
| Session Duration | 1 hour | Login timeout |
| Debug Mode | True | Enable for development |
| Rate Limits | Various | Configurable per endpoint |
For production, change app.secret_key to a secure random string.
ā Production Deployment
- Set
debug=False in app.run()
- Use HTTPS via reverse proxy (Nginx/Apache)
- Set
secure=True for cookies
- Configure proper environment variables
- Set up logging and monitoring
ā Student Access & Sharing
Teachers can create secure grade shares for students:
- Select a class and subject to share
- Set expiration time (1 hour to 30 days)
- Configure visibility options (grades, averages, final grades, charts, etc.)
- Generate unique PINs for each student (6-digit)
- Students access their grades using the share link and their personal PIN
Students can view:
- Individual grades with color-coded badges
- Category breakdowns
- Class averages
- Performance charts
- Subject information
- Teacher name
ā Detailed Student View
Click on any student to view:
- Complete grade history with charts
- Category-wise performance breakdown
- Statistical analysis and trends
- Export to PDF for printing or archiving
- Visual performance indicators
ā License
EduGrade - Copyright (C) 2026 Fabian Murauer
Licensed under the GNU Affero General Public License v3.0ā .
- Use, study, modify, and share freely
- Modified versions must provide source code
- Credit the original author
- Cannot be made proprietary
ā Security Reporting
Report vulnerabilities via GitHub Issuesā .