Storefront
The whole purchase funnel: collection, product detail, bag, checkout, confirmation and an account area. Seven routes, no commerce SDK.
What's included
app/account/orders/page.tsxapp/cart/page.tsxapp/checkout/page.tsxapp/globals.cssapp/layout.tsxapp/not-found.tsx- and 11 more files
- 7 pages it is built from, installed with it
- Needs lucide-react
Works with
- React
- Next.js
- Tailwind CSS
- TypeScript
npx hoverlab init storefront ./my-app
Or over MCP, from your editor's agent — no account needed.
License
Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.
Every screen
/Autumn / Winter
Knitwear
Fully fashioned merino and lambswool, knitted in Scotland. Made to keep its shape rather than to hit a price.
114 products
Merino Crew Sweater
Quantity
- Free delivery over £50.00
- Free returns within 30 days
Description
A midweight crew neck knitted from extra-fine merino, with a clean set-in sleeve and ribbed trims that hold their shape through a season of wear.
Cut slightly relaxed through the body so it layers over a shirt without pulling. Fully fashioned, which means the panels are knitted to shape rather than cut from a sheet — it costs more to make and it does not lose its line at the shoulder.
Materials & care
Knitted in Scotland from mulesing-free merino.
- Composition
- 100% extra-fine merino wool
- Weight
- 19.5 micron, 12gg
- Care
- Hand wash cold, dry flat
- Origin
- Made in Scotland
Delivery
Standard delivery is free on orders over £50 and arrives in 2–4 working days. Next-day is £6.95 if you order before 2pm.
- Standard
- 2–4 working days · free over £50
- Next day
- Order before 2pm · £6.95
- International
- 5–10 working days · from £12
Returns
Thirty days from delivery, free, in any condition you would accept yourself. Print the label from your order page or hand it to any collection point.
Sale items included — we have never understood shops that exclude them.
4.5/5
218 reviews
94% would recommend
- 5 stars: 148 reviews, 68 percent
- 4 stars: 48 reviews, 22 percent
- 3 stars: 14 reviews, 6 percent
- 2 stars: 5 reviews, 2 percent
- 1 stars: 3 reviews, 1 percent
4 reviews
- Hannah T.Verified purchase
Better than the price suggests
I bought this expecting to return it and it has become the thing I reach for three days a week. The knit is dense without being heavy, and after four washes there is no pilling at the cuffs where I would expect it first. Sizing is honest — I am usually a medium and the medium fits with room for a shirt underneath.
Bought M · usually M - Sam K.
Nice but the colour is off
The stone reads much warmer in person than on screen — closer to a light camel. Lovely sweater, just not the colour I was picturing.
- Devin R.Verified purchase
Great, but runs slightly long
No complaints about the material at all. The body is about an inch longer than I expected, which is fine untucked but worth knowing if you are between sizes.
Bought L · usually L - Priya M.Verified purchase
Third one I have bought
Two in stone, one in navy. They hold their shape better than anything else I own at twice the price.
Your bag
Your bag
4 items · £267.00
Merino Crew Sweater
Stone · M
£89.00
Quantity of Merino Crew Sweater: 1Cotton Oxford Shirt
Sky · L
£130.00
Quantity of Cotton Oxford Shirt: 2Leather Card Holder
Black
£48.00
Quantity of Leather Card Holder: 1
Secure checkout
Checkout
Thanks — your order is confirmed
A confirmation is on its way to you@example.com
Order numberORD-4821-9930
Estimated delivery
–
We will email a tracking link as soon as it ships.
Delivering to
Ada Lovelace12 Marchmont StreetLondonWC1N 1AGUnited KingdomPayment
- Subtotal
- £219.00
- Discount
- −£21.90
- Delivery
- Free
- Total
- £197.10
2 items
Merino Crew Sweater
Stone · M
×1
£89.00
Cotton Oxford Shirt
Sky · L
×2
£130.00
Your account
Manage your account, your workspace and how you sign in.
Order history
Everything you have ordered, newest first.
We could not find that page
The link may be out of date, or the page may have moved. Here are a few ways forward.
Live components in your current theme — switch routes, or the phone icon to check the mobile layout. Colours are this template’s Cocoa palette, which ships in app/globals.css. Deep brown on warm paper. Product photography sets the colour in a shop; the shell that surrounds it should be the one thing on the page not competing for attention.
Get it
then
cd storefront npm install npm run dev
The archive contains the whole project — routes, blocks, theme tokens, Tailwind and PostCSS config, tsconfig and a .gitignore. One runtime dependency, and no Hoverlab dependency at all: it is your code from the moment it unzips.
For AI
The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.
See the prompt
Routes
| Path | Page | File |
|---|---|---|
| / | Product Collection | app/page.tsx |
| /products/[slug] | Product Detail | app/products/[slug]/page.tsx |
| /cart | Shopping Bag | app/cart/page.tsx |
| /checkout | Checkout | app/checkout/page.tsx |
| /orders/confirmed | Order Confirmed | app/orders/confirmed/page.tsx |
| /account/orders | Account Orders | app/account/orders/page.tsx |
| 404 | 404 Page | app/not-found.tsx |
What you get
project root(8 files)
- GETTING-STARTED.md
- gitignore
- next.config.ts
- package.json
- postcss.config.mjs
- README.md
- tailwind.config.ts
- tsconfig.json
app/(9 files)
- account/orders/page.tsx
- cart/page.tsx
- checkout/page.tsx
- globals.css
- layout.tsx
- not-found.tsx
- orders/confirmed/page.tsx
- page.tsx
- products/[slug]/page.tsx
components/(17 files)
- cart-line-items.tsx
- checkout-form.tsx
- collection-toolbar.tsx
- not-found-404.tsx
- order-confirmation.tsx
- order-history-list.tsx
- order-summary-panel.tsx
- product-buy-box.tsx
- product-filter-sidebar.tsx
- product-gallery.tsx
- product-grid.tsx
- product-info-accordion.tsx
- product-rail.tsx
- product-review-summary.tsx
- review-list.tsx
- settings-nav-layout.tsx
- theme-provider.tsx
Every file is listed. The 16 files in components/ are the blocks the pages import — each one has its own page if you want to read it on its own.
Project files
Everything except the blocks. Opens on app/globals.css — the file that makes the rest look right, since every block styles itself with bg-card and text-muted-foreground rather than literal colours.
@tailwind base;
@tailwind components;
@tailwind utilities;
/**
* Design tokens — the Cocoa palette.
*
* Deep brown on warm paper. Product photography sets the colour in a shop; the shell that surrounds it should be the one thing on the page not competing for attention.
*
* This file is the reason a pasted block looks right. Every block and page
* styles itself with semantic classes — `bg-card`, `text-muted-foreground`,
* `border-border` — rather than literal colours, so they inherit whatever
* you define here instead of fighting it. Change a value below and every
* section in the project moves with it. Change the hue on `--primary` and
* `--ring` together and you have rebranded the site.
*
* Values are bare HSL channels, not `hsl(...)` calls. That is what lets
* Tailwind compose them with an alpha suffix: `bg-primary/10` expands to
* `hsl(var(--primary) / 0.1)`, which is impossible if the variable already
* carries its own function wrapper.
*
* Every foreground/background pair below clears WCAG AA (4.5:1) in both
* themes. If you retune one, check the pair rather than trusting the eye —
* mid-lightness accents are the ones that fail.
*/
@layer base {
:root {
--background: 32 34% 98%;
--foreground: 26 28% 11%;
--card: 32 40% 99%;
--card-foreground: 26 28% 11%;
--popover: 32 40% 99%;
--popover-foreground: 26 28% 11%;
--primary: 26 55% 33%;
--primary-foreground: 32 40% 99%;
--secondary: 32 28% 93%;
--secondary-foreground: 26 30% 20%;
--muted: 32 22% 94%;
--muted-foreground: 30 12% 39%;
--accent: 44 45% 91%;
--accent-foreground: 38 45% 18%;
--destructive: 0 70% 45%;
--destructive-foreground: 0 0% 100%;
--border: 32 20% 88%;
--input: 32 20% 88%;
--ring: 26 55% 33%;
--radius: 0.5rem;
}
.dark {
--background: 26 24% 6%;
--foreground: 32 18% 96%;
--card: 26 20% 9%;
--card-foreground: 32 18% 96%;
--popover: 26 20% 9%;
--popover-foreground: 32 18% 96%;
--primary: 26 70% 58%;
--primary-foreground: 26 42% 7%;
--secondary: 30 16% 16%;
--secondary-foreground: 32 18% 96%;
--muted: 26 22% 15%;
--muted-foreground: 34 12% 66%;
--accent: 44 24% 18%;
--accent-foreground: 44 45% 85%;
--destructive: 0 62% 52%;
--destructive-foreground: 0 0% 100%;
--border: 30 15% 19%;
--input: 30 15% 19%;
--ring: 26 70% 58%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground antialiased;
}
/**
* Global motion opt-out.
*
* Blocks guard their own animations with Tailwind's `motion-safe:`, but
* third-party CSS and anything you add later will not. This is the
* backstop: it neutralises every animation and transition on the page
* for users who have asked the OS for reduced motion, rather than
* relying on each author to remember.
*/
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
}