Skip to content
VibeFather
Join

About this template

A two-page site for a crewed yacht charter house, dressed like a chart table: deep navy ground, white panels, hairline brass, and deck-gray mono labels for everything measurable. The first screen is a yacht at anchor in brilliant Mediterranean light — white hull, deep azure water — under a crisp sans headline and a mono label naming the waters. The fleet grid is the working deck: four yachts on white cards with mono spec lines (meters, guests, cabins, type), filtered by type, guest count and cabin count, and the grid visibly re-sorts with a layout animation when a filter lands. Each card links to a query-routed detail page that opens on the flagship when entered bare: photo strip, a mono specification table, and a deck plan drawn in SVG — hull, cabins, salon, cockpit and swim platform labeled with brass leader lines — plus the sample weekly rate and a jump to the quote form. Back on the home page, two sample itineraries plot on an illustrated route map: invented anchorages, a dotted brass route, numbered stops that swap when you toggle seven nights against a long weekend. The quote request — yacht, season, guests, notes — saves locally with an honest note that nothing is sent. Photography stays in one sea-light grade: bright midday clarity, salt haze, yachts, teak and coastline, crew only distant. Swap brand, waters, port and entry rate in one content file; the second demo case turns the same house into a day-charter catamaran fleet.

The template prompt

The live demo was built from exactly this text — nothing added.

# Yacht Charter Website

Build this website exactly as described below. Replace the [VARIABLES] with your own values; keep everything else.

## Brief
A two-page yacht charter site with a crisp nautical identity — navy ground, white panels, brass hairlines, deck-gray mono labels: a bright sea-light hero of a yacht at anchor, a filterable four-yacht fleet grid with layout animation, a query-routed yacht detail page with specs and an SVG deck plan, sample itineraries on an illustrated route map with numbered stops, and a locally saved quote request.

- Audience: Crewed charter houses, brokers and boutique fleets, and the studios building for them.
- Goal: Take a visitor from the postcard to the plan: browse the fleet, filter to their party, study a deck plan, imagine a route, and leave a quote request — with every rate and route honestly labeled as sample data.
- Tone: Chart-table precise and salt-cured: short declarative lines, mono numbers, no adjectives doing the work of a photograph.

## Stack
- Framework: Vite 5 + React 18 + TypeScript
- Styling: Tailwind CSS 3.4
- Libraries: tailwindcss (MIT), motion (MIT), lucide-react (ISC), @fontsource/archivo (OFL), @fontsource/roboto-mono (Apache-2.0)
- Build: `npm run build` → static files in `dist/`. No backend, no server code, no external APIs.
- Setup:
  - Scaffold with npm create vite@latest yacht-charter-website -- --template react-ts; add [email protected], postcss and autoprefixer as dev dependencies; add motion, lucide-react, @fontsource/archivo and @fontsource/roboto-mono as dependencies.
  - vite.config.ts: base './', build.sourcemap false, and build.rollupOptions.input with TWO entries — index.html and yacht.html — so one command builds both pages.
  - tailwind.config.js: extend colors navy #12263A, navyraised #1B3350, white #FCFBF7, deckline #D8DCE0, deckgray #8C959D, brass #B98F4E, brasslight #D3AC6C, ink #1B2B3A, haze #9FB4C2; fontFamily sans 'Archivo' and mono 'Roboto Mono'; radius: panel 6px and pill 999px.
  - postcss.config.js: tailwindcss + autoprefixer.
  - src/components/FleetGrid.tsx: the filterable grid — three filter groups as mono chips (TYPE: All/Sailing/Motor · GUESTS: All/Up to 8/9–12 · CABINS: All/4+/6+); matching yachts render inside Motion's AnimatePresence with layout animations so cards visibly re-sort (350ms); non-matching cards leave with a 40% scale fade.
  - src/components/RouteMap.tsx: an illustrated chart drawn in SVG, viewBox 0 0 800 460, on a white panel — a generic invented coastline as a deck-gray filled landmass along the top-left, four small islands, a light-blue-gray sea wash (5% deckgray), a faint 40px lat/long grid, and the active itinerary as a dotted brass route path (stroke-dasharray 2 8) with numbered brass stop circles; stop positions come from content.ts; switching itineraries crossfades the route (300ms) and redraws the dotted path.
  - src/components/DeckPlan.tsx: a top-down deck plan drawn in SVG, viewBox 0 0 720 220, on a white panel — the hull as an elongated rounded outline (ink stroke 2px, white fill), a swim platform at the stern, cockpit, salon and galley as deck-gray-tinted rects with deckline strokes, four cabins as 90×70 rects (two port, two starboard) and a bow suite at the fore; every region labeled in Roboto Mono 11px with 1px brass leader lines; cabin count is a prop so each yacht renders its own count (the flagship's geometry is the fixed reference layout).
  - src/lib/motion.ts: calm variants — reveal (opacity 0→1, y 20→0, 700ms cubic-bezier(0.16,1,0.3,1), 100ms stagger, whileInView once) — with useReducedMotion making layout re-sorting instant and route swaps plain fades.
  - Keep every user-facing string and data set (brand, waters, port, entry rate, fleet array {id, name, type, meters, guests, cabins, rate, photo, blurb}, itineraries {id, title, nights, stops[{n, name, line, at{x,y}}], path}, quote copy, contact) in src/content.ts; both pages read from it so values swap in one place.
  - yacht.html reads the id from location.search (?id=aletia) and maps it to the fleet array; with no id or an unknown id it shows the FIRST yacht (the flagship), never an empty or not-found state. Links between pages are file names: ./yacht.html?id=aletia and ./index.html#quote. index.html: <title>[BRAND] — Crewed Charters in [WATERS]</title>; yacht.html: <title>[BRAND] — Yacht name</title> (dynamic); one shared drawn-in-code favicon.svg (a brass anchor-less dot-and-line mark — a simple brass circle on navy).

## Variables
- [BRAND] — Charter house (default: "Saltcrest Charters"). Invented charter house for the wordmark, page titles and contact email (from content.ts).
- [WATERS] — Waters (default: "the Vela Isles"). The invented cruising ground — hero label, itinerary intro and footer ('[WATERS]' is a fictional archipelago, never a real coastline).
- [PORT] — Home port (default: "Port Selene"). The invented base port where charters embark and the itineraries start.
- [WEEK_FROM] — Entry weekly rate (default: "€38,000"). The flagship's sample weekly rate — fleet card, yacht detail price line and hero sub-line ('from [WEEK_FROM] per week, all-inclusive, sample rate').
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/yacht-charter-website 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: "Yacht Charter Website"
colors:
  navy: "#12263A"
  navy_raised: "#1B3350"
  white: "#FCFBF7"
  deck_line: "#D8DCE0"
  deck_gray: "#8C959D"
  brass: "#B98F4E"
  brass_light: "#D3AC6C"
  ink: "#1B2B3A"
  haze: "#9FB4C2"
typography:
  display_and_body_headlines_card_names_copy_crisp_sans_labels_uppercase_tracked_0_14em: { family: "Archivo", weights: [400, 500, 600, 700] }
  mono_every_measurable_thing_spec_lines_filters_prices_stop_numbers_notes_deck_gray_labels: { family: "Roboto Mono", weights: [400, 500, 700] }
spacing: "Chart-table orderly: sections py-28 (112px) desktop / py-20 mobile; content max-w-6xl px-6/px-10; white panels carry 28px padding with 1px deckline borders; spec rows sit on hairlines with 14px mono padding; the route map panel gets full content width."
radius: "Ship-shape restraint: 6px on panels, cards and photos; 999px pills on the two CTAs and filter chips; the SVG hull and deck regions keep 4px corners."
---

# Yacht Charter Website — 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
- **Navy** `#12263A` — Page ground on both pages — deep nautical navy.
- **Navy raised** `#1B3350` — Hover tints on navy, filter-chip grounds, footer band.
- **White** `#FCFBF7` — Panels, fleet cards, spec tables, deck plans and route map — the chart paper.
- **Deck line** `#D8DCE0` — Hairlines on white: table rules, card borders, SVG deck strokes.
- **Deck gray** `#8C959D` — Mono labels on white and secondary text on navy; the SVG landmass and deck fills.
- **Brass** `#B98F4E` — The accent: route lines and stop numbers, prices, CTAs, leader lines, active chips.
- **Brass light** `#D3AC6C` — Hover and emphasis on brass; hero label on photography.
- **Ink** `#1B2B3A` — Primary text on white — navy-black ink for headlines and body.
- **Haze** `#9FB4C2` — Secondary text on navy: captions, sample notes, meta lines.

## Typography
- **Display and body — headlines, card names, copy (crisp sans; labels uppercase tracked 0.14em)** — Archivo (OFL), weights 400/500/600/700. Self-host the font files.
- **Mono — every measurable thing: spec lines, filters, prices, stop numbers, notes (deck-gray labels)** — Roboto Mono (Apache-2.0), weights 400/500/700. Self-host the font files.

## Spacing & shape
- Spacing: Chart-table orderly: sections py-28 (112px) desktop / py-20 mobile; content max-w-6xl px-6/px-10; white panels carry 28px padding with 1px deckline borders; spec rows sit on hairlines with 14px mono padding; the route map panel gets full content width.
- Radius: Ship-shape restraint: 6px on panels, cards and photos; 999px pills on the two CTAs and filter chips; the SVG hull and deck regions keep 4px corners.

## Motion
- Fleet re-sort: AnimatePresence with layout animations — cards glide to their new positions (350ms) while filtered-out cards scale to 96% and fade (250ms); counts in the mono caption update instantly.
- Route map: switching itineraries crossfades the dotted brass route (300ms) and the numbered stop circles pop in staggered 60ms; the coastline stays put.
- Hero: the photograph parallaxes at 0.06 of scroll (the page's only parallax) and settles 1.03→1 over 2.5s; the mono label leads the headline by 120ms.
- Deck plan: cabin rects fade in staggered 80ms on first view; leader lines draw 400ms.
- Reveals: sections and cards fade up (y 20→0, 700ms cubic-bezier(0.16,1,0.3,1)) with 100ms stagger via Motion whileInView, once.
- prefers-reduced-motion: layout re-sorting and crossfades become instant, parallax and settles off, all reveals plain 200ms opacity fades.

## Imagery
One sea, one light: bright Mediterranean yacht photography in brilliant midday clarity — white hulls against deep azure water, salt haze on the horizon, crisp nautical contrast, uncluttered compositions. Yachts at anchor and under way, teak decks with brass fittings, and an unnamed coastline from the air; crew appear only as distant figures with no identifiable faces. No readable text anywhere in frame, no logos, no flags or ensigns of any kind. The six photographs are generated by VibeFather and downloaded into public/images.

## Tone
Chart-table precise and salt-cured: short declarative lines, mono numbers, no adjectives doing the work of a photograph.

---
— Prompt by VibeFather · https://vibefather.ai/t/yacht-charter-website · CC BY-NC 4.0 (non-commercial; commercial use needs a VibeFather Pro license) · Request removal: https://vibefather.ai/takedown