Author SHA1 Message Date
westfarn 7bd68dc3a1 Wire template CI/deploy to master and the app_catalog slug.
Bootstrap rewrites --app client_site to the catalog key (print_forge, etc). CI was still on main, so cloned clients would never hit server-infra.
2026-09-06 20:31:41 -05:00
westfarn 0860457ce2 Add a shop sales dashboard with 30-day charts.
Portal Retail gets a Sales page for paid/fulfilled volume, daily bars, and top products so FEATURE_SHOP sites can see store performance without a third-party analytics tool.

Closes #7
2026-09-06 10:34:33 -05:00
westfarn 80a5f5dadf Add shop, POS sync, event ticketing, and shipping catalog apps.
Clients can run in-house retail without Shopify while keeping the same
Docker/Django/Postgres stack and data-ownership promise. Closes #5.
2026-09-06 06:29:50 -05:00
5 changed files with 10 additions and 6 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ name: CI
on: on:
pull_request: pull_request:
branches: [main] branches: [master]
jobs: jobs:
test: test:
+3 -2
View File
@@ -3,7 +3,7 @@ name: Deploy Beta
on: on:
push: push:
branches: branches:
- main - master
jobs: jobs:
unit-tests: unit-tests:
@@ -45,7 +45,7 @@ jobs:
COMPOSE_DATABASE_URL DJANGO_ENV DJANGO_SECRET_KEY DJANGO_DEBUG \ COMPOSE_DATABASE_URL DJANGO_ENV DJANGO_SECRET_KEY DJANGO_DEBUG \
DJANGO_ALLOWED_HOSTS || true DJANGO_ALLOWED_HOSTS || true
PROJECT="client-ci-${{ gitea.sha }}" PROJECT="client_site-ci-${{ gitea.sha }}"
cleanup() { docker compose -p "$PROJECT" down -v --remove-orphans || true; } cleanup() { docker compose -p "$PROJECT" down -v --remove-orphans || true; }
trap cleanup EXIT trap cleanup EXIT
@@ -66,6 +66,7 @@ jobs:
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy
steps: steps:
# --app MUST match server-infra app_catalog (this package slug).
- name: Deploy client_site beta to all webservers - name: Deploy client_site beta to all webservers
run: | run: |
"$SERVER_INFRA_ROOT/scripts/deploy.sh" \ "$SERVER_INFRA_ROOT/scripts/deploy.sh" \
+2 -1
View File
@@ -43,7 +43,7 @@ jobs:
COMPOSE_DATABASE_URL DJANGO_ENV DJANGO_SECRET_KEY DJANGO_DEBUG \ COMPOSE_DATABASE_URL DJANGO_ENV DJANGO_SECRET_KEY DJANGO_DEBUG \
DJANGO_ALLOWED_HOSTS || true DJANGO_ALLOWED_HOSTS || true
PROJECT="client-ci-${{ gitea.sha }}" PROJECT="client_site-ci-${{ gitea.sha }}"
cleanup() { docker compose -p "$PROJECT" down -v --remove-orphans || true; } cleanup() { docker compose -p "$PROJECT" down -v --remove-orphans || true; }
trap cleanup EXIT trap cleanup EXIT
@@ -64,6 +64,7 @@ jobs:
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy
steps: steps:
# --app MUST match server-infra app_catalog (this package slug).
- name: Deploy client_site prod to all webservers - name: Deploy client_site prod to all webservers
run: | run: |
"$SERVER_INFRA_ROOT/scripts/deploy.sh" \ "$SERVER_INFRA_ROOT/scripts/deploy.sh" \
+3 -1
View File
@@ -43,7 +43,9 @@ cp .env.prod.example ~/Documents/secrets/acme_site/acme_site_prod.env
# Flip only purchased FEATURE_* flags. Fill provider secrets. # Flip only purchased FEATURE_* flags. Fill provider secrets.
./scripts/validate-env.sh ~/Documents/secrets/acme_site/acme_site_prod.env ./scripts/validate-env.sh ~/Documents/secrets/acme_site/acme_site_prod.env
# 5. Infra: Postgres on 10.0.0.230, server-infra app_catalog, NPM, CI. # 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
# 6. Deploy. Create a portal user (createsuperuser). # 6. Deploy. Create a portal user (createsuperuser).
``` ```
+1 -1
View File
@@ -128,7 +128,7 @@ done
if ((${#missing[@]} > 0)); then if ((${#missing[@]} > 0)); then
echo "Missing required environment variables in $ENV_FILE:" >&2 echo "Missing required environment variables in $ENV_FILE:" >&2
printf ' - %s\n' "${missing[@]}" >&2 printf ' - %s\n' "${missing[@]}" >&2
echo "Copy .env.prod.example to ~/Documents/secrets/<slug>_site/<slug>_site_${DJANGO_ENV}.env and set values." >&2 echo "Copy .env.prod.example to ~/Documents/secrets/<slug>/<slug>_${DJANGO_ENV}.env and set values." >&2
exit 1 exit 1
fi fi