b98f504afc0ad5d29ff9ea538a3a6dcc19d36d91
Unit Tests / test (push) Successful in 11s
## Summary - Closes #23 - Admin-only invoice dashboard under `/financial/invoices` (superuser) - One-off Stripe hosted invoices + email pay link (customers pay us) - Monthly (or weekly/yearly) Stripe Checkout subscriptions + email checkout link - Webhook at `/financial/stripe/webhook/` syncs invoice/subscription status - Env docs: `STRIPE_SECRET_KEY`, `STRIPE_PUBLISHABLE_KEY`, `STRIPE_WEBHOOK_SECRET` ## Test plan - [ ] Set Stripe **test** keys in local `.env` and restart app - [ ] As superuser: Dashboard → Invoices → create one-off invoice; confirm Stripe invoice + email - [ ] As superuser: create monthly subscription; open Checkout link; complete with test card `4242…` - [ ] Configure Stripe CLI or Dashboard webhook → confirm status updates to paid/active - [ ] Non-admin user cannot open `/financial/invoices` - [ ] Prod: add live keys + webhook secret to server `.env`, migrate, restart; point webhook to `https://aimloperations.com/financial/stripe/webhook/` ## Notes Uses stdlib HTTP to Stripe API (no `stripe` PyPI package) so deploys stay dependency-light.Reviewed-on: #24
company_site
Django site for AIML Operations.
Local development (uv)
uv sync
cp .env.example .env
cd company_site
DJANGO_ENV=dev uv run python manage.py migrate
DJANGO_ENV=dev uv run python manage.py runserver
Docker (dev + Postgres)
cp .env.example .env
docker compose up --build
Environments
Set DJANGO_ENV to one of:
| Value | DEBUG default | Logging level |
|---|---|---|
dev |
true | DEBUG |
beta |
false | INFO |
prod |
false | WARNING |
Secrets and service config come from environment variables. See .env.example.
CI / deploy workflows
| Workflow | Trigger | What runs |
|---|---|---|
.gitea/workflows/ci.yml |
Pull requests to master |
Unit tests only |
.gitea/workflows/deploy.yml |
Push to master |
Unit tests → Docker build/test → deploy |
Deploy never runs on pull requests. Uses separate workflow files (not job if conditions) so Gitea runners handle it reliably.
Production deploy
Server keeps its own .env at the live site path. Deploy rsyncs code but never overwrites .env.
- On the server, copy
.env.prod.exampleto.envand fill in production values. - Run
bash scripts/validate-env.sh /path/to/.envto verify required variables. - Push to
master— the deploy workflow runsscripts/deploy.sh, which:- rsyncs checkout to live site (preserving
.env) - validates environment variables
docker compose -f docker-compose.prod.yml builddocker compose up -d- runs migrations in the web container
- rsyncs checkout to live site (preserving
Legacy venv/systemd deploy: DEPLOY_MODE=legacy bash scripts/deploy.sh <checkout>.
Languages
CSS
42.7%
JavaScript
24.3%
HTML
16.7%
Python
16%
Shell
0.3%