Deploy job SSHes to production after ruff/pytest/architecture pass,
running scripts/deploy.sh (stash, pull, docker rebuild, migrate, health check).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
act_runner executes jobs in Docker containers on the same network as
service containers. Use service name (postgres:5432) instead of
localhost with port mapping.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Production PostgreSQL already uses port 5432 on the host. The CI
test database now maps to port 5433.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The act_runner containers don't support uv sync virtual environments
properly. Using --system installs directly into the system Python,
making all tools available on PATH.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Gitea Actions runner containers don't expose .venv/bin on the
expected path. Using uv run lets uv resolve the correct environment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract login/dashboard from billing module into core (matching admin pattern)
- Add merchant auth API with path-isolated cookies (path=/merchants)
- Add merchant base layout with sidebar/header partials and Alpine.js init
- Add frontend detection and login redirect for MERCHANT type
- Wire merchant token in shared api-client.js (get/clear)
- Migrate billing templates to merchant base with dark mode support
- Fix Tailwind: rename shop→storefront in sources and config
- DRY Makefile tailwind targets with TAILWIND_FRONTENDS loop
- Rebuild all Tailwind outputs (production minified)
- Add Gitea Actions CI workflow (ruff, pytest, architecture, docs)
- Add Gitea deployment documentation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>