Skip to content

Product Detail

Gallery, sticky buy box, details accordion and reviews — ordered by what a shopper needs before they can decide.

6 blocks75 lineslucide-reactAdded 8 Aug 2026

What's included

  • app/product-detail-page.tsx
  • 6 blocks it is built from, installed with it
  • Needs lucide-react

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab add product-detail-page

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.

Was this useful?

Preview

Merino Crew Sweater

£89.00£120.00Save £31.00
SizeSize guide

Quantity

1

  • 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.

The real page, rendered in your current theme — every section below is a live block, not a screenshot.

Built from

All blocks
  1. Product Image GalleryMain image with a thumbnail strip built as a real tablist, so arrow keys work and the ratio is fixed to stop the buy box shifting.
  2. Variant & Add-to-Cart BoxPrice, variant radiogroup, quantity stepper and add-to-bag — with sold-out sizes disabled and visible rather than hidden.
  3. Product Details AccordionDescription, materials, delivery and returns in named <details> elements — no JavaScript, and the copy stays indexable while collapsed.
  4. Rating Distribution SummaryAverage rating with a clickable histogram — because a 4.3 of forties and fives is a different product from a 4.3 of ones and fives.
  5. Customer ReviewsSortable reviews with verified-purchase badges, optimistic helpful votes and a real expand control instead of a fade that hides text.
  6. Scroll-Snap Product RailA "you might also like" row on native scroll-snap — touch swiping, momentum and keyboard support for free, with no carousel library.

Only want one section? Open it and copy that block instead — browse Product Detail.

Shipped in these templates

Want the whole project rather than this one screen? A template ships every route, the theme tokens and the layout.

Source

app/product-detail-page.tsx
/**
 * A product detail screen.
 *
 * Ordered by what a shopper needs before they can decide: see it, choose a
 * size and price it, then read the detail, then check whether other people
 * regretted it.
 *
 * The gallery and buy box are a two-column grid on desktop with the buy box
 * `sticky`, so the price and Add to bag stay on screen while the images and
 * the description scroll. On a long product page that is the difference
 * between a purchase and a scroll back to the top.
 *
 * In a real project this file lives at `app/products/[slug]/page.tsx` and
 * takes `params` — fetch the product there and pass it down as props. Every
 * block below already accepts the fields it needs.
 */

import * as React from 'react'
import { ProductGallery } from '@/components/product-gallery'
import { ProductBuyBox } from '@/components/product-buy-box'
import { ProductInfoAccordion } from '@/components/product-info-accordion'
import { ProductReviewSummary } from '@/components/product-review-summary'
import { ReviewList } from '@/components/review-list'
import { ProductRail } from '@/components/product-rail'

export default function ProductDetailPage() {
  return (
    <main className="min-h-screen bg-background text-foreground">
      <div className="mx-auto w-full max-w-6xl px-4 py-10 sm:px-6 lg:px-8">
        <nav aria-label="Breadcrumb" className="mb-6 text-sm text-muted-foreground">
          <ol className="flex flex-wrap items-center gap-1.5">
            <li>
              <a href="/" className="transition-colors hover:text-foreground">
                Shop
              </a>
            </li>
            <li aria-hidden>/</li>
            <li>
              <a href="/knitwear" className="transition-colors hover:text-foreground">
                Knitwear
              </a>
            </li>
            <li aria-hidden>/</li>
            <li aria-current="page" className="text-foreground">
              Merino Crew Sweater
            </li>
          </ol>
        </nav>

        <div className="grid grid-cols-1 gap-10 lg:grid-cols-2 lg:gap-14">
          <ProductGallery />

          {/* Sticky, so price and Add to bag survive a long scroll. */}
          <div className="min-w-0 lg:sticky lg:top-6 lg:self-start">
            <ProductBuyBox />
          </div>
        </div>

        <div className="mt-14">
          <ProductInfoAccordion />
        </div>

        <div className="mt-14 space-y-8">
          <ProductReviewSummary />
          <ReviewList />
        </div>

        <div className="mt-16 border-t border-border/60 pt-10">
          <ProductRail viewAllHref="/knitwear" />
        </div>
      </div>
    </main>
  )
}

How to use it

  1. 1. Copy each of the 6 blocks above into components/ — each block page has its own copy button.
  2. 2. Drop this file at app/product-detail-page.tsx. The imports already point at @/components/…, so they resolve with no edits.
  3. 3. Delete the sections you do not want. Every block takes props, so the copy changes without the layout moving.

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

More Commerce Pages

Open the full page for this page

Product Collection

Sticky filter sidebar, sort toolbar and product grid — with the facets dropped rather than stacked on mobile, so a shopping page does not open as a form.

Commerce Pages4 blocks68 lines
Open the full page for this page

Shopping Bag

Editable lines beside a sticky summary, so the total and the checkout button survive a scroll through four quantity changes.

Commerce Pages3 blocks42 lines
Open the full page for this page

Checkout

Address and payment with the site navigation stripped and the order summary moved above the form on mobile — both aimed squarely at completion rate.

Commerce Pages2 blocks57 lines
Open the full page for this page

Order Confirmed

The post-purchase screen, with navigation restored and a rail that shows what to buy next rather than what was just bought.

Commerce Pages2 blocks56 lines
Open the full page for this page

Account Orders

Order history in the settings shell rather than a second sidebar layout — an account area and a settings area are the same shape.

Commerce Pages2 blocks42 lines
Open the full page for this page

Product Comparison

The page between a listing and a product detail, with the two questions a comparison table alone cannot answer: will it fit, and can I actually have it.

Commerce Pages6 blocks53 lines
Open the full page for this page

Express Checkout

Checkout for the buyer who will not fill in a form: wallet buttons above the fields, and the address a wallet returns shown and changeable before the charge rather than after it.

Commerce Pages3 blocks57 lines
Open the full page for this page

Order Tracking

For the customer with an order number and no account — a lookup, an arrival range rather than a promised date, and the review form where the "how did we do" email actually lands.

Commerce Pages3 blocks40 lines