No description
Find a file
Alec Perkins 950a4030ee Scaffold Phase 0: Django project, deploy config, base layout
Django 5.2 with dev/test/prod settings, SQLite tuned for Litestream
(WAL, IMMEDIATE transactions), ULID primary keys via a shared base
model, and a custom User model ahead of the first migration.

Minimal accessible base template with dark mode via color-scheme and
an optional theme picker. /healthz answers before host validation so
Fly checks pass.

Dockerfile (dev and prod targets), compose for local dev, fly.toml
with placeholder app/region, Litestream backups to B2, and a Forgejo
Actions workflow. Migrations run in bin/start because Fly release
machines don't mount volumes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 06:59:34 -04:00
.forgejo/workflows Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
bin Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
config Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
docs Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
intent Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
static Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
templates Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
tests Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
.dockerignore Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
.env.example Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
.gitignore Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
.python-version Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
compose.yaml Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
Dockerfile Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
fly.toml Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
litestream.yml Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
manage.py Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
pyproject.toml Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
README.md Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00
uv.lock Scaffold Phase 0: Django project, deploy config, base layout 2026-10-27 06:59:34 -04:00

Intent

Track the why behind features, across implementations. See docs/concept.md and docs/plan.md.

Local development

With uv:

uv sync
uv run python manage.py migrate
uv run python manage.py runserver

Or with Docker:

docker compose up --build

Then open http://localhost:8000. Data lives in data/ (uv) or the data volume (Docker).

Checks:

uv run ruff check . && uv run ruff format --check . && uv run pytest

Production

Fly.io, one machine with a volume at /data. bin/start restores the database from B2 if the volume is empty, runs migrations, and starts gunicorn under Litestream.

Secrets (fly secrets set):

Name Purpose
DJANGO_SECRET_KEY Django secret key
LITESTREAM_BUCKET, LITESTREAM_ENDPOINT, LITESTREAM_ACCESS_KEY_ID, LITESTREAM_SECRET_ACCESS_KEY B2 backup bucket
BUCKET_NAME, AWS_* Tigris uploads; set by fly storage create
SENTRY_DSN Optional error reporting

Restore drill: create a fresh volume, deploy, and confirm bin/start logs a restore before migrating.