Ecommerce · React
Wooden toy shop
Bright wooden toy store with toys by age, the workshop team, safe materials, delivery FAQ and a newsletter.

What you get
A storefront for a family toy workshop: a centred hero, wooden toys sorted by age and play type, how they are made, the makers, parent quotes, a delivery and returns FAQ, and a newsletter. All content lives in src/site.ts.
Files
Exactly what is copied into a new project: 13 files, nothing generated.
Explorer 13
import type { Site } from "./types"; /** Everything this site shows. Edit freely. */export const site: Site = { "brand": "Little Grove Toys", "nav": [ { "label": "Toys", "href": "#toys" }, { "label": "How they're made", "href": "#made" }, { "label": "Makers", "href": "#makers" }, { "label": "Shipping", "href": "#shipping" } ], "navCta": { "label": "Shop toys", "href": "#toys" }, "sections": [ { "kind": "hero", "variant": "center", "eyebrow": "Wooden toys made in Freiburg", "title": "Toys sturdy enough for the next child too.", "text": "Rattles, stacking toys and play kitchens cut from Black Forest beech and finished with water-based paint. Made by three people in a small workshop.", "primary": { "label": "Shop by age", "href": "#toys" }, "secondary": { "label": "How they're made", "href": "#made" }, "visual": { "type": "tiles", "tones": [ "#b45309", "#efe3cc", "#4d7c0f", "#7c2d12" ], "caption": "Stacking Arches · 7 pieces" } }, { "kind": "products", "id": "toys", "eyebrow": "Shop", "title": "Toys by age and play", "text": "Age guidance is printed on every box.", "currency": "€", "items": [ { "name": "Beech Rattle", "price": 18, "category": "Baby", "tone": "#a16207", "text": "Smooth-turned rattle, from birth." }, { "name": "Teether Ring", "price": 12, "category": "Baby", "tone": "#854d0e", "text": "Untreated beech, sized for small hands." }, { "name": "Stacking Arches", "price": 39, "category": "Toddler", "tone": "#b45309", "text": "Seven painted arches, from 12 months.", "badge": "Bestseller" }, { "name": "Push-along Duck", "price": 34, "category": "Toddler", "tone": "#9a3412", "text": "Wobbles and clacks as it rolls.", "badge": "New" }, { "name": "Shape Sorter Box", "price": 36, "category": "Toddler", "tone": "#4d7c0f", "text": "Six shapes, lift-off lid." }, { "name": "Play Kitchen", "price": 210, "category": "Pretend play", "tone": "#78350f", "text": "Hob, oven door and sink, 85 cm tall.", "badge": "Low stock" }, { "name": "Market Stall", "price": 165, "category": "Pretend play", "tone": "#6b4f3a", "text": "With awning, chalkboard and crates." }, { "name": "Tool Bench", "price": 78, "category": "Pretend play", "tone": "#57534e", "text": "Wooden hammer, nuts, bolts and a saw." }, { "name": "Farm Animal Puzzle", "price": 24, "category": "Puzzles & games", "tone": "#365314", "text": "12 chunky pieces, from 2 years." }, { "name": "Marble Run Starter", "price": 89, "category": "Puzzles & games", "tone": "#7c2d12", "text": "34 blocks, builds 6 different runs.", "badge": "New" }, { "name": "Wooden Dominoes", "price": 22, "category": "Puzzles & games", "tone": "#44403c", "text": "28 tiles in a sliding-lid box." } ] }, { "kind": "features", "id": "made", "eyebrow": "How they're made", "title": "Simple materials, careful finishing", "columns": 4, "items": [ { "title": "Regional beech", "text": "Timber from Black Forest sawmills within 60 km of the workshop.", "icon": "leaf" }, { "title": "Water-based paint", "text": "Colours are sealed with a saliva-resistant, water-based finish.", "icon": "check" }, { "title": "Checked by hand", "text": "Every toy is sanded and checked for splinters and loose parts before packing.", "icon": "shield" }, { "title": "Spare parts", "text": "Lost a piece? We sell replacements for every set we make.", "icon": "wrench" } ] }, { "kind": "team", "id": "makers", "eyebrow": "The makers", "title": "Three people, one workshop", "items": [ { "name": "Jonas Keller", "role": "Woodworker, designs every toy", "tone": "#7c2d12" }, { "name": "Elif Sahin", "role": "Painting and finishing", "tone": "#4d7c0f" }, { "name": "Margot Dubois", "role": "Orders, packing and your emails", "tone": "#a16207" } ] }, { "kind": "quotes", "eyebrow": "Parents", "title": "Handed down, not thrown out", "items": [ { "quote": "The stacking arches survived our first child and are now being chewed by the second. Not a chip.", "name": "Lena W.", "role": "Parent of two" }, { "quote": "We lost a piece of the shape sorter under the sofa. A replacement arrived in two days for €2.", "name": "Tobias R.", "role": "Spare parts order" }, { "quote": "The play kitchen is the most used thing in our flat, including our own kitchen.", "name": "Sofia & Ben", "role": "Parents of a 3-year-old" } ] }, { "kind": "faq", "id": "shipping", "eyebrow": "Shipping & returns", "title": "Delivery, returns and gifts", "items": [ { "q": "Where do you ship?", "a": "Germany for €4.90, free over €60. Austria, Switzerland and the rest of the EU from €9.90." }, { "q": "How long does delivery take?", "a": "In-stock toys ship within 2 working days. Play kitchens and market stalls are made in batches; the product page shows the date." }, { "q": "Can I return a toy?", "a": "Unused toys can be returned within 30 days. We cover return postage if something arrives damaged." }, { "q": "Do you gift wrap?", "a": "Yes, in brown paper with a cotton ribbon and a handwritten card, for €3." } ] }, { "kind": "cta", "title": "New toys and workshop news", "text": "A short email every couple of months when a new toy leaves the workshop, plus restock dates for the big pieces.", "primary": { "label": "Sign up", "href": "#contact" }, "secondary": { "label": "Shop toys", "href": "#toys" } }, { "kind": "contact", "eyebrow": "Newsletter", "title": "Join the workshop letter", "text": "Your email stays with us and you can unsubscribe in one click.", "fields": [ "name", "email" ], "button": "Subscribe" } ], "footer": { "text": "Wooden toys made in a small Freiburg workshop.", "columns": [ { "title": "Shop", "links": [ "Baby", "Toddler", "Pretend play", "Puzzles & games" ] }, { "title": "Help", "links": [ "Shipping", "Returns", "Spare parts", "Gift wrapping" ] } ], "legal": "© Little Grove Toys. Sample content: replace it in src/site.ts." }};Remix
Remix this template
Describe what to change and the agent starts from Wooden toy shop's files. The box is already started for you: finish “Start from Wooden toy shop and …”
Dependencies
Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.
- react^19.1.0
- react-dom^19.1.0
- vite^6.3.0
- @vitejs/plugin-react^4.4.0
- tailwindcss^4.1.0
- @tailwindcss/vite^4.1.0
- typescript^5.8.0
How it runs
- Framework
- Vite + React + TypeScript
- Dev command
- npm run dev
- Build command
- npm run build
- Output directory
- dist
- Port
- 5173
- Entry route
- /
Projects run in an isolated sandbox with a live preview. Read the projects documentation for settings, snapshots and deployment.
Keep browsing
All templates
Coffee roaster shop
Dark storefront for a specialty roaster with single origins, a subscription, brew gear and shipping info.
- Featured

Ecommerce storefront
A product catalog with category filters and search, product detail view, and a cart kept in local state.

Sneaker store
Dark sneaker storefront with a filterable catalog, a resole service, drop sign-ups and a working cart.
Build on Wooden toy shop
Create a free account, start from this template, and ask the AI agent to turn it into your app.