Project

websiteproject

A personal Django site with a few small apps (accounts, file storage, a to-do list with email reminders, and more), self-hosted on a Raspberry Pi at home.

18 July 2025 python django web backend self-hosted
websiteproject

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.

Home page after logging in, listing the apps available on the site
Home page after logging in, listing the apps available on the site

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.

Register page, with Django’s built-in password requirements listed under the password field
Register page, with Django’s built-in password requirements listed under the password field

Login page, with a link through to registration for anyone who lands here without an account
Login page, with a link through to registration for anyone who lands here without an account

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.

To-do list with a mix of open and completed items, each showing its due and remind dates
To-do list with a mix of open and completed items, each showing its due and remind dates

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.

File View page listing three uploaded files, each with its upload date, size, and Rename/Delete buttons
File View page listing three uploaded files, each with its upload date, size, and Rename/Delete buttons

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.

Server Information page, showing the Python/Django versions and installed apps
Server Information page, showing the Python/Django versions and installed apps

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

Repo: github.com/robertscharlie/WebsiteProject