Wool overshirt
- Size
- M
- Condition
- Like new
Storefront
Below are 5 storefronts. They are the same Next.js application, the same components and the same routes, resolved to a different partner per request. What differs is a partner row and a DNS record — there is no per-partner build, route file or component anywhere in this repository.
One ItemCard, identical props, rendered once per theme. Everything that changes below — colour, radius, type, spacing — arrives as CSS custom properties from the theme scope the card happens to sit in.
Houdini houdini
Kappahl kappahl
Outnorth outnorth
Party 0 base
Base base
Real chrome, real search field, real catalogue. A theme with no partner behind it still renders — it simply has nothing to sell yet.
houdini.shop-dev-v2.recrql.com:3000No partner in the API answers to this slug yet — the theme renders regardless, which is the point: the storefront is one application and the partner is data.
kappahl.shop-dev-v2.recrql.com:3000No partner in the API answers to this slug yet — the theme renders regardless, which is the point: the storefront is one application and the partner is data.
outnorth.shop-dev-v2.recrql.com:3000No partner in the API answers to this slug yet — the theme renders regardless, which is the point: the storefront is one application and the partner is data.
partner-0.shop-dev-v2.recrql.com:3000No partner in the API answers to this slug yet — the theme renders regardless, which is the point: the storefront is one application and the partner is data.
base.shop-dev-v2.recrql.com:3000No partner in the API answers to this slug yet — the theme renders regardless, which is the point: the storefront is one application and the partner is data.
storefront_domain resolves to its slug, so its URLs carry no prefix at all. In development the same rule reads <slug>.localhost:3000, which needs no /etc/hosts entry./p/<slug>/… names a partner explicitly. It is how this page opens every storefront from one hostname.NEXT_PUBLIC_DEFAULT_PARTNER.All three are decided once, in middleware, and passed on as request headers. Which partners exist, what they are called and which theme each one wears all come from GET /partners/ — the frontend holds no list of them.