A personal bucket-list and to-do tracker built with Django. Sign in, write down the things you want to do, see, or become, and check them off as you get there. Each completed item is timestamped, so the list doubles as a quiet record of promises you kept to yourself.
- Account registration and authentication (Django's built-in auth system)
- Per-user lists — everyone only sees their own items
- Create, edit, and delete list items
- Mark items complete, with an automatically recorded completion date
- Search across your list
- A count of how many items are still outstanding
- Clean empty and no-results states
- Fully responsive layout, hand-written CSS, no external frameworks or CDNs
- Visible keyboard focus states and semantic form markup for accessibility
- Backend: Django 4.2 (Python)
- Database: SQLite for local development (swap
DATABASESfor Postgres in production if needed) - Frontend: Server-rendered Django templates, hand-authored vanilla CSS (no Bootstrap, Tailwind, or other frameworks/CDNs — the app renders correctly with no internet connection)
- Static files in production: WhiteNoise
- App server: Gunicorn
Screenshots live in assets/screenshots: the sign-in
page, the registration page, and the bucket list itself with a mix of open
and completed items.
- Python 3.11+ (the project also runs on Python 3.10–3.12)
- pip
git clone https://github.com/Jenks00/Bucketlist.git
cd Bucketlistpython -m venv venv
# macOS/Linux
source venv/bin/activate
# Windows
venv\Scripts\activatepip install -r requirements.txtCopy the example environment file and adjust as needed:
cp .env.example .envThen set DJANGO_SECRET_KEY, DJANGO_DEBUG, and DJANGO_ALLOWED_HOSTS. In
local development you can leave DJANGO_DEBUG=True and the defaults will
work out of the box. manage.py does not load .env automatically — either
export the variables in your shell before running the server, or use a tool
such as django-environ or python-dotenv if you would like automatic
loading.
python manage.py migratepython manage.py createsuperuserpython manage.py runserverVisit http://127.0.0.1:8000/ and register an account to get started.
Bucketlist/
├── bucketlistprj/ # Django project settings, URLs, WSGI/ASGI entry points
├── bucket_list/ # The bucket-list app: models, views, templates, static assets
│ ├── migrations/
│ ├── static/bucket_list/css/style.css
│ ├── templates/bucket_list/
│ ├── models.py
│ ├── views.py
│ └── urls.py
├── assets/screenshots/ # Screenshots used in this README
├── manage.py
├── requirements.txt
├── Procfile
└── .env.example
The project is ready to deploy to any Heroku-style platform (Heroku, Railway, Render, etc.) with no additional configuration:
Procfiledeclares the web process:web: gunicorn bucketlistprj.wsgi- WhiteNoise is wired into
MIDDLEWAREandSTATICFILES_STORAGEinsettings.py, so static files are served correctly in production without a separate static file host or CDN - Settings are environment-driven:
SECRET_KEY,DEBUG, andALLOWED_HOSTSare all read from environment variables (DJANGO_SECRET_KEY,DJANGO_DEBUG,DJANGO_ALLOWED_HOSTS), with safe local-development defaults when they are not set
To deploy:
- Provision the app on your platform of choice and connect this repository.
- Set the environment variables from
.env.examplein the platform's dashboard, using a freshly generatedDJANGO_SECRET_KEYandDJANGO_DEBUG=False. - Set
DJANGO_ALLOWED_HOSTSto the domain(s) the app will be served from. - Run
python manage.py migrateandpython manage.py collectstaticas a release/build step (most platforms run these automatically when they detect a Django project, or you can add them to a build script). - Deploy. The
Procfilewill start the app with Gunicorn.
For a persistent database in production, swap the SQLite configuration in
bucketlistprj/settings.py for a managed Postgres (or similar) database,
typically by reading a DATABASE_URL environment variable.
Released under the MIT License.


