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.
Address and payment with the site navigation stripped and the order summary moved above the form on mobile — both aimed squarely at completion rate.
app/checkout-page.tsxnpx hoverlab add checkout-page
Or over MCP, from your editor's agent — no account needed.
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.
Secure checkout
The real page, rendered in your current theme — every section below is a live block, not a screenshot.
Only want one section? Open it and copy that block instead — browse Cart & Checkout.
Want the whole project rather than this one screen? A template ships every route, the theme tokens and the layout.
/**
* The checkout screen.
*
* Two things this does that ordinary page layouts do not, both aimed at
* completion rate:
*
* - **No site navigation.** A checkout keeps a minimal header with the
* logo and a security note, and nothing else. Every link out of this
* page is a way to lose the sale, which is why every large retailer
* strips the nav here.
* - **The summary comes first on mobile.** `order-first lg:order-last`
* puts what they are paying above the form on a phone, then moves it
* beside the form on desktop. A shopper filling in eight fields without
* the total in sight is a shopper who abandons at the payment step.
*/
import * as React from 'react'
import { CheckoutForm } from '@/components/checkout-form'
import { OrderSummaryPanel } from '@/components/order-summary-panel'
export default function CheckoutPage() {
return (
<div className="min-h-screen bg-background text-foreground">
{/* Minimal chrome — no navigation out of a checkout. */}
<header className="border-b border-border/60">
<div className="mx-auto flex h-16 max-w-5xl items-center justify-between px-4 sm:px-6">
<a href="/" className="flex items-center gap-2 font-semibold tracking-tight">
<span
aria-hidden
className="flex h-8 w-8 items-center justify-center rounded-xl bg-primary text-primary-foreground"
>
A
</span>
Acme
</a>
<p className="text-xs text-muted-foreground">Secure checkout</p>
</div>
</header>
<main className="mx-auto w-full max-w-5xl px-4 py-10 sm:px-6">
<h1 className="sr-only">Checkout</h1>
<div className="grid gap-10 lg:grid-cols-[1fr_20rem]">
<div className="order-last lg:order-first">
<CheckoutForm />
</div>
{/* First on mobile: the total belongs above the form. */}
<div className="order-first lg:order-last lg:sticky lg:top-6 lg:self-start">
<OrderSummaryPanel ctaLabel="Pay now" />
</div>
</div>
</main>
</div>
)
}
components/ — each block page has its own copy button.app/checkout-page.tsx. The imports already point at @/components/…, so they resolve with no edits.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.
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.
Gallery, sticky buy box, details accordion and reviews — ordered by what a shopper needs before they can decide.
Editable lines beside a sticky summary, so the total and the checkout button survive a scroll through four quantity changes.
The post-purchase screen, with navigation restored and a rail that shows what to buy next rather than what was just bought.
Order history in the settings shell rather than a second sidebar layout — an account area and a settings area are the same shape.
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.
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.
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.