Storefront
Every Distribu account comes with a public-facing storefront where your customers log in, browse your catalog, place orders, and review their order history. No extra setup, no separate subscription. If you have products in Distribu, you have a storefront.
This section is the customer-facing counterpart to everything else in the docs. If Orders is how you see an order, this is how your customer places it.
The URL
Your storefront lives at:
https://distribu.app/store/{slug}
…where {slug} is your company's URL slug. The slug is auto-generated from
your company name — "Acme Distributors" becomes acme-distributors. You
can see (but not directly edit) it in
Settings → Company. Rename the company and
the slug regenerates; see Setting up your storefront
for the caveats around that.
Share the base /store/{slug} URL with customers — it redirects to the
catalog if they're logged in, or the login page if they're not.
What customers see
When a customer opens your storefront:
- Branding — Your company name at the top of every page, plus a small colored square with your company's first initial. That's the full extent of storefront branding today; no logo upload, no custom color, no custom domain.
- A four-link nav (once logged in) — Catalog, My orders, Addresses,
and a Sign out button. Contact users also see their role as a small gray
badge next to their name (
Admin,Buyer, orViewer). - A product catalog — Every active product in your catalog with
stock > 0, paginated 24 per page. Ordered by category then name. - Their order history — Every order placed by this customer, with statuses synced to what you see in the dashboard.
- Saved shipping addresses — Any number of addresses, one marked as default, reusable across orders.
The storefront is fully server-rendered and doesn't require JavaScript for browsing — though the cart itself uses a client component for live quantity updates.
URL map
| Path | Purpose |
|---|---|
/store/{slug} | Landing — redirects to /catalog or /login |
/store/{slug}/login | Sign-in form (primary + contact logins) |
/store/{slug}/register | Create a customer account |
/store/{slug}/setup-password | First-time password for invited contacts |
/store/{slug}/catalog | Browse products + cart + checkout |
/store/{slug}/orders | Customer's order history |
/store/{slug}/orders/{id} | Single order detail |
/store/{slug}/orders/{id}/invoice | Download invoice PDF |
/store/{slug}/addresses | Manage saved shipping addresses |
If a URL starts with /store/{slug} but the slug doesn't match a real
company, it 404s. If it's gated (anything past login) and the customer
isn't signed in, it redirects to /store/{slug}/login.
Session model
Customer logins are completely separate from staff logins — different
records, different cookie, different auth flow. When a customer signs in,
Distribu issues a cryptographically signed customer_session cookie that
lasts 7 days. That cookie is scoped to the slug they logged into — if they
bounce over to /store/otherco/catalog, they'll be redirected to
otherco's login.
See How customers log in for the full auth flow, including the two login tiers (primary customer vs. contact) and how passwords are set.
Storefront vs. dashboard orders
| Storefront order | Dashboard order | |
|---|---|---|
| Has a customer | Yes (the logged-in one) | No |
| Decrements stock | Yes | No |
| Requires shipping address | Yes | No |
| Respects price overrides | Yes | N/A (no customer) |
| Sends customer receipt | Yes | No |
| Sends alert to OWNER + ADMIN | Yes | No |
| Counts against monthly plan limit | Yes | No |
| Triggers low-stock alert | Yes | No |
See Orders for the full comparison and Creating orders for the dashboard path.
What's in this section
- Setting up your storefront — Company name, slug, and what customers actually see.
- How customers log in — Registration, login, contact invitations, password setup.
- Placing orders from the storefront — The cart, shipping address selection, PO numbers, reordering, and every error message the checkout can throw.
Next: Setting up your storefront.
