The page contract
Fourteen pages. A theme exports a component for each; the runtime routes to them. Miss one and pnpm theme:check fails before review does.
The fourteen
| Export | Route | Receives |
|---|---|---|
Home | / | Composed sections |
ListingIndex | /listing | Paged listings |
ListingDetail | /listing/[slug] | One listing + availability |
CategoryIndex | /category | All categories |
CategoryDetail | /category/[slug] | Category + its listings |
About | /about | Store + team |
Contact | /contact | Locations + contact form |
BlogIndex | /blog | Paged posts |
BlogPost | /blog/[slug] | One post |
Faq | /faq | FAQ entries |
Team | /team | Team profiles |
Locations | /locations | Locations |
ErrorPage | any 500 | Nothing |
NotFound | any 404 | Nothing |
Empty states are part of the contract. A real merchant may have no blog, no team and one location. Every page must look deliberate when its data is empty. Reviewers check this specifically, because it is the most common reason a beautiful theme feels broken on a real store.
What is NOT in the contract
/checkout, /login, /account, /orders, /subscriptions and /addresses are rendered by the platform. You link to them; you do not implement them. You may wrap the account family in your own chrome — see account pages.