100% Vibe Coded
This project is entirely written and maintained by AI. Not a single line of code was written by a human. Built with Claude Code.
A modern school grade management application built with Python and PySide6 (Qt6).
- Grade Tracking - Record grades with type (Written/Oral/Practical), date, description, and weight
- School Years - Manage multiple school years with easy switching
- Terms - Split grades by semester (1st/2nd term)
- Subjects - Organize grades by subject with automatic averages
- Dashboard - Overview with statistics and subject cards at a glance
- Votes - Full grade list with filtering, sorting, and CRUD operations
- Subjects - Subject management with per-subject statistics
- Simulator - Calculate what grade you need to reach a target average
- Calendar - View grades plotted on a calendar with highlighted dates
- Report Card - Simulated report card with Italian rounding rules and PDF export
- Statistics - Detailed analytics with grade distribution charts
- Settings - Import/export data, manage school years
- Undo/Redo - Ctrl+Z / Ctrl+Shift+Z for grade operations
- Keyboard Shortcuts - Full keyboard navigation (see below)
- PDF Export - Export report cards to clean, minimal PDFs
- Localization - English and Italian language support (auto-detects system language)
- Onboarding - First-run wizard to set up subjects
- Cross-platform - Works on Linux, Windows, and macOS
- Native Theme - Uses system Qt theme (Breeze on KDE, native elsewhere)
| Shortcut | Action |
|---|---|
Ctrl+1-8 |
Jump to page (Dashboard, Votes, Subjects, Simulator, Calendar, Report, Statistics, Settings) |
PgUp/PgDown |
Navigate between pages |
Ctrl+Z |
Undo last grade operation |
Ctrl+Shift+Z / Ctrl+Y |
Redo |
? |
Show keyboard shortcuts help |
1 / 2 |
Switch term (on applicable pages) |
| Shortcut | Action |
|---|---|
Ctrl+N |
Add new grade |
Enter |
Edit selected grade |
Delete |
Delete selected grade |
| Shortcut | Action |
|---|---|
Ctrl+I |
Import data |
Ctrl+E |
Export data |
cd scripts && makepkg -si# Install dependencies first:
# Arch: sudo pacman -S pyside6 python-reportlab
# Debian: sudo apt install python3-pyside6 python3-reportlab
./scripts/install.sh
votetrackerpip install .
votetrackerpip install PySide6 reportlab
python -m votetrackerpip install pyinstaller
python scripts/build.py --onefile- Python 3.8+
- PySide6
- reportlab (for PDF export)
- requests (for ClasseViva integration)
Axios Italia Integration:
- Requires
lxmlfor HTML parsing# Arch Linux sudo pacman -S python-lxml # pip pip install lxml
- The Axios provider will automatically appear in Settings once lxml is installed
Data is stored in SQLite at:
- Linux:
~/.local/share/votetracker/votes.db - Windows:
%APPDATA%/votetracker/votes.db - macOS:
~/Library/Application Support/votetracker/votes.db
[
{
"subject": "Math",
"grade": 7.5,
"type": "Written",
"term": 1,
"date": "2025-01-15",
"description": "Chapter 5 test",
"weight": 1.0
}
]Also supports Italian field names: materia, voto, tipo (Scritto/Orale/Pratico), quadrimestre, data, desc, peso
votetracker/
├── src/
│ └── votetracker/
│ ├── __init__.py # Package info
│ ├── __main__.py # Entry point
│ ├── database.py # SQLite manager
│ ├── undo.py # Undo/redo manager
│ ├── i18n.py # Internationalization
│ ├── utils.py # Helpers and colors
│ ├── widgets.py # Custom Qt widgets
│ ├── dialogs.py # Dialog windows
│ ├── mainwindow.py # Main window
│ └── pages/
│ ├── dashboard.py
│ ├── votes.py
│ ├── subjects.py
│ ├── simulator.py
│ ├── calendar.py
│ ├── report_card.py
│ ├── statistics.py
│ └── settings.py
├── scripts/
│ ├── build.py # PyInstaller build script
│ ├── install.sh # Linux install script
│ ├── uninstall.sh # Linux uninstall script
│ ├── PKGBUILD # Arch Linux package
│ └── votetracker.desktop # Desktop entry
├── pyproject.toml # Python package config
└── README.md
MIT License