Skip to content
VibeFather
Join

2 cases built from this template

Same prompt, different [VARIABLES]. Click one to preview it above.

About this template

Ski Resort Website is a four-page site for a fictional mountain resort, built around the decisions a visitor makes before a ski trip. The homepage pairs a panoramic alpine photograph with a clearly labeled sample conditions report, then moves into an original interactive SVG trail map. Difficulty filters, selectable trails, lift status, and route details make the map useful rather than decorative. Dedicated tickets and rentals, lessons, and lodging pages continue the same planning journey with working client-side calculators and request states.

The visual system combines cold snow whites, deep spruce, ice blue, and restrained trail-rating colors. Bricolage Grotesque gives headlines a confident editorial shape, while Inter and IBM Plex Mono keep prices, labels, and mountain data easy to scan. Large photography, fine contour lines, compact data strips, and short reveal transitions give the site a polished alpine character without imitating an existing resort.

This template suits ski areas, snowboard resorts, winter retreats, and mountain hospitality businesses that need to explain conditions, terrain, prices, instruction, and stays in one coherent experience. All conditions and availability are explicitly illustrative; there is no backend, live feed, payment flow, or real reservation. The ticket estimator, lesson finder, lodging quote, filters, accordions, and mobile navigation all run locally.

The defaults describe Alderpeak Resort in invented Juniper Valley, Colorado. Five variables control the brand, location, hero tagline, audience, and adult day-ticket price. A second case can become a quieter family mountain resort while preserving the same structure. Copy, prices, trail data, FAQs, and image references live in one typed content file, so adapting the resort does not require restructuring components. Six coordinated generated photographs are downloaded into the project, with an original code-drawn trail map and local icons and fonts.

The template prompt

The live demo was built from exactly this text — nothing added. The other cases only change the values of the [VARIABLES].

# Ski Resort Website

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

## Brief
Build a four-page static website for [BRAND], an invented ski resort in [LOCATION], for [AUDIENCE]. The hero uses the line [TAGLINE]. The site includes a clearly labeled sample mountain conditions report, an original interactive SVG trail map with difficulty filters and selectable route details, lift-ticket and rental pricing with working browser-only estimators, a lesson finder and request form, and lodging with a stay estimate. Pages are index.html, tickets.html, lessons.html and lodging.html. Every internal link uses a real file name. All conditions, availability, prices and requests are illustrative and local; nothing is live, charged, booked or sent.

- Audience: The visitor audience is [AUDIENCE]: people comparing terrain, weather, lesson options, equipment and the total cost of a mountain trip on desktop or mobile. The template itself suits resort operators and hospitality marketers who need a concrete planning experience rather than a brochure.
- Goal: Let a visitor understand the mountain within ten seconds, find an appropriate trail, estimate tickets and equipment, choose a lesson, and price a stay without encountering a dead control or an invented live-service claim.
- Tone: Clear, capable and quietly warm, like a good mountain host. Use precise terrain, times, inclusions and prices. Avoid luxury clichés, exaggerated powder claims, fake urgency and exclamation marks. All site copy is US English.

## 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-variable/bricolage-grotesque (OFL-1.1), @fontsource-variable/inter (OFL-1.1), @fontsource/ibm-plex-mono (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. Keep four root HTML entry files: index.html, tickets.html, lessons.html and lodging.html. Each loads /src/main.tsx and sets body data-page to home, tickets, lessons or lodging; main.tsx selects the matching page component without a router.
  - vite.config.ts: base './', plugins [react()], build.outDir 'dist', build.sourcemap false, assetsInlineLimit 0, and rollupOptions.input containing absolute resolved paths to all four root HTML files. Do not copy src/ into dist/.
  - Tailwind 3.4 through PostCSS with content covering all root HTML files and src/**/*.{ts,tsx}. Add every Design color as a kebab-case theme color, fontFamily display ['Bricolage Grotesque Variable','system-ui','sans-serif'], sans ['Inter Variable','system-ui','sans-serif'], mono ['IBM Plex Mono','monospace'], and a 1360px container.
  - In src/fonts.ts import '@fontsource-variable/bricolage-grotesque', '@fontsource-variable/inter', '@fontsource/ibm-plex-mono/400.css' and '@fontsource/ibm-plex-mono/500.css'. Import fonts and src/index.css from main.tsx.
  - Put every visible string, price, time, trail record, lift record, condition, FAQ, image path and variable default in typed src/content.ts. Derive brandSlug by lowercasing [BRAND] and replacing non-alphanumeric runs with hyphens; derive the fictional email as hello@ plus brandSlug without hyphens plus .example. Components contain no hard-coded default-brand copy.
  - Use src/pages/Home.tsx, Tickets.tsx, Lessons.tsx and Lodging.tsx. Shared components include Header, Footer, Reveal, SectionHeading, Accordion and PhotoFrame. Feature components include ConditionsBar, TrailMap, TicketEstimator, RentalPicker, LessonFinder, LessonRequest and StayEstimator. Keep all calculations in pure functions with whole-dollar rounding.
  - Before building, download the six exact image URLs under Assets into public/images/ using the specified file names. Reference them as ./images/<file> from content.ts so all four root-level pages resolve them under Vite base './'. The build never fetches assets.
  - Create public/favicon.svg as described under Assets. Each HTML file gets lang='en', a local favicon link and a plain title: '[BRAND] — [TAGLINE]' on index, and '[BRAND] — Lift Tickets & Rentals', '[BRAND] — Ski & Snowboard Lessons', or '[BRAND] — Lodging' on the others.
  - Write ASSETS.md at the project root with every image, font and icon package, its source, author and license exactly as described under Assets.
  - The production dist/ must contain all four HTML files, hashed local JS/CSS, woff2 fonts, favicon.svg and the six local images, with no source maps and a total size under 20 MB.

## Variables
- [BRAND] — Resort name (default: "Alderpeak Resort"). An invented resort name used in the wordmark, titles, footer, sample email and localStorage key prefixes. Never use a real resort or VibeFather.
- [LOCATION] — Resort location (default: "Juniper Valley, Colorado"). An invented town or valley with a real state. Used in the hero, lodging address, directions and footer.
- [TAGLINE] — Hero tagline (default: "Find your line above the valley."). A short resort-specific sentence used as the homepage H1 and adapted for alternate values.
- [AUDIENCE] — Primary visitors (default: "Skiers, snowboarders, and mountain families"). A plain-language audience phrase used in introductory copy; lesson and trail recommendations should suit this audience.
- [TICKET_PRICE] — Adult day ticket (default: "129"). Digits only, in USD. Drives every ticket category and multi-day rate: teen 0.80, child 0.55, senior 0.75 of adult; two-day 1.85 and three-day 2.55 of the corresponding one-day rate; round each final per-person rate to a whole dollar.
- [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/ski-resort-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: "Ski Resort Website"
colors:
  snow: "#F4F7F5"
  card: "#FFFFFF"
  frost: "#E6EFED"
  spruce: "#102E2D"
  pine: "#1D4842"
  slate: "#5E7272"
  ice: "#B9E2E5"
  sky: "#67B8C5"
  sun: "#E8AD54"
  beginner: "#2E7656"
  intermediate: "#286F9D"
  advanced: "#20292D"
  closed: "#A34F45"
  rule: "#D2DEDA"
typography:
  display_h1_h2_large_prices_room_names_and_the_text_wordmark: { family: "Bricolage Grotesque", weights: [500, 600, 700] }
  text_and_ui_body_navigation_buttons_form_labels_table_cells_and_captions: { family: "Inter", weights: [400, 500, 600] }
  technical_data_condition_values_trail_metadata_coordinates_badges_and_small_numeric_labels: { family: "IBM Plex Mono", weights: [400, 500] }
spacing: "Use an 8px base unit. Center a 12-column container at max-width 1360px with 40px desktop side padding, 28px tablet and 18px under 640px; grid gap 24px. Section padding is 104px desktop, 80px tablet and 64px mobile. H1: Bricolage Grotesque 600, clamp(48px,6.4vw,88px), line-height 0.98, letter-spacing -0.045em. Interior page H1: clamp(42px,5vw,68px), line-height 1.02. H2: clamp(32px,3.6vw,52px), line-height 1.06, letter-spacing -0.035em. H3: 24px/1.2, weight 600. Lead: Inter 18px/1.65, max 58ch. Body: Inter 16px/1.65. Eyebrow: IBM Plex Mono 500 11px uppercase, letter-spacing 0.15em. Buttons: minimum 48px high, 22px horizontal padding, Inter 600 14px. Inputs: 52px high with 16px text. Use tabular numerals for all prices and conditions. Focus-visible: 2px Sky outline with 3px offset."
radius: "18px on large photo frames and major panels, 12px on cards and inputs, 8px on small controls, and 999px only for chips, difficulty dots and stepper buttons. Use 1px Rule borders rather than heavy card shadows; only floating header and mobile menu may use a soft 0 16px 40px rgba(16,46,45,0.12) shadow."
---

# Ski Resort 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
- **Snow** `#F4F7F5` — Main page background and light text over dark photography.
- **Card** `#FFFFFF` — Calculators, map details, pricing cards, forms and accordions.
- **Frost** `#E6EFED` — Alternate sections, map land, selected soft backgrounds and disabled states.
- **Spruce** `#102E2D` — Headline and body ink, footer, primary buttons and dark overlays.
- **Pine** `#1D4842` — Secondary dark surfaces, hover fills and illustrated forest shapes.
- **Slate** `#5E7272` — Secondary copy, captions and inactive labels; never use for small text below accessible contrast.
- **Ice** `#B9E2E5` — Primary accent for selected controls, focus details, data highlights and map panels.
- **Sky** `#67B8C5` — Links on dark surfaces, active data accents and subtle icon fills.
- **Sun** `#E8AD54` — Sparse warm accent for weather, sunrise markers and sample-data badges.
- **Beginner** `#2E7656` — Beginner trail strokes, dots and labels only.
- **Intermediate** `#286F9D` — Intermediate trail strokes, dots and labels only.
- **Advanced** `#20292D` — Advanced trail strokes, diamonds and labels only.
- **Closed** `#A34F45` — Closed status text and dashed trail state; never the only status cue.
- **Rule** `#D2DEDA` — One-pixel borders, table lines, input borders and separators.

## Typography
- **Display: H1, H2, large prices, room names and the text wordmark** — Bricolage Grotesque (OFL), weights 500/600/700. Self-host the font files.
- **Text and UI: body, navigation, buttons, form labels, table cells and captions** — Inter (OFL), weights 400/500/600. Self-host the font files.
- **Technical data: condition values, trail metadata, coordinates, badges and small numeric labels** — IBM Plex Mono (OFL), weights 400/500. Self-host the font files.

## Spacing & shape
- Spacing: Use an 8px base unit. Center a 12-column container at max-width 1360px with 40px desktop side padding, 28px tablet and 18px under 640px; grid gap 24px. Section padding is 104px desktop, 80px tablet and 64px mobile. H1: Bricolage Grotesque 600, clamp(48px,6.4vw,88px), line-height 0.98, letter-spacing -0.045em. Interior page H1: clamp(42px,5vw,68px), line-height 1.02. H2: clamp(32px,3.6vw,52px), line-height 1.06, letter-spacing -0.035em. H3: 24px/1.2, weight 600. Lead: Inter 18px/1.65, max 58ch. Body: Inter 16px/1.65. Eyebrow: IBM Plex Mono 500 11px uppercase, letter-spacing 0.15em. Buttons: minimum 48px high, 22px horizontal padding, Inter 600 14px. Inputs: 52px high with 16px text. Use tabular numerals for all prices and conditions. Focus-visible: 2px Sky outline with 3px offset.
- Radius: 18px on large photo frames and major panels, 12px on cards and inputs, 8px on small controls, and 999px only for chips, difficulty dots and stepper buttons. Use 1px Rule borders rather than heavy card shadows; only floating header and mobile menu may use a soft 0 16px 40px rgba(16,46,45,0.12) shadow.

## Motion
- Define --ease-out cubic-bezier(0.22,0.61,0.36,1). Reveal major sections with Motion whileInView once: opacity 0 and translateY(20px) to rest over 600ms, 70ms sibling stagger, threshold 0.12. Never hide content when JavaScript or motion is unavailable.
- Hero image loads at scale 1.035 and settles to 1 over 1100ms; eyebrow, H1, lead and CTAs rise 18px with 70ms stagger. Do not add parallax or an auto-playing carousel.
- Header changes from transparent with Snow text over the homepage hero to Snow at 96% with Spruce text and a Rule bottom border after 32px scroll; interior pages start in the solid state. Mobile menu fades and slides down 10px over 180ms.
- Trail filters crossfade route opacity over 180ms; the selected route gains a 3px Snow under-stroke and a 160ms opacity pulse, while its detail rows rise 8px over 200ms. Closed routes remain dashed and visibly labeled.
- Calculator totals use a restrained 220ms opacity and translateY(4px) change, never a slot-machine count-up. Steppers, tabs, accordion panels and selected cards animate for 160–220ms with no layout jump.
- Photo frames subtly scale their image from 1 to 1.025 on hover over 450ms; captions and arrows do not move. Links grow a 1px underline from left to right over 220ms.
- With prefers-reduced-motion: reduce, disable all reveals, image scaling, slide/fade transitions, route pulses and smooth scrolling; render content immediately and retain only instant color or border feedback.

## Imagery
Use the six coordinated realistic editorial photographs listed in Assets, all with cool blue winter shadows, faint warm early-morning highlights, natural snow texture and fine grain. The homepage hero is an expansive alpine scene, not a portrait. People may appear only as distant skiers or fully helmeted, back-facing lesson participants; no close faces or identifiable individuals. No generated photo contains text, signs, logos, branded equipment or recognizable landmarks. Use object-fit: cover: hero 50% 48%, skiing 50% 45%, lesson 50% 50%, lodge 50% 55%, room 50% 52%, rentals 50% 50%. The original trail map, contour lines, lift lines, difficulty symbols, favicon and village map are hand-written SVG in code, never traced from a real resort. Use lucide-react icons at 1.6px stroke and 18–22px; do not substitute emoji.

## Tone
Clear, capable and quietly warm, like a good mountain host. Use precise terrain, times, inclusions and prices. Avoid luxury clichés, exaggerated powder claims, fake urgency and exclamation marks. All site copy is US English.

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