Rebrand the Django client template as Print Forge (client_site → print_forge) with shop + shipping enabled.
Product listings support multiple photos, color variants (shared price/description/STL, per-color stock and photos), and a photo-first / 3D-second gallery.
Public pages use 3D printer / printed-toy photography instead of leftover t-shirt mockups; beta CI deploys on master.
Product page shows photo first, 3D model second; color swatches swap photos and stock
Portal can upload multiple photos and per-color qty/images; STL stays shared
Public home/about/gallery have no t-shirt mockups
manage.py test passes
After server-infra#27: beta deploy to print-forge-preview.aimloperations.com
## Summary
- Rebrand the Django client template as Print Forge (`client_site` → `print_forge`) with shop + shipping enabled.
- Product listings support multiple photos, color variants (shared price/description/STL, per-color stock and photos), and a photo-first / 3D-second gallery.
- Public pages use 3D printer / printed-toy photography instead of leftover t-shirt mockups; beta CI deploys on `master`.
Closes #1
Infra: [server-infra#27](https://git.aimloperations.com/ai_ml_operations/server-infra/issues/27) (easy deploy beta).
## Test plan
- [ ] Product page shows photo first, 3D model second; color swatches swap photos and stock
- [ ] Portal can upload multiple photos and per-color qty/images; STL stays shared
- [ ] Public home/about/gallery have no t-shirt mockups
- [ ] `manage.py test` passes
- [ ] After server-infra#27: beta deploy to `print-forge-preview.aimloperations.com`
## Summary
- Closes#3
- Portal Retail **Sales** page: 30-day orders/revenue/units/AOV, daily charts, top products
- Home dashboard cards for 30-day shop sales and revenue
- Stacks on #2. Merge that first, then retarget `master` if needed.
## Test plan
- [ ] Sales page requires login; empty state with no paid orders
- [ ] Paid/fulfilled in the last 30 days counted; unpaid/old excluded
- [ ] Home dashboard shows 30-day sales count
- [ ] `manage.py test shop`
Reviewed-on: #4
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
client_site→print_forge) with shop + shipping enabled.master.Closes #1
Infra: server-infra#27 (easy deploy beta).
Test plan
manage.py testpassesprint-forge-preview.aimloperations.com