Admin Guide¶
This guide explains how to run the Freeze Design webshop day to day from the admin dashboard. It is written for shop operators and staff (the UI is Dutch — Dutch menu labels are shown in parentheses) and doubles as an onboarding reference for new team members.
Two admin surfaces
| Surface | URL | Login | Use it for |
|---|---|---|---|
| Frontend admin (primary) | /admin |
Staff account + MFA | Everything below — orders, products, pricing, quotes, analytics |
| Django admin (low-level) | /django-admin |
Staff account (plain session) | Raw data fixes, rare edge cases. No TOTP wizard here. |
Almost all daily work happens in the frontend admin (/admin). Only reach for
Django admin when a record needs a low-level edit that the dashboard doesn't expose.
Access & security¶
- Go to
/admin/loginand sign in with your staff account (magic link or password). - Staff accounts must complete multi-factor authentication. On first login you'll be
guided through TOTP setup (authenticator app, issuer "Freeze Design Admin") and given
recovery codes — store these safely. Enforcement is handled by
StaffMFAEnforcementMiddleware; you cannot reach admin pages until MFA is set up. - Brute-force protection: after 5 failed logins the account is locked for 1 hour
(
django-axes).
Staging is protected
On staging (staging.freezedesign.eu) the whole site sits behind HTTP basic auth. The
admin is only reachable after the basic-auth gate. Production is planned, not yet live.
The dashboard at a glance¶
The sidebar groups the whole back office. Each item maps to a route under /admin:
| Section (Dutch label) | Route | What you manage |
|---|---|---|
| Dashboard | /admin |
KPIs, revenue/orders charts, quick actions, onboarding & setup-readiness |
| Orders (Bestellingen) | /admin/orders |
Order list, filters, order detail, production status, refunds, messaging |
| Production (Productie) | /admin/productie |
Production board — what to print/embroider next |
| Designs (Ontwerpen) | /admin/designs |
Customer designs + design review (approve/reject uploads) |
| Quotes (Offertes) | /admin/quotes |
B2B quote requests → quote → convert to order |
| Customers (Klanten) | /admin/customers |
Customer profiles, order history, contact |
| Products (Producten) | /admin/products |
Product CRUD, variants, images, print zones, bulk actions |
| Categories / Brands / Colors / Sizes | /admin/{categories,brands,colors,sizes} |
Catalog taxonomy |
| Pricing & discounts (Prijzen & kortingen) | /admin/pricing |
Decoration pricing engine, simulator, wizard, discounts |
| Designer assets (Designer-assets) | /admin/design-assets |
Fonts & clipart offered in the designer |
| CMS pages (Pagina's) | /admin/pages |
Legal/content pages (rich-text editor) |
| Settings (Instellingen) | /admin/settings |
Site settings, footer, feature flags, default decoration method |
| Staff & users (Staf & gebruikers) | /admin/staff |
Staff accounts & permissions |
| Payments / Invoices (Betalingen / Facturen) | /admin/{payments,invoices} |
Read-only payment log; invoice PDFs |
| Security (Beveiliging) | /admin/beveiliging |
Lockouts, login attempts |
| Audit trail (Audit Trail) | /admin/audit-logs |
Who changed what, when |
| System status (Systeemstatus) | /admin/health |
Live health checks (DB, Redis, backups) |
| Backups | /admin/backups |
Backup history & status |
The Dashboard also surfaces two guardrails for less-experienced admins:
- Onboarding checklist — the key setup steps (add a product, configure a decoration method, set store details) with live ✓/✗ status.
- Setup-readiness panel — a store-wide health check. It flags products that are not sellable yet (missing price, variants, image, or print zones) and pricing gaps, each with a deep link to the exact page to fix it.
Catalog setup¶
A product is only sellable when it passes the completeness check. Work top-down:
- Taxonomy first — create the Categories, Brands, Colors and Sizes you need. Colors and sizes become the axes of a product's variants.
- Create the product (
/admin/products→ new): name, category, base price, description. - Variants — generate the color × size matrix; set stock per variant.
- Images — upload at least one image per color.
- Print zones — define where the design can go (front/back/left/right) and, optionally, per-zone pricing (see below). Zones drive the designer overlay and the price.
Use the readiness check
The product completeness badge (also on the product list) tells you exactly what a product still needs before it can be sold. Green = ready. It checks: base price, active variants, at least one image, and at least one print zone (the category is required by the data model).
Bulk actions on the product list let you activate/deactivate or feature many products at once, and apply a bulk price change (set / +%/ +amount) to a selection or a whole category.
Pricing & discounts¶
This is the heart of the shop. Pricing has two layers: the decoration engine (what the printing/embroidery costs) and discounts (what comes off the total).
Decoration engine¶
A Decoration method (DecorationMethod) models one technique (e.g. Embroidery / DTF) with:
| Component | Meaning |
|---|---|
setup_fee |
One-off setup per order line |
| per-color charge | Cost per thread/print color |
| per-location charge | Cost per print location |
area matrix (DecorationAreaTier) |
Price tiers by printed area (cm²) |
minimum_charge |
Floor per line |
px_per_cm |
Converts designer pixels → real cm² for the area tiers |
The default method is set in Settings (SiteSettings.default_decoration_method). Each
print zone can carry a price_modifier (a surcharge) so, e.g., a back print costs more.
Activate your default method
If the default decoration method is missing or inactive, the engine falls back silently and prices can come out wrong. The setup-readiness panel flags this.
Price simulator¶
/admin/pricing includes a price simulator. Enter a product, decoration method, colors,
locations, area and quantity, and it shows the full itemised breakdown. It uses the same
decoration_cost_breakdown() function as the real checkout, so what you see is what customers
pay — no drift.
Simulator scope
The simulator covers product base price + decoration + VAT. It deliberately does not apply discount codes, volume/team discounts, or shipping — those are separate layers applied at checkout. Use it to sanity-check decoration pricing, not the final cart total.
Pricing setup wizard¶
For a fast start, the wizard creates ready-to-use decoration methods from presets:
| Preset | Base setup |
|---|---|
| Embroidery (Borduren) | € 10,00 |
| DTF / Transfer | € 2,50 |
(Screen printing / DTG are intentionally not offered.) After running the wizard, open the simulator to verify the numbers before going live.
Discounts¶
Under Pricing & discounts you also manage: discount codes, volume discounts (quantity tiers), team discounts (for team orders), and special offers. Prices are shown VAT-inclusive; VAT is server-authoritative.
Orders & production¶
Order list & detail¶
- Orders (
/admin/orders) — filter by status and date. The order runs through an 8-state workflow (pending → paid → processing → printing → … → delivered, plus cancelled). - Order detail — view artwork per line, edit order lines (quantities/variants) with automatic recalculation, set the production status per line, download the invoice, and issue a refund via Mollie (with audit logging). You can also message the customer directly from the order.
Production board¶
Production (/admin/productie) is a board view of what needs to be produced, per line, with
its print zones and artwork — your shop-floor worklist. Update line status as items move through
printing/embroidery.
Invoices & payments¶
- Invoices (
/admin/invoices) — PDF invoices with gap-free sequential numbers (INV-YYYY-NNNNN), generated automatically and downloadable by staff. - Payments (
/admin/payments) — a read-only log of Mollie payments (iDEAL), including status, webhooks and retries.
Quotes (Offertes)¶
B2B customers can request a quote. In Quotes (/admin/quotes) you review the request,
adjust and send the quote (PDF, numbered OFF-YYYY-NNNNN via QuoteCounter), and — once
accepted — convert it into an order in one click. Quote pricing reuses the same engine as
orders, so it stays consistent.
Customers, designs & content¶
- Customers (
/admin/customers) — profiles with order history and contact details; message customers from here or from an order. - Designs (
/admin/designs) — the design review queue. Text and clipart auto-approve; uploaded images go to manual review — approve or reject (with a reason; the customer is emailed). See the Design Review guide for the full state machine. - Designer assets (
/admin/design-assets) — manage the fonts and clipart offered in the customer designer. - CMS pages (
/admin/pages) — edit legal/content pages (terms, privacy, returns, about) in a rich-text editor.
Settings, staff & operations¶
- Settings (
/admin/settings) — store details, footer content, feature flags (e.g. team orders on/off), and the default decoration method. Changes are staff-only. - Staff & users (
/admin/staff) — manage staff accounts and permissions. - Security (
/admin/beveiliging) — review login attempts and lockouts. - Audit trail (
/admin/audit-logs) — an append-only record of admin changes (who/what/when). - System status (
/admin/health) & Backups (/admin/backups) — live health checks and backup history. Deeper detail lives in the Monitoring and Disaster Recovery runbooks.
Common tasks (recipes)¶
- Ensure the category / colors / sizes exist.
- Products → New: name, category, base price.
- Add variants (color × size) and stock.
- Upload one image per color.
- Add print zones (front/back/…), with per-zone surcharge if needed.
- Check the completeness badge is green → activate the product.
- Pricing → wizard: pick Embroidery or DTF preset (or configure manually).
- Set it as the default in Settings (or per zone via
price_modifier). - Open the price simulator, enter a realistic product/zone/quantity.
- Confirm the itemised breakdown (base + decoration + VAT) looks right before selling.
- Orders → open the paid order.
- Verify artwork per line; adjust lines if needed (auto-recalculates).
- Set each line's production status; the item appears on the Production board.
- Print/embroider, mark lines done, advance the order to shipped/delivered.
- The invoice PDF is available throughout; message the customer on status changes.
- Quotes → open the request.
- Adjust items/pricing and send the quote (PDF).
- On acceptance, Convert to order — it carries over items and pricing.
Something not sellable or priced oddly?
Start at the Dashboard → setup-readiness panel. It pinpoints the product or pricing gap and links straight to the page that fixes it — the fastest path from "something's off" to "fixed".