Learning platform
- 10 Django applications
- ≈20,800 lines
The constraint
Shared cPanel under Passenger and WSGI: no root, no containers, no systemd, no persistent workers — and a live WordPress site whose users had to come across without anyone being asked to reset a password.
The decision
No LMS, CMS or e-commerce library. The quiz engine, grading, progress tracking and certificate generation are all first-party code, because the libraries that would have done that work could not survive the deployment target.
The evidence
- A deliberate policy of no LMS, CMS or e-commerce library: the quiz engine, grading, progress tracking and certificate generation are first-party code.
- The WordPress migration brings users across intact: it verifies WordPress 6.8 $wp$2y$ hashes — a SHA-384 pre-hash plus bcrypt — and implements the legacy phpass $P$ scheme in pure Python, so nobody has to reset a password.
- Django
- Python
- MariaDB
- MySQL
- Passenger / WSGI
- Django migrations
- GitHub Actions
- pytest