Issue #1 is closed. WeRemember has a running Django server — and every decision made here will affect every line of code that follows, so they're worth documenting.
What I set up
A minimal but intentional Django project structure:
-
uvas package manager — fast, modern, handles virtualenv automatically -
Python 3.12 pinned via
.python-version -
Split settings —
base.py,development.py,production.pyliving inconfig/settings/ -
django-environfor environment variables with anAPP_prefix convention -
apps/directory as a placeholder for future Django apps ## The decisions that matter
Why uv instead of pip?
One tool for everything — dependencies, virtualenv, Python version.
No more pip install, python -m venv, source .venv/bin/activate.
Just uv add and you're done.
Why split settings from day one?
It costs almost nothing now and saves a painful refactor later.
manage.py defaults to development, wsgi.py defaults to production.
Switch environments with DJANGO_SETTINGS_MODULE — no code changes needed.
Why the APP_ prefix?
SECRET_KEY and DEBUG are common variable names. Prefixing with APP_
avoids collisions with system or shell variables and makes it immediately
clear what belongs to WeRemember.
Why config/ instead of we_remember/?
Django's startproject creates a folder with the project name.
Renaming it to config/ separates configuration from application code —
a common convention that makes the structure easier to navigate.
What's next
Issue #2: full application containerization.
Django production-ready with Gunicorn and Docker — with a health check endpoint and a smoke test to verify it all works.
Post #2 of the WeRemember build-in-public series.
Short updates on X | Articles on dev.to | Code on GitHub
Top comments (0)