# Storefront and Portal

URL: /products/site/storefront-and-portal · Id: `page:products/site/storefront-and-portal`

> The storefront is where a Startup sells to people and Agents; the Portal on its own Site is where each Customer receives what they bought.

The storefront is where a [Startup](/business/nouns/startup) sells: its public [Site](/business/nouns/site), its checkout, and the routes [Agents](/business/nouns/agent) buy through. The [Portal](/business/nouns/portal) is where each [Customer](/business/nouns/customer) receives what they bought, on the same Site.

## The storefront follows the Product
Every storefront renders its [Offers](/business/nouns/offer) from records, and each kind of [Product](/business/nouns/product) adds the routes its buyers need:

| Product kind | Storefront routes |
| --- | --- |
| Data | `/docs`, sample records, and the [Dataset](/business/nouns/dataset) schema |
| [Software](/business/nouns/software) | `/docs`, `/pricing`, and a sign-up that issues an API key |
| Agent | `/docs`, `/pricing`, and the tasks the Agent is graded on |
| [Service](/business/nouns/service) | `/how-it-works`, `/book`, and a statement of what done means |

A Service states its done criteria on the Site because its [Outcome Contract](/business/nouns/outcome-contract) does. A buyer reads the same terms the Startup is held to.

## Checkout
Checkout turns an accepted Offer into an [Order](/business/nouns/order) or a [Subscription](/business/nouns/subscription). Stripe takes the payment and pays out to the bank account of the Startup. The Customer leaves checkout with an [Entitlement](/business/nouns/entitlement) and a link to the Portal.

Agents buy through the same Offers without a checkout [Page](/business/nouns/page). An Agent calls the API or the MCP server, and an unpaid call returns [payment required](/code/api/errors/payment-required) with the Offer to [accept](/business/nouns/offer/accept). The Agent accepts and retries, and the Startup records a Customer like any other.

Every Page of the storefront lists the same Offers the API sells. A buyer and the buyer's Agent never see two price lists.

## The Portal
The Portal lives at `/portal` on the canonical [Domain](/business/nouns/domain) of the Startup, under its [Brand](/business/nouns/brand). It is part of the Site, not a separate [App](/business/nouns/app), so a Customer never leaves the address they bought from.

A Customer signs in and sees only the records of their own [Tenant](/business/nouns/tenant). Every Portal follows one sequence, and each Product shows the steps it needs:

1. What the Customer bought, in one summary.
2. Who is buying: the person, and the [Organization](/business/nouns/organization) they buy for.
3. An onboarding checklist.
4. Intake: the inputs the work needs.
5. The budget and the acceptance criteria.
6. Payment.
7. A status timeline of the work.
8. A [Thread](/business/nouns/thread) for questions in both directions.
9. Deliverables, with the [Evidence](/business/nouns/evidence) behind each.
10. [Review](/business/nouns/review): accept, refund, or repeat.
11. History of every Order and [Invoice](/business/nouns/invoice).

A returning Customer skips the steps already done and starts at intake. A Software Customer sees keys, usage against each [Meter](/business/nouns/meter), Invoices, and their plan. A Service Customer sees intake, the timeline, deliverables, and the accept button.

## Customer Roles
Inside a Tenant, people and Agents hold customer [Roles](/business/nouns/role). Every [Product Template](/business/nouns/product-template) declares the Roles its Customers need, and the Portal shows each Role its own view of the same records.

Take `scorehall.com`, a [Marketplace](/products/templates/marketplace) where composers license music to video producers. A production studio's Tenant holds a buyer who licenses tracks, an admin who manages seats, and the studio's own Agent, which licenses through the API.

Each composer is a Customer too, under a seller [Agreement](/business/nouns/agreement), with a seller view of tracks, sales, and payouts.

| Role | Sees | Can do |
| --- | --- | --- |
| `buyer` | Orders, licenses, Threads | Order, accept, dispute |
| `admin` | Seats, plan, Invoices | Invite, remove, change plan |
| `seller` | Listings, sales, payouts | List, update, withdraw |
| `agent` | What its [Mandate](/business/nouns/mandate) grants | Act by API, within its [Limits](/business/nouns/limit) |

The [Components](/business/nouns/component) are shared across every Startup, so a Customer who buys from two Startups already knows how both Portals work.

## Done is not accepted
For a Service, delivery and acceptance are separate [Events](/business/nouns/event). The Startup marks an Order delivered; the Customer then accepts it in the Portal, or disputes it under the Outcome Contract. Billing follows acceptance, not delivery.

A dispute starts the remedy the contract names, such as a redo or a refund. Each step lands in the Thread and the timeline, so the Customer and the Startup read one record of what happened.

## View as any Customer
Owners preview the Portal as any Customer and any Role, and the Site as a [Visitor](/business/nouns/visitor) or an Agent. The preview uses that reader's visibility exactly, so what an owner sees is what that Customer sees.

Portal ready is a [Live](/business/lifecycle/states/live) entry check. It passes when the Portal shows each Customer their Orders, deliveries, Invoices, and [Messages](/business/nouns/message).

## Next
- [Sites and Pages](/products/site/sites-and-pages): how the Pages around the storefront are built.
- [SiteBuilder](/code/builders/site): everything SiteBuilder ships, by [Lifecycle](/business/nouns/lifecycle) state.