Marketplace
Dark olive on warm off-white, built for two audiences at once: search and real listings for buyers, the seller economics below the fold, and a browse route behind it.
What's included
app/browse/page.tsxapp/globals.cssapp/layout.tsxapp/login/page.tsxapp/not-found.tsxapp/page.tsx- and 9 more files
- 5 pages it is built from, installed with it
- Needs lucide-react
Works with
- React
- Next.js
- Tailwind CSS
- TypeScript
npx hoverlab init marketplace ./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
/Made by someone, somewhere near you
Nine thousand independent makers, no dropshippers, no resold factory stock. Every listing names the person who made it and the town they made it in.
What is on Thicket
Nine categories, and the makers are named in every one
Counts are live and include only sellers who have shipped an order in the last 90 days — a directory padded with dormant accounts is a directory nobody buys from twice.
- Ceramics and glass1,840 makers
- Ash & Ember
- Coldwater Clay
- Pothouse
- Kiln Sixteen
- Wood and furniture1,210 makers
- Grain & Gable
- Slow Timber
- Bench No.4
- Larchfield
- Textiles2,470 makers
- Fold Studio
- Weft & Warp
- Tansy Wool
- Cloth Hall
- Food and drink930 makers
- Crumb Bakehouse
- Hedgerow Preserve
- Salt Marsh
- Nine Acre
Shipping this week
Live listings from makers with stock on hand — not a curated editorial selection that is out of stock by the time you click.
For makers
What a stall on Thicket does to the numbers
| Metric | Craft fairs and Instagram | After twelve months on Thicket | Change |
|---|---|---|---|
| Orders per month | 11 | 74 | Improved: 6.7× |
| Hours spent selling, not making | 22 hrs | 6 hrs | Improved: −73% |
| Average order value | £34 | £51 | Improved: +50% |
| Commission and fees | £0 + stall hire | 6% + payment fees | Improved: Flat |
| Repeat customers | 9% | 31% | Improved: 3.4× |
Medians across 1,204 sellers who joined in 2024 and were still listing twelve months later. Sellers who left inside the year are excluded, which flatters these numbers — 18% did, and the exit survey mostly says the volume was more than they wanted to make.
Makers
From people who moved their whole business onto it
Buying and selling
Ask it the way you would say it
What does it cost to sell?
6% of the item price plus the payment processor’s fee, taken at the point of sale. No listing fee, no monthly fee, no charge for photographs or promotion. If nothing sells, you pay nothing.
How do you know a seller actually makes the things?
Every seller submits work-in-progress photographs from their own workspace before their first listing goes live, and we spot-check them again at random. Reselling factory stock is the one thing that gets an account removed the same day rather than warned.
Who handles shipping?
The maker does, from their own workshop, using their own packaging. We buy the labels in bulk and pass the rate through, which is usually cheaper than a small seller can get alone. Nothing goes through a Thicket warehouse because there is not one.
What happens if something arrives broken?
Report it within 14 days with a photograph and we refund you immediately, then settle it with the maker separately. The buyer is never left waiting on a dispute between two other parties.
Can I return something I simply do not like?
Within 14 days for anything not made to order, at your cost for the return postage. Commissioned and personalised pieces are not returnable, and the listing says so before you buy rather than in the confirmation email.
When do sellers get paid?
Seven days after the order is marked delivered, into the account on file, with no minimum threshold. There is no rolling reserve and no payout schedule that quietly holds a month of your money.
Do you take international sellers?
UK, Ireland and the EU today. We will not open a country until we can settle payouts in the local currency without a conversion fee falling on the maker, which is why the list is short.
Open a stall
Twenty minutes to list your first piece, and nothing to pay until something sells.
- 6% and the payment fee — that is the whole list
- No listing fee, no monthly fee, no exclusivity
- Paid seven days after delivery, no threshold
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.
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 Moss palette, which ships in app/globals.css. Dark olive on a warm off-white. Reads as made rather than manufactured, which is the whole difference between a marketplace and a shop.
Get it
then
cd marketplace 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 |
|---|---|---|
| / | Marketplace Landing Page | app/page.tsx |
| /browse | Product Collection | app/browse/page.tsx |
| /products/[slug] | Product Detail | app/products/[slug]/page.tsx |
| /login | Sign-In Screen | app/login/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/(7 files)
- browse/page.tsx
- globals.css
- layout.tsx
- login/page.tsx
- not-found.tsx
- page.tsx
- products/[slug]/page.tsx
components/(20 files)
- auth-login-card.tsx
- collection-toolbar.tsx
- cta-split-panel.tsx
- faq-search.tsx
- footer-mega.tsx
- hero-search.tsx
- logo-segments.tsx
- navbar-simple.tsx
- not-found-404.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
- stats-comparison.tsx
- testimonial-carousel.tsx
- theme-provider.tsx
Every file is listed. The 19 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 Moss palette.
*
* Dark olive on a warm off-white. Reads as made rather than manufactured, which is the whole difference between a marketplace and a shop.
*
* 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: 80 30% 98%;
--foreground: 100 30% 9%;
--card: 80 35% 99%;
--card-foreground: 100 30% 9%;
--popover: 80 35% 99%;
--popover-foreground: 100 30% 9%;
--primary: 95 70% 22%;
--primary-foreground: 80 35% 99%;
--secondary: 85 25% 93%;
--secondary-foreground: 100 30% 18%;
--muted: 85 22% 94%;
--muted-foreground: 95 12% 38%;
--accent: 70 45% 90%;
--accent-foreground: 90 50% 16%;
--destructive: 0 70% 45%;
--destructive-foreground: 0 0% 100%;
--border: 85 20% 87%;
--input: 85 20% 87%;
--ring: 95 70% 22%;
--radius: 0.5rem;
}
.dark {
--background: 100 25% 5%;
--foreground: 80 18% 96%;
--card: 100 20% 8%;
--card-foreground: 80 18% 96%;
--popover: 100 20% 8%;
--popover-foreground: 80 18% 96%;
--primary: 90 60% 58%;
--primary-foreground: 100 35% 7%;
--secondary: 95 16% 15%;
--secondary-foreground: 80 18% 96%;
--muted: 95 16% 15%;
--muted-foreground: 88 10% 66%;
--accent: 70 25% 18%;
--accent-foreground: 75 45% 84%;
--destructive: 0 62% 52%;
--destructive-foreground: 0 0% 100%;
--border: 95 14% 19%;
--input: 95 14% 19%;
--ring: 90 60% 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;
}
}
}
More Landing Pages
Startup Waitlist
The waitlist hero with the count on it
A pre-launch site in violet: one email field, a blog to keep the list warm, and no pricing to be held to. The smallest honest thing to put in front of a product that does not exist yet.
Developer Tool
The terminal hero, typing the install
Near-black buttons, square corners and a terminal-green accent. Install command above the fold, real code before any prose, docs and changelog behind it.
Mobile App
The store-badge download hero
Emerald and 16px corners, built around one conversion: the store install. Badges and the App Store rating above the fold, a single price, and an account area for the subscription.
Agency Studio
Case studies that name the constraint
Terracotta on warm paper, with no blue in it anywhere. Full-bleed hero, client list, the actual team, a journal and a careers page — and no pricing, on purpose.
Local Service
Hours, address and phone above the fold
Deep teal, for a business people let into their house. A booking widget above the fold, every price published, and a compliance footer with the registrations a regulated trade has to show.
Enterprise
The security posture band
Burgundy and square corners — the register of things bought in a boardroom. Numbers in the hero, a comparison table that concedes rows, and published prices instead of a sales wall.
Integration Platform
The integration grid, sorted by depth
High-chroma blue. The connector names in the hero, a catalogue with honest live/beta/planned status, four SDK languages and a dated roadmap for everyone who is not on the list.
Creator Course
The curriculum, module by module
Magenta-plum with the softest corners in the set, for one person selling one thing. A student testimonial as the hero, a long instructor section, one price and the refund policy on the page.
Newsletter
The archive, above the testimonials
One decision, made from the archive: a hero with the field in it, the back issues as the actual argument, and the three worries about handing over an address answered as content.