This repository bootstraps the Drink Exchange platform with a full-stack Django/Channels backend, a SvelteKit frontend, and the tooling needed to keep both environments aligned locally and in CI.
uv (used by backend tooling and CI).codex CLI if you plan to run the scripted ticket workflow.uv available at the command line.cp .env.example .env
make up (runs docker compose up --build under the hood).cd backend
uv run python manage.py migrate
uv run python manage.py createsuperuser
Use the remaining helpers in Makefile whenever you want to stop the stack, tail logs, run the frontend dev server, or probe the WebSocket endpoint; they mirror the CI commands so your local setup stays aligned.
cd frontend
pnpm dev
http://localhost:5173/board/main-stage in a browser to view the board.GET /api/bars/<bar_id>/market/ and upgrades via /ws/market/<bar_id>/.backend/: Django 6 with Channels, ASGI, pytest, uv-managed dependencies, and Celery worker/beat.frontend/: SvelteKit + Skeleton UI, pnpm-managed, PWA basics, WebSocket utilities for the big-screen views.docs/: Architecture notes, ticket backlog, and setup order (docs/tickets/setup/ORDER.md).scripts/: Helper scripts such as codex_start_process.sh.uv sync --frozen, uv run ruff, uv run pytest.pnpm lint, pnpm build..github/workflows (see 07-ci-backend.md, 08-ci-frontend.md, 09-pre-commit-workflow.md
for descriptions).Run pre-commit install from the repo root after installing deps so the hooks run automatically before each commit. They wire Ruff (backend via backend/pyproject.toml), ESLint/Prettier (frontend via the PNPM tools), and markdownlint plus whitespace/key fixers so documentation and architecture rules stay aligned.
from __future__ import annotations; the project keeps annotation evaluation standard and relies on
explicit typing imports.gettext_lazy) to keep the UI ready for localization.ModelAdmin lives in its own file, the app-level admin/__init__.py imports
those classes directly (no importlib.import_module) and re-exports them via an explicit
__all__ = ["ActiveEventAdmin", "EventDefinitionAdmin"] so Django still registers them while the
single-class-per-file rule is preserved.__all__ declaration (e.g., __all__ = ["ActiveEvent", "EventDefinition"])
inside __init__.py, even if the module only wires admin imports, so the exports stay predictable for importers.ambient_toolbox.models.CommonInfo and pair the admin class with
CommonInfoAdminMixin, while leaving CurrentRequestMiddleware enabled so ownership fields (created_by,
created_at, lastmodified_by, lastmodified_at) stay accurate and the admin keeps those fields read-only unless a
subclass overrides get_user_obj() or sets ALWAYS_UPDATE_FIELDS = False (see
the Ambient Toolbox CommonInfo docs
for the available audit fields and helpers).Meta inner classes; their configuration should be documented using inline comments if
needed.Once dependencies are in place, follow docs/tickets/setup/ORDER.md to tackle the remaining setup tickets in sequence.
Make sure pre-commit and CI workflows run after the local helper commands are working.