
A personal Django site built around a few small apps: accounts, per-user file storage, a to-do list with scheduled email reminders, a page of random-generator tools, and a staff-only diagnostics page. Hosted on a Raspberry Pi at home, reachable through manually configured port forwarding and DNS. It started out as crobwebsite, and got renamed to websiteproject once it grew past a single-purpose script.

main handles accounts (register, login/logout, profile) through Django’s built-in auth, and now redirects you straight to somewhere useful after logging in instead of dropping you back on the login page. Django’s own password validators do the heavy lifting on the register form: minimum length, no fully-numeric passwords, no passwords too close to the username or email.


todo is a per-user to-do list with title, due date, an optional remind date, and now a priority level. A management command (send_reminders), meant to run on a schedule, emails users about any item whose remind date has passed and hasn’t already been sent. Editing the remind date un-marks it, so pushing it back doesn’t get silently skipped. Without SMTP configured it just prints the email to the console, which made local testing much easier.

fileManagement is per-user file storage, each file scoped to the account that uploaded it. Beyond upload and download, files can now be edited and deleted, and uploads are validated before they’re accepted. The file list shows upload date and size next to each entry, with a search box to filter by title once you’ve got more than a couple of files on there.

randomTools is a grab-bag of client-side generators on one page: coin flip, dice roller, random number, spin-the-wheel picker, magic 8-ball, password generator, colour swatch, and list shuffler. All local JavaScript, no database involved.
serverInfo is a staff-only diagnostics page (Python/Django versions, installed apps, database engine, OS/CPU/memory/disk stats) gated by Django’s is_staff flag rather than a hardcoded check.

Configuration (SECRET_KEY, DEBUG, ALLOWED_HOSTS) comes from environment variables rather than hardcoded, with a .env.example documenting what’s needed; db.sqlite3 and uploaded media/ are gitignored.
Stack: Python, Django
Status: in progress