No description
  • Shell 55.8%
  • Python 26.4%
  • PowerShell 8.1%
  • Just 4.6%
  • HTML 3.1%
  • Other 2%
Find a file
dependabot[bot] 9e7f985678
Bump astral-sh/setup-uv from 10.3.0 to 10.3.1 (#34)
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 10.3.0 to 10.3.1.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](1c37ad07a6...18d369b23d)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 10.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-24 07:53:14 -07:00
.claude/skills 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
.github Bump astral-sh/setup-uv from 10.3.0 to 10.3.1 (#34) 2026-10-24 07:53:14 -07:00
.specify 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
config 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
example 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
scripts 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
specs/001-template-scaffold 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
static 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
templates 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
tests 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
.dockerignore 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
.env.example 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
.gitignore 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
.gitleaks.toml 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
.pre-commit-config.yaml 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
.python-version 📌 Pin Python to 3.14 so uv resolves psycopg-binary wheels (#33) 2026-10-23 09:34:13 -07:00
CLAUDE.md 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
compose.prod.yaml 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
compose.yaml 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
Dockerfile 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
justfile 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
LICENSE 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
manage.py 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
pyproject.toml Bump ty from 0.0.56 to 0.0.90 (#29) 2026-10-23 09:42:45 -07:00
README.md 🏗️ Add fully gated Django application template scaffold (001) 2026-07-04 16:16:31 -07:00
uv.lock Bump ty from 0.0.56 to 0.0.90 (#29) 2026-10-23 09:42:45 -07:00

template_project

A reusable Django application template: the fully gated starting point for new Django apps and sites. Fresh clone to running site in one command; every quality gate green on the untouched scaffold.

Stack: Python 3.14, Django, PostgreSQL, uv, Docker Compose, Tailwind (standalone CLI, no Node), vendored htmx. Governance lives in .specify/memory/constitution.md.

Five minutes to a running site

git clone <this-repo> myproject && cd myproject
cp .env.example .env
docker compose up -d --wait
curl localhost:8000/health/    # {"status": "ok", "database": "ok"}

The dev stack applies migrations before serving. The example app's page is at http://localhost:8000/. If ports 8000/5433 are taken on your machine, set WEB_PORT / POSTGRES_HOST_PORT in .env.

Starting a real project

python3 scripts/instantiate.py my_new_project

One pass, stdlib only, runs before any environment setup. It renames template_project everywhere (pyproject, uv.lock, compose project and image names, docs), removes the example app and every reference to it, deletes its own CI workflow and test, then prints next steps. It refuses invalid names (exit 2) and refuses to run twice (exit 3). All gates stay green afterward — CI proves this on every push via instantiation.yml.

Placeholders that need your action

Placeholder Where What to do
template_project everywhere replaced by scripts/instantiate.py
LICENSE HOLDER LICENSE put your name in the copyright line

Neither placeholder fails any gate; both are safe to leave while exploring.

Developer tasks

Everything runs through just. The full list is in the justfile; the ones you will use daily:

Recipe What it does
just up / just down start/stop the dev compose stack
just test / just test-fast full suite / reuse-db inner loop
just check lint → typecheck → zizmor → coverage-gated tests. Run before every push.
just prek-install install the git hooks (once per clone)
just tailwind rebuild the committed stylesheet

Host-side tests reach the compose database on localhost:5433.

Quality gates

Local prek hooks mirror CI; CI is authoritative and is green on first push with zero repository configuration. The gates: ruff (lint + format), ty (type check), gitleaks (secrets), zizmor (workflow audit, actions pinned by SHA), pip-audit (fail-closed), the coverage-floored pytest suite, and Django's deploy checks against the real settings module with DEBUG=false.

The coverage floor in pyproject.toml is measured, not aspirational — it only ratchets upward.

Working with Speckit and Claude Code

The ratified constitution and the Speckit templates ship in .specify/, so the specify → plan → tasks → implement chain works immediately. CLAUDE.md tells coding agents how to run, test, and gate their work.