Author SHA1 Message Date
westfarn 9cdce7a897 Add shop, POS sync, event ticketing, and shipping catalog apps (#6)
## Summary
- Closes #5
- Optional `shop`, `pos_sync`, `events`, and `shipping` apps gated by `FEATURE_*` flags
- Deps match the catalog: shop/events need email + Stripe; POS/shipping need shop
- Portal inventory, POS webhooks, capacity tickets, EasyPost/Pirate Ship shipping

## Test plan
- [ ] `manage.py test` (152 passed locally)
- [ ] Shop cart + paid order decrements stocked inventory
- [ ] POS inbound webhook decrements SKU; paid order queues outbound reserve
- [ ] Event capacity blocks overbook; paid order emails ticket codes
- [ ] Shipping stub label + Pirate Ship CSV of unshipped paid orders
- [ ] `validate-env.sh` rejects shop without email/payments, POS/shipping without shop

Reviewed-on: #6
2026-09-06 14:00:22 -07:00
5 changed files with 6 additions and 10 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ name: CI
on:
pull_request:
branches: [master]
branches: [main]
jobs:
test:
+2 -3
View File
@@ -3,7 +3,7 @@ name: Deploy Beta
on:
push:
branches:
- master
- main
jobs:
unit-tests:
@@ -45,7 +45,7 @@ jobs:
COMPOSE_DATABASE_URL DJANGO_ENV DJANGO_SECRET_KEY DJANGO_DEBUG \
DJANGO_ALLOWED_HOSTS || true
PROJECT="client_site-ci-${{ gitea.sha }}"
PROJECT="client-ci-${{ gitea.sha }}"
cleanup() { docker compose -p "$PROJECT" down -v --remove-orphans || true; }
trap cleanup EXIT
@@ -66,7 +66,6 @@ jobs:
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy
steps:
# --app MUST match server-infra app_catalog (this package slug).
- name: Deploy client_site beta to all webservers
run: |
"$SERVER_INFRA_ROOT/scripts/deploy.sh" \
+1 -2
View File
@@ -43,7 +43,7 @@ jobs:
COMPOSE_DATABASE_URL DJANGO_ENV DJANGO_SECRET_KEY DJANGO_DEBUG \
DJANGO_ALLOWED_HOSTS || true
PROJECT="client_site-ci-${{ gitea.sha }}"
PROJECT="client-ci-${{ gitea.sha }}"
cleanup() { docker compose -p "$PROJECT" down -v --remove-orphans || true; }
trap cleanup EXIT
@@ -64,7 +64,6 @@ jobs:
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy
steps:
# --app MUST match server-infra app_catalog (this package slug).
- name: Deploy client_site prod to all webservers
run: |
"$SERVER_INFRA_ROOT/scripts/deploy.sh" \
+1 -3
View File
@@ -43,9 +43,7 @@ cp .env.prod.example ~/Documents/secrets/acme_site/acme_site_prod.env
# Flip only purchased FEATURE_* flags. Fill provider secrets.
./scripts/validate-env.sh ~/Documents/secrets/acme_site/acme_site_prod.env
# 5. Infra: add `<slug>` to server-infra app_catalog (same key CI uses as
# `--app` after bootstrap, e.g. print_forge). Postgres on 10.0.0.230, NPM.
# Secrets: ~/Documents/secrets/<slug>/<slug>_{prod,beta}.env
# 5. Infra: Postgres on 10.0.0.230, server-infra app_catalog, NPM, CI.
# 6. Deploy. Create a portal user (createsuperuser).
```
+1 -1
View File
@@ -128,7 +128,7 @@ done
if ((${#missing[@]} > 0)); then
echo "Missing required environment variables in $ENV_FILE:" >&2
printf ' - %s\n' "${missing[@]}" >&2
echo "Copy .env.prod.example to ~/Documents/secrets/<slug>/<slug>_${DJANGO_ENV}.env and set values." >&2
echo "Copy .env.prod.example to ~/Documents/secrets/<slug>_site/<slug>_site_${DJANGO_ENV}.env and set values." >&2
exit 1
fi