Customer Portal
Once someone is your customer, the questions change. Not what do you make but where is my order, what did the sample look like, can I have the tech pack again, what's the fabric certified to.
The customer portal answers those without anyone emailing a PDF.
Getting in
The portal uses the ordinary Frappe website login, and what a person sees is decided by which Customer they resolve to — not by the page they land on. A customer needs:
- A User account,
- the Customer role, and
- a Contact record linking that user to their Customer.
That third link is what scopes everything. Every portal page resolves the signed-in user to a Customer through their Contact and shows only records belonging to it.
Scoping happens on the records, not the page. Anyone who doesn't resolve to a Customer — a signed-out visitor, or a user whose Contact isn't linked to one — gets empty pages rather than an error. If a customer says the portal is blank, check the Contact link first.
Five menu items appear for them:
| Page | Route | Shows |
|---|---|---|
| Lookbook | /lookbook |
Collections, by season |
| Fichas Técnicas | /fichas-tecnicas |
Their tech packs |
| Samples | /samples |
Samples and their progress |
| Production Status | /production-status |
Their orders, moving |
| Sustainability | /sustainability |
The environmental story |
The public catalog sits alongside them in the same menu, without a role restriction — a signed-in customer can still browse and re-order.
Lookbook
Collections, presented as seasons. /lookbook lists them; /lookbook/{season} opens one.
A season is a Project — the same record the rest of GarmentFlow tags tech packs, samples and production orders with — so a collection assembles itself from work already labelled with the season. Nothing is curated twice.
This is the page to send a buyer who asks "what did you do for spring?".
Fichas Técnicas
Their tech packs, listed at /fichas-tecnicas and opened at /fichas-tecnicas/{tech-pack}.
A customer sees only tech packs belonging to their Customer. This is enforced in the permission layer, not by hiding a link.
It saves the round trip that otherwise happens every few weeks — a buyer wanting the spec of something you made for them two seasons ago, and someone internally digging out a file.
Samples
/samples, with detail at /samples/{sample}.
Their samples and where each one has got to — requested, in production, sent, approved, rejected. Same records the sample room updates from the Design App, so the customer's view is current without anyone writing an update.
Scoped to their Customer, like everything else here.
Production Status
/production-status, with detail at /production-status/{order}.
Their Production Orders, and how far along each one is.
This is the page that stops the phone calls. A customer who can see their own order sitting at Stitching, 68% complete doesn't ring to ask, and — just as usefully — can see for themselves when it is genuinely running late instead of hearing it as news.
Scoped by Customer through the same permission check as everything else.
Sustainability
/sustainability — the environmental story: certifications, fabric impact, and what the factory is doing about it.
It shares its ground with TraceIt!, the public Digital Product Passport, but the audience differs: TraceIt is a QR on a garment for whoever ends up holding it; this page is for the buyer deciding whether to place the order.
Setting it up
The portal menu items are added automatically on install (the catalog entry uses whatever Route Prefix Catalog Settings holds). You can reorder or disable them under Portal Settings.
Onboarding a customer, in practice:
- Create the Customer if it doesn't exist.
- Create a Contact with their email, linked to that Customer.
- Create a User for the same email, and set the Contact's User field to it.
- Give the user the Customer role.
- Send them the login link.
From that point they see their own work, and nothing else.
What to do next
That closes this section. Back to the Catalog hub, or over to TraceIt! for the garment-level passport.