Skip to content

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

  1. Go to /admin/login and sign in with your staff account (magic link or password).
  2. 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.
  3. 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:

  1. Taxonomy first — create the Categories, Brands, Colors and Sizes you need. Colors and sizes become the axes of a product's variants.
  2. Create the product (/admin/products → new): name, category, base price, description.
  3. Variants — generate the color × size matrix; set stock per variant.
  4. Images — upload at least one image per color.
  5. 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)

  1. Ensure the category / colors / sizes exist.
  2. Products → New: name, category, base price.
  3. Add variants (color × size) and stock.
  4. Upload one image per color.
  5. Add print zones (front/back/…), with per-zone surcharge if needed.
  6. Check the completeness badge is green → activate the product.
  1. Pricing → wizard: pick Embroidery or DTF preset (or configure manually).
  2. Set it as the default in Settings (or per zone via price_modifier).
  3. Open the price simulator, enter a realistic product/zone/quantity.
  4. Confirm the itemised breakdown (base + decoration + VAT) looks right before selling.
  1. Orders → open the paid order.
  2. Verify artwork per line; adjust lines if needed (auto-recalculates).
  3. Set each line's production status; the item appears on the Production board.
  4. Print/embroider, mark lines done, advance the order to shipped/delivered.
  5. The invoice PDF is available throughout; message the customer on status changes.
  1. Quotes → open the request.
  2. Adjust items/pricing and send the quote (PDF).
  3. 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".