2 cases built from this template
Same prompt, different [VARIABLES]. Click one to preview it above.About this template
Jewelry Online Store is a four-page storefront for an independent jeweler selling a small, carefully edited collection. The home page combines a photographic campaign hero with featured pieces, materials and making notes, gift services, and a local newsletter interaction. A collection page lets shoppers combine metal and stone filters, sort by price or name, see live result counts, and recover from an empty filter combination. Each product page includes a responsive gallery, variant and size controls, an accessible ring-size guide, optional engraving with a live preview, gift wrapping, a gift message, care details, and related pieces. The shared cart drawer persists selections in localStorage and calculates personalization, gift wrap, quantities, shipping, and the order total. Checkout moves through details, delivery, and review before producing an explicitly labeled mock confirmation; it never collects card details, sends an order, or takes payment. The visual direction is warm editorial luxury: ivory surfaces, oxblood accents, fine rules, Cormorant Garamond display type, Manrope interface text, nearly square corners, and restrained reveals. Six coordinated studio photographs give the collection a consistent art-directed look without relying on stock imagery. The default content is an invented gold-and-silver jewelry brand, while the alternate values shift the name, city, collection story, materials, and shipping threshold. To adapt the template, change those variables and rewrite the centralized content file; products, filters, policies, cart keys, and page copy all follow the same data. It suits independent jewelers, small studios, and designers who need a polished shopping journey that remains entirely static without a backend.
The template prompt
The live demo was built from exactly this text — nothing added. The other cases only change the values of the [VARIABLES].
# Jewelry Online Store
Build this website exactly as described below. Replace the [VARIABLES] with your own values; keep everything else.
## Brief
Build a complete four-page fine jewelry storefront for [BRAND], a fictional independent studio in [CITY] presenting the [COLLECTION] collection in [MATERIAL]. Pages: index.html, shop.html, product.html?p=<slug> (show the first product when opened without a query), and checkout.html. Include combined metal and stone filters, sorting, product galleries, ring sizing, engraving, gift wrapping and messages, a persistent cart drawer, and a three-step mock checkout. Complimentary shipping applies above $[SHIP_FREE]. Everything runs in the browser; no payment, order, or email is ever transmitted.
- Audience: Independent jewelry studios and small design-led retailers, and shoppers who want clear materials, sizing, personalization, and delivery information before committing to a considered gift or personal keepsake.
- Goal: Make a small collection feel tangible and trustworthy, help a visitor configure a piece without hunting for information, and provide a complete static shopping journey from discovery through mock confirmation.
- Tone: Intimate, precise, and assured. Use concise sensory language and concrete product facts rather than superlatives, urgency, or generic luxury clichés.
## Stack
- Framework: Vite 5 + React 18 + TypeScript
- Styling: Tailwind CSS 3.4
- Libraries: react (MIT), react-dom (MIT), motion (motion.dev, import from 'motion/react') (MIT), lucide-react (ISC), tailwindcss (MIT), postcss (MIT), autoprefixer (MIT), vite (MIT), @vitejs/plugin-react (MIT), typescript (Apache-2.0), @fontsource/cormorant-garamond (OFL-1.1), @fontsource/manrope (OFL-1.1)
- Build: `npm run build` → static files in `dist/`. No backend, no server code, no external APIs.
- Setup:
- Scaffold with npm create vite@latest using the react-ts template. Create four real HTML entry pages at the project root: index.html (src/main-home.tsx), shop.html (src/main-shop.tsx), product.html (src/main-product.tsx), and checkout.html (src/main-checkout.tsx).
- vite.config.ts: base './', plugins [react()], build { outDir 'dist', sourcemap false, assetsInlineLimit 0, rollupOptions { input { index: resolve(__dirname, 'index.html'), shop: resolve(__dirname, 'shop.html'), product: resolve(__dirname, 'product.html'), checkout: resolve(__dirname, 'checkout.html') } } }. Do not copy src/ into dist/.
- Use Tailwind 3.4 through PostCSS with content ['./index.html', './shop.html', './product.html', './checkout.html', './src/**/*.{ts,tsx}']. Add every Design color to theme.extend.colors with kebab-case keys; fontFamily display ['Cormorant Garamond', 'Georgia', 'serif'] and sans ['Manrope', 'system-ui', 'sans-serif']; maxWidth container 1360px.
- In src/fonts.ts import @fontsource/cormorant-garamond/400.css, /500.css and /600.css plus @fontsource/manrope/400.css, /500.css, /600.css and /700.css. Import src/fonts.ts and src/index.css from all four entries.
- Centralize every string, price, product, variant, filter, policy, image path, and checkout label in typed src/content.ts. Add src/lib/brand.ts to derive brandSlug from [BRAND] by lowercasing and replacing runs of non-alphanumerics with hyphens, and emailDomain by removing hyphens and appending '.com'. Add safe localStorage helpers in src/lib/storage.ts with keys prefixed by brandSlug.
- src/lib/product.ts reads product.html?p=<slug> and returns the matching product or the first product for a missing or unknown slug, never a not-found state. src/lib/price.ts centralizes base price, engraving (+$25), gift wrap (+$8 per line), quantity, merchandise subtotal, shipping ($12 below $[SHIP_FREE], otherwise $0), and total calculations.
- Use a tiny external cart store in src/store/cart.ts with useSyncExternalStore. A line stores product slug, variant, size, engraving, giftWrap, giftMessage, quantity, and a composite key. Expose addLine, setQuantity (1–6), removeLine, clearCart, openCart, and closeCart; persist lines under brandSlug + ':cart' and rehydrate safely on every HTML page.
- Components: AnnouncementBar, Header, MobileMenu, Footer, CartButton, CartDrawer, ProductCard, Reveal, Newsletter, Hero, FeaturedPieces, MaterialStory, GiftPanel; shop FilterBar and ProductGrid; product Gallery, VariantPicker, RingSizeDialog, EngravingField, GiftOptions, PurchasePanel, ProductAccordions and RelatedPieces; checkout CheckoutSteps, DetailsForm, DeliveryForm, ReviewOrder and MockConfirmation. Every page renders the shared announcement, header, cart drawer, and footer.
- Before the first build, download each image listed under Assets with curl -L -o into public/images/ using the exact file names. Runtime code and the build never fetch remote assets.
- Create public/favicon.svg as described under Assets. All HTML files use lang='en', <meta name='theme-color' content='#F4EFE6'>, and a local favicon link. Titles: '[BRAND] — [COLLECTION]' on home, 'The collection — [BRAND]' on shop, 'Shop — [BRAND]' on product (replace with the product name on load), and 'Checkout — [BRAND]' on checkout.
- Write ASSETS.md at the project root exactly as described under Assets. Keep dist/ under 20 MB with hashed local JS/CSS, woff2 fonts, four HTML files, favicon, and six images.
## Variables
- [BRAND] — Jewelry brand (default: "Aurel & Vale"). Invented studio name used for the text wordmark, titles, footer, derived email domain, and localStorage keys. Never use a real jewelry house or retailer.
- [CITY] — Studio city (default: "Portland, Oregon"). Used in the studio story, shipping copy, and footer. The city may be real; the street address and business remain invented.
- [COLLECTION] — Collection name (default: "Still Light"). Two or three words used in the hero eyebrow, featured-piece introduction, and document titles.
- [MATERIAL] — Material story (default: "Recycled gold and white sapphire"). The collection's primary material and stone story. Drives hero, material-story, product, and care copy while retaining the same layout.
- [SHIP_FREE] — Free shipping threshold (default: "150"). Digits only. Drives the announcement, cart shipping calculation, progress message, and checkout review. Keep it between 100 and 300.
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/jewelry-online-store in the footer (default: yes; delete this line to remove it)
The copy under Pages & Sections is written for the default values. If your values differ, rewrite every headline, paragraph, label and image for them — same length, tone and structure. Layout, colors, type and motion stay as described.
Keep all copy, image paths and links in one content file (for example `src/content.ts`), keyed by section, so the content can be swapped later without touching components.Pro template. The design, sections, motion and assets parts of this prompt are for Pro members. The live demo and DESIGN.md stay free.
Join Pro early access →DESIGN.md
The design system on its own — colors, type, spacing and motion. Apply this look to a project you already have.
---
name: "Jewelry Online Store"
colors:
ivory: "#F4EFE6"
porcelain: "#FFFDF8"
sand: "#E8DFD1"
ink: "#211C19"
taupe: "#6E6258"
oxblood: "#6F1D2C"
oxblood_dark: "#50131F"
antique_gold: "#A17C43"
rule: "#D8CCBC"
typography:
display_for_the_text_wordmark_h1_h3_product_names_large_prices_and_engraving_preview: { family: "Cormorant Garamond", weights: [400, 500, 600] }
body_navigation_buttons_filters_forms_tables_captions_and_numeric_totals: { family: "Manrope", weights: [400, 500, 600, 700] }
spacing: "Use an 8px base unit and a centered 1360px container with 48px desktop, 28px tablet, and 18px mobile side padding. Desktop sections have 104–128px vertical padding, tablet 80px, mobile 56–64px. Use a 12-column grid with 24px gutters. H1 is Cormorant Garamond 500 at clamp(48px, 6vw, 88px), line-height 0.96, letter-spacing -0.025em; H2 clamp(36px, 4vw, 58px), line-height 1.02; H3 26–32px; body Manrope 400 16px/1.75 with a 62ch maximum; lead 18px/1.7. Eyebrows are Manrope 700 11px uppercase with 0.2em tracking. Buttons are 50px high with 24px horizontal padding, Manrope 700 12px uppercase and 0.12em tracking. Inputs are at least 50px high with 16px text. All interactive elements receive a 2px Oxblood focus outline with 3px offset."
radius: "Nearly square editorial geometry: 2px on buttons, inputs, cards, images, drawer, and dialogs; 0px on large editorial bands; 999px only for swatches, count badges, and tiny status dots. Avoid floating rounded-card dashboards and heavy shadows."
---
# Jewelry Online Store — Design System
Apply this design system to an existing project. It describes the look and feel only; for the full site, use prompt.md.
## Colors
- **Ivory** `#F4EFE6` — Main page background and photographic negative-space complement.
- **Porcelain** `#FFFDF8` — Cards, forms, drawer, dialogs, and alternating sections.
- **Sand** `#E8DFD1` — Image wells, selected filter backgrounds, and subtle section bands.
- **Ink** `#211C19` — Headlines, body text, primary icons, and dark footer background.
- **Taupe** `#6E6258` — Secondary text, metadata, captions, and placeholder copy.
- **Oxblood** `#6F1D2C` — Primary buttons, active controls, focus rings, and small editorial accents.
- **Oxblood Dark** `#50131F` — Button hover and pressed states.
- **Antique Gold** `#A17C43` — Decorative rules, metal swatches, and non-text accents only.
- **Rule** `#D8CCBC` — Hairline borders, table lines, input borders, and separators.
## Typography
- **Display for the text wordmark, H1–H3, product names, large prices, and engraving preview** — Cormorant Garamond (OFL), weights 400/500/600. Self-host the font files.
- **Body, navigation, buttons, filters, forms, tables, captions, and numeric totals** — Manrope (OFL), weights 400/500/600/700. Self-host the font files.
## Spacing & shape
- Spacing: Use an 8px base unit and a centered 1360px container with 48px desktop, 28px tablet, and 18px mobile side padding. Desktop sections have 104–128px vertical padding, tablet 80px, mobile 56–64px. Use a 12-column grid with 24px gutters. H1 is Cormorant Garamond 500 at clamp(48px, 6vw, 88px), line-height 0.96, letter-spacing -0.025em; H2 clamp(36px, 4vw, 58px), line-height 1.02; H3 26–32px; body Manrope 400 16px/1.75 with a 62ch maximum; lead 18px/1.7. Eyebrows are Manrope 700 11px uppercase with 0.2em tracking. Buttons are 50px high with 24px horizontal padding, Manrope 700 12px uppercase and 0.12em tracking. Inputs are at least 50px high with 16px text. All interactive elements receive a 2px Oxblood focus outline with 3px offset.
- Radius: Nearly square editorial geometry: 2px on buttons, inputs, cards, images, drawer, and dialogs; 0px on large editorial bands; 999px only for swatches, count badges, and tiny status dots. Avoid floating rounded-card dashboards and heavy shadows.
## Motion
- Use --ease-out cubic-bezier(0.22, 0.61, 0.36, 1). Reveal major blocks once at 15% visibility from opacity 0 and translateY(16px) over 650ms, with 70ms sibling stagger; use Motion whileInView and viewport once.
- The hero image enters at scale 1.035 and settles to 1 over 1600ms; headline lines rise 18px with 100ms stagger. Keep the headline readable immediately and never animate letter spacing.
- Product images scale to 1.025 over 450ms on hover while a fine Oxblood underline draws beneath the product name. Filter changes use Motion layout and AnimatePresence over 250–350ms; the result count crossfades without delaying new results.
- Cart overlay fades to 38% over 240ms and the drawer slides from x 100% to 0 over 360ms. Quantity and total changes crossfade over 180ms. Ring-size and lightbox dialogs fade and scale from 0.985 to 1 over 220ms; trap focus and close on Escape.
- Gallery changes crossfade over 220ms, accordion heights animate over 260ms, checkout steps crossfade with a 12px horizontal shift over 280ms, and the confirmation check draws once over 450ms.
- For prefers-reduced-motion, render all content at rest, remove image scaling, reveals, layout animation, sliding, and check drawing; preserve immediate state changes and color-only hover feedback.
## Imagery
Use six photorealistic luxury editorial studio photographs generated specifically for this template. Every frame shares warm ivory travertine, deep oxblood silk, antique-gold highlights, soft directional light from upper left, delicate long shadows, and medium-format macro clarity. Jewelry is generic and unbranded: no signatures, recognizable trademarked designs, readable stamps, text, logos, people, faces, or hands. Use object-fit cover with intentional object-position, 2px corners, and no decorative shadows. The home hero must be a large photographic scene, never type alone. Icons come only from lucide-react at 1.5px stroke. Draw the favicon, swatches, focus states, progress line, ring-size table, gift-wrap diagram, and confirmation check in code.
## Tone
Intimate, precise, and assured. Use concise sensory language and concrete product facts rather than superlatives, urgency, or generic luxury clichés.
---
— Prompt by VibeFather · https://vibefather.ai/t/jewelry-online-store · CC BY-NC 4.0 (non-commercial; commercial use needs a VibeFather Pro license) · Request removal: https://vibefather.ai/takedown