DEV Community

Sandro Hu
Sandro Hu

Posted on

Building WeRemember in Public — Day 1: Django project setup

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:

  • uv as package manager — fast, modern, handles virtualenv automatically
  • Python 3.12 pinned via .python-version
  • Split settingsbase.py, development.py, production.py living in config/settings/
  • django-environ for environment variables with an APP_ 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)