================ ONE-SHOT BUILD CONTRACT (read first) ================
Build this in Google AI Studio "Build" in ONE shot — a complete, working app,
no follow-up turns. These are hard rules, not suggestions:
1. TARGET = Full-Stack Web (Node server runtime, secrets, Firebase allowed).
If you target Native Android instead, you MUST drop all server/DB/Workspace/
secrets and persist locally (Room / SharedPreferences) only.
2. PIN EVERY MODEL CALL — never let the agent auto-select (it downgrades on quota):
- Reasoning / text -> gemini-3.5-flash (thinkingLevel: minimal|low|medium|high)
- 4K image + legible text -> gemini-3-pro-image (image_size "4K", up to 14 refs)
- High-volume image -> gemini-3.1-flash-image
- Expressive TTS -> gemini-3.1-flash-tts-preview (inline tags e.g. [whispers])
- Realtime audio/video (WebSocket) -> gemini-3.1-flash-live-preview
- Sandboxed agent -> antigravity-preview-05-2026
3. DIVISION OF LABOR — the model ONLY parses/extracts to a strict responseSchema.
ALL math, money (store currency as integer minor units / cents), sorting,
balancing and graph logic run in deterministic TypeScript/Python. The model
must never compute totals, splits or balances itself.
4. responseSchema sanitation — no regex patterns, no fixed-length tuples, no
format validators in the schema (they crash the OpenAPI engine). Enforce those
in server-side code AFTER parsing the JSON.
5. responseSchema and google_search grounding are MUTUALLY EXCLUSIVE in one call.
6. CODEGEN — split large output into modular, single-responsibility files so no
file is truncated by the output-token cap.
7. Every external call gets a graceful fallback (e.g. manual paste if a Workspace
read fails). Never a silent dead end.
8. ROBUST STORAGE & CANVAS — Wrap all `localStorage`/`sessionStorage` operations (especially JSON parsing and writes) in `try-catch` blocks to prevent crashes in private windows or quota overflows. Canvas drawing elements must dynamically handle window resize and scale pixel density (`window.devicePixelRatio`) to avoid blurry graphics on retina displays.
=====================================================================
# MUST OBEY — Mobile-first build requirements
This app's PRIMARY surface is a mobile phone. Build it impeccably on mobile FIRST, then verify on tablet and desktop. Treat the rules below as non-negotiable hard constraints, not suggestions.
## Viewports to verify (every screen, every state)
- 320 px, 360 px, 375 px, 390 px, 414 px, 480 px
- 768 px, 834 px (iPad portrait / Pro 11)
- 1024 px, 1280 px, 1440 px, 1920 px, 2560 px
- Plus: 200% browser zoom, landscape orientation on every mobile width, iPhone with safe-area insets visible
## Hard layout rules
- Mobile-first CSS. Default styles target mobile; `@media (min-width: ...)` for larger viewports.
- Use `dvh` and `svh` instead of `vh` for full-height surfaces (iOS Safari URL-bar bug).
- Use `clamp()` for fluid typography across all viewports.
- Prefer container queries (`@container`) over media queries for component-level responsiveness.
- Use `min(100%, ...)` widths so content never overflows. Zero horizontal overflow at any viewport.
- Add `` to every page.
- Apply `padding: max(safe-area-inset-X, fallback)` on every edge-bleeding container so notched iPhones in landscape never clip content.
- Wide tables and code blocks scroll INSIDE their container (`overflow-x: auto`), never push the body.
- Use `background-attachment: scroll` on mobile, not `fixed` (iOS Safari repaint bug).
- Avoid `backdrop-filter` on animated elements. Use it sparingly on static surfaces only.
- **Canvas Scaling**: Canvases must dynamically scale with window resize events and properly handle high-DPI screens (`window.devicePixelRatio`). Set physical dimensions (`canvas.width`/`canvas.height`) using pixel ratio and render relative to this grid, using CSS to control responsive viewport scaling.
- **Robust Storage**: Every access to `localStorage`/`sessionStorage` (especially `JSON.parse` of loaded state or writes) MUST be wrapped in a `try-catch` block to handle disabled storage, private browsing mode, quota limits, or corrupted JSON gracefully. Fall back to a robust in-memory object store.
## Touch & accessibility
- Tap targets ≥ 44 × 44 px on touch (Apple HIG). Increase to 48 px under `@media (hover: none) and (pointer: coarse)`.
- All interactive controls reachable by keyboard with a visible focus ring; respect `:focus-visible`.
- Color contrast ≥ 4.5:1 for body text, 3:1 for UI components.
- All images have meaningful `alt`. Decorative images use `alt=""`.
- Respect `prefers-reduced-motion: reduce` — zero animation durations under that query.
- Forms validate inline; error messages are specific, not "Invalid input".
- Modals: focus trap, `Esc` closes, `role="dialog"`, `aria-modal="true"`, focus restored on close.
## Performance bar (Lighthouse mobile, throttled 3G/4G)
- LCP < 2.5 s · INP < 200 ms · CLS < 0.1
- JS bundle gzip < 200 KB mobile-first; lazy-load non-critical screens via `React.lazy` / dynamic imports.
- No render-blocking resources above the fold.
- Images: WebP/AVIF preferred, `loading="lazy"`, explicit `width`/`height` attributes (zero CLS), `srcset` for retina.
- Videos: `preload="metadata"`, low-resolution poster, max 720p mobile fallback. Never autoplay with audio.
- Fonts: `font-display: swap`; preload only the one used above the fold.
- Smooth scroll honoured via CSS `scroll-behavior: smooth` with reduced-motion fallback.
## Pre-ship mobile checklist (the deployer MUST verify before declaring done)
1. Open at 375 px in DevTools — every screen scrolls vertically only; zero horizontal scroll.
2. Browser zoom 200% — layout reflows without overlap.
3. iPhone Safari with the URL bar visible AND landscape — no content under the home indicator; no notch clipping.
4. iPad portrait (768 px) and landscape (1024 px) — no awkward gaps; tablet-specific breakpoints land cleanly.
5. Tap every interactive element with a thumb at real-device size — every target is easy to hit.
6. `prefers-reduced-motion: reduce` — every transition / animation skips cleanly, scroll-behavior becomes instant.
7. Lighthouse mobile score ≥ 90 across all 4 categories.
8. Zero `console.error` and zero CLS shift in real-device testing on a mid-tier Android (e.g. Pixel 6a) and an iPhone SE.
---
The original template starts below. All rules above apply on TOP of whatever this template specifies.
---
# Build Prompt — Band and Artist Website
Paste this into Google AI Studio's **Build** function. It is self-contained — every section below is part of the instructions.
_Source reference: https://lovable.dev/templates/websites/music/mirage-band-artist-website-template_
---
## 1. Project
Build a **Music** named **Band and Artist Website**.
One-line description: _Professional music showcase site_
**What it is:**
This template gives you a complete band website that looks professional and you don't need design skills or coding knowledge to make it work. The Desert Highway showcase shows you exactly how to present your music catalog, merchandise, videos, and tour schedule so fans take you seriously. Whether you're pitching venues, building your fanbase, or establishing credibility with industry contacts, this template shows you what works without the cost or time commitment of custom development.
You don't need to waste time figuring out how to organize your content. The technical parts are already handled—responsive design that works on any device, mobile menus that adapt to phone screens, image galleries that stay visible while visitors scroll. Music releases with album metadata, tour dates with status tracking, merchandise with category organization, and band info are all set up in dedicated sections. You get to focus on what matters: showcasing your music and growing your audience.
The Desert Highway project uses a clean black-and-white design that looks cinematic and professional. Every section displays clearly on any screen size, showing you what your online presence can be.
## 2. Target audience
- Independent musicians building professional web presence without developer budgets
- Solo artists and bands learning how to showcase releases, tour dates, and merch professionally
- Music producers and DJs building credibility with booking agents and labels
- Independent labels creating consistent web presence across multiple artists
- Tribute bands and cover artists meeting venue owner expectations for online presence
- Session musicians showcasing their range and professionalism to potential clients
## 3. Core value propositions
Surface these clearly through copy, visual emphasis, and section ordering — they are the reasons users pick this product.
- **Professional band website ready** — Complete music, merch, tour, and video sections built for credibility with fans and industry contacts.
- **Cinematic dark aesthetic** — Glassmorphic cards, staggered animations, and full-viewport hero create an atmospheric, professional look.
- **Mobile-perfect experience** — Responsive grids, adaptive menus, and touch-friendly layouts work flawlessly on every device.
- **Content-first organization** — Dedicated sections for releases, merchandise, videos, and tour dates keep fans engaged and informed.
- **Launch in hours, not weeks** — Pre-built pages and layouts let you showcase your music professionally without coding knowledge.
## 4. Features to build
**Product features:**
Production-ready features built with modern tech stack for exceptional performance and user experience
- Full-viewport hero
- Release catalog display
- Tour date management
- Merchandise showcase
- Video gallery integration
- Glassmorphic ui design
- Staggered motion animations
- Sticky sidebar layouts
- Context-aware navigation
- Band identity section
- Responsive image grids
- Professional typography system
## 4b. Required services & integrations
List the back-end services this template needs to function. If a service is not needed, say so explicitly — silence is ambiguous.
- **Auth — Optional.** Only for fan-club / paid-tier areas.
- **Database — Light.** Tour dates, releases, video links, mailing-list subscribers.
- **Image/video CDN — Required.** Album art, hero video, photo galleries.
- **Payments — Optional (Required for merch).** Stripe checkout if merch shop included.
- **Newsletter — Required.** Mailing list for tour pre-sales and release announcements.
- **External APIs / third-party services:**
- Spotify / Apple Music / Bandcamp / Tidal deep links
- YouTube embeds for videos
- Ticket vendor links (DICE, Eventbrite, Bandsintown, Songkick)
**Environment variables to expose in the build:** mark every secret (API key, DB URL, JWT secret, Stripe key, S3 credential) as a clearly named `.env` variable — never hard-code. Include a `.env.example` with the full list.
**Auth + data privacy reminders:** never log secrets · never store passwords in plain text · use HTTPS everywhere · hash + salt with bcrypt or argon2 · refresh tokens with rotation · honor a 'delete my account' request inside the UI.
## 5. Use cases & content to include
Build dedicated UI sections or pages for each of these — they tell you what content the page must support.
- **Release Promotion** — The Desert Highway project demonstrates how fans can browse an entire catalog without getting overwhelmed. Each of the 6 albums gets space to stand out with cover art, track details, and release information. When fans visit after hearing your music, they can easily find other releases through the three-column grid that collapses to single-column on mobile. Album artwork stays visible while visitors scroll through track listings and release notes, creating an immersive experience that keeps them engaged with your music story instead of bouncing to another site. Each release shows what format it is and when it came out so fans immediately understand what they're browsing.
- **Tour Management** — The template showcases tour dates with venue details, ticket status, and location information through Desert Highway's 6 example shows. Status badges show fans immediately whether tickets are available, sold out, or in presale. Venue owners researching your tour schedule can see at a glance that you're actively gigging, making you more bookable. The vertical list format with large date numbers creates visual hierarchy. Individual show pages demonstrate how to highlight venue-specific details that help sell tickets and build excitement, keeping show images visible while fans read details.
- **Merchandise Sales** — Desert Highway's 6 merch items demonstrate how fans can browse without getting lost in a cluttered catalog. Category organization with inline badges (Vinyl, CD, Apparel, Print, Cassette) helps casual fans find apparel while collectors head straight for limited releases. The three-column responsive grid shows pricing upfront without requiring multiple page clicks. Product detail pages showcase how large images and detailed descriptions justify your pricing and convert browsers into buyers, keeping product photos visible while fans browse.
- **Band Identity and Story** — The Info page demonstrates how to tell your story with band bio, member profiles, and the narrative behind your music. Desert Highway's example shows new fans how to get context about who you are and what you stand for—essential when they're deciding whether to follow you or buy tickets. This structure becomes your template when music journalists, booking agents, or potential collaborators research you, giving them the professional background they need to take you seriously instead of dismissing you as another amateur act.
## 6. Recommended page structure
Generate the following sections in this order. Adjust labels to fit the brand voice, but keep the structural intent.
1. Hero — full-bleed image / video, artist name, latest release CTA.
2. Latest release with cover art, tracklist, streaming links.
3. Discography grid.
4. Tour dates with venue + ticket link + status badges.
5. Video / media gallery.
6. Merch grid.
7. About / press kit.
8. Footer with socials and contact.
## 6b. First-visit onboarding
Show a **first-visit onboarding** the first time a visitor lands on the site
(detect via `localStorage` flag; do not show on return visits). Keep it
short — three steps maximum — and respectful: visitors can dismiss at any
time and revisit later from a `?` icon in the header.
**Format:** a polished modal *or* a 3-step inline tour, designed to match the
overall visual style of the template (don't bolt on a generic stepper UI).
On mobile, full-screen sheet that slides up.
**Required content — three slides:**
1. **What this is.**
- One-line headline: "Welcome to *Band and Artist Website* — a template for Professional music showcase site."
- One paragraph (max 60 words) explaining what the template demonstrates,
who it's for, and what you'd typically use it for.
- Visual: a small annotated screenshot of the page they're about to see,
OR a 4-frame storyboard of key sections.
2. **What to try.**
- 2–3 specific things the visitor should look at to understand the design
(e.g. "Open a section to see the booking flow", "Hover the gallery for
captions", "Resize the window — every layout is fluid").
- Reference real elements on the actual page so the visitor learns by doing,
not by reading.
3. **How to remix this.**
- A direct CTA: "Use this template" → links to Lovable / AI Studio Build
remix entry point.
- Below: 3 short bullets on how to make it yours — e.g.
• "Swap the copy in `data/content.{ts,json}` for your own."
• "Replace the imagery in `/public/images/` (we use AVIF + WebP)."
• "Connect your services using the env-var list in section 4b above."
- Plus a quieter secondary action: "Just looking — close" (closes modal,
remembers preference in localStorage, never auto-shows again).
**Persistent re-entry point:**
A small "?" icon in the top-right header next to the primary nav. Click → reopens the onboarding from slide 1. Tooltip: "How this template works".
**Accessibility:**
- Trap focus inside the modal while open
- `Esc` closes
- All controls reachable by keyboard, visible focus ring
- Heading hierarchy: modal title is `h1` inside the dialog
- `role="dialog"` + `aria-modal="true"` + `aria-labelledby`
- Restore focus to the trigger (or to ``) on close
- Respect `prefers-reduced-motion` — fade in/out only, no large transforms
**Copy tone:**
Warm and direct, not corporate. Avoid "Welcome to your dashboard" language.
Avoid all caps. Use the same voice as the rest of the template's copy.
**Don't:**
- Don't gate content behind the modal. The page below must be fully scrollable.
- Don't show the modal again on return visits. Use `localStorage['onboarding-seen']`.
- Don't include marketing CTAs unrelated to remixing (no newsletter signup, no
"follow us on X" — those live elsewhere).
## 7. Design language
- **Mood:** Cinematic, atmospheric, photo-led. Heavy on imagery and motion.
- **Typography:** Display serif or condensed sans for artist name; clean body sans. Use a clear modular scale (e.g. 12 / 14 / 16 / 20 / 24 / 32 / 48 / 64 px) and tight tracking on display sizes.
- **Palette:** Often dark or duotone. Strong contrast between text and imagery.
- **Spacing:** consistent 4-px base. Generous whitespace — let the content breathe.
- **Radius:** consistent token set (e.g. 6 / 12 / 20 px). Don't mix arbitrary values.
- **Shadows:** subtle, layered. Avoid heavy drop-shadows.
- **Imagery:** Performance photography, album art, moody portraits. Vignette overlays allowed if requested.
- **Motion:** purposeful — entrance fades, hover lifts, page transitions. Respect `prefers-reduced-motion`. No bouncing splash animations.
## 8. Content generation rules
- Write **realistic, specific copy**. NO Lorem Ipsum. NO generic placeholders like 'Your tagline here'.
- Invent plausible names, dates, locations, prices, quotes, testimonials and product details that fit the domain.
- Tone should match the audience above — confident, specific, free of buzzwords.
- Headlines: punchy and concrete. No 'Empower your business' filler.
- Body copy: short paragraphs (2–4 sentences). Use lists where appropriate.
- All numbers, stats, and metrics must look plausible for the domain.
## 8a. Seed content (use these specific examples)
Anchor the generated copy in the concrete data below. Use these names, numbers, dates, and snippets verbatim where helpful, or generate close variants that sit in the same world.
**Band identity:** Mirage · 4-piece dream-pop band · Manchester · 1 album, 4 singles
**Members:** Sara Drasner (vocals, keys) · Marcus Tate (guitar) · Yara Chen (bass) · Lucas Bremer (drums)
**Latest:** "*Wraith*" — debut album — April 4, 2026 · 9 tracks · 33 min · Heavenly Recordings
**Singles + videos:**
- "Wraith" (3:12) — official video by Diego Oviedo (140k views)
- "Slow Light" (4:01) — featured on BBC 6Music
- "Glass Half Slept" (3:48) — synced to Netflix series *Cold Coast*
- "End of June" (3:34) — playlisted on All New Indie (Spotify)
**Shows (next 6 weeks):**
- May 20 — Yes, Manchester — sold out
- May 22 — Brudenell Social Club, Leeds — tickets
- May 25 — Hoxton Hall, London — tickets
- May 30 — La Maroquinerie, Paris — tickets
- Jun 02 — Botanique, Brussels — tickets
- Jun 06 — Best Kept Secret Festival, NL — festival
- Jun 14 — End of the Road, UK — festival
**Bio:** "Mirage formed in 2022 when vocalist Sara Drasner moved from a comp-sci PhD to a north-Manchester rehearsal room. *Wraith* was recorded at Crown Lane Studios with producer Sam Petts-Davies (The Smile, Radiohead)."
**Press:** "Shimmering, melancholic, unforgettable." — *NME* · "8/10 — they remind me what dream-pop is for." — *The Quietus*
## 9. Media & assets
Every ``, `background-image`, gallery tile, thumbnail, and decorative figure on the page must come from ONE of the three buckets below. Do NOT reference any image path that is not specified here. Do NOT ship stock-photo placeholders.
### Bucket 1 — Runtime-generated via Nano Banana Pro (`gemini-3-pro-image`)
Generate at build time, cache to Firebase Storage at the path listed, serve via signed URL. Each call uses model `gemini-3-pro-image`, output format `image/webp`, dimensions as listed. The visual register matches section 7 (Design language) and the specific seed content in section 8a.
- **Hero image** → `/public/generated/hero.webp` · 2400×1500 · prompt: "Cinematic full-bleed photograph or live-performance still of the artist named in section 8a, in the visual register of section 7. Moody lighting, vignette acceptable. Real-photo aesthetic, 35mm or medium-format look. No on-image text, no logos, no readable festival signage. Composition leaves a clean lower-third for the artist-name wordmark."
- **Album / release covers (one per release in section 8a's discography)** → `/public/generated/releases/{release-slug}.webp` · 1500×1500 · prompt: "per-release prompt: "Square album cover art in the visual register of section 7 for the release named in section 8a (album title + year). No on-image text — text will be composited in CSS. Subject derives from the release's tone (e.g. 'Glow' → soft amber light through silk; 'Slow Songs' → empty late-night diner counter)". One image per release."
- **Tour-poster thumbnails (one per tour date in section 8a)** → `/public/generated/tour/{date-slug}.webp` · 1080×1350 · prompt: "per-date prompt: "Portrait-oriented tour poster background for the venue named on that date, evoking the city + venue character (e.g. Royal Festival Hall → Brutalist concrete + Thames at dusk). No on-image text — text composited in CSS.""
- **Press / about portrait** → `/public/generated/about-portrait.webp` · 1200×1500 · prompt: "Editorial portrait of the artist named in section 8a, natural light, slight smile or thoughtful neutral, neutral background, suitable for an About page. No on-image text."
- **Merch grid product shots (8 items)** → `/public/generated/merch/m-01.webp … m-08.webp` · 1200×1200 · prompt: "Per-item prompt: white-seamless studio shot of a single merch item — t-shirt, hoodie, vinyl sleeve, tote, enamel pin, poster, beanie, sticker pack — in the artist's palette. No on-image text. Real-photo aesthetic."
- **Wordmark / monogram** → `/public/generated/wordmark.svg` · prompt: "A simple artist wordmark for the artist named in section 8a, set in the display sans/serif of section 7, no glow, suitable for tour-poster headers." Favicon export to `/public/generated/favicon-256.webp` (256×256).
### Bucket 2 — Seed assets shipped with the deliverable
Static files committed to `/public/samples/` as fallbacks when generation fails. Generated once via Nano Banana 2 (`gemini-3.1-flash-image`), 1024×1024 WebP unless noted.
- `/public/samples/empty-state-tour.webp` — 1024×1024 — prompt: "Minimal hand-drawn line illustration of an empty stage with one microphone stand, single-stroke outline, no colour fill."
- `/public/samples/empty-state-discography.webp` — 1024×1024 — prompt: "Minimal hand-drawn line illustration of an empty vinyl sleeve, single-stroke outline, no colour fill."
- `/public/samples/hero-fallback.webp` — 1600×1000 — same prompt as the Bucket-1 hero, encoded once at build and committed so the page renders identically if Gemini quota is exhausted.
### Bucket 3 — User-supplied (when the template is remixed)
Onboarding modal surfaces a "Replace with your photos" hint. Uploads land via the file input → Firebase Storage path `artists/{artistSlug}/uploads/`. The build ships with Bucket-1 + Bucket-2 only; no user-supplied images at first paint.
### Hard rules
- Every `` tag MUST have a `src` that resolves to a path listed above. Any `` referencing a path not in this section is a build error.
- No bare `image.jpg` / `hero.jpg` / `placeholder.png` references anywhere in the code.
- Icons: `lucide-react` only; use sparingly and consistently — never decorative-only.
- Optimisation: WebP or AVIF, `loading="lazy"` on everything below the fold, explicit `width`/`height` to prevent layout shift.
## 10. Interactivity & states
- Every interactive element has a hover, focus, active, and disabled state.
- Forms validate inline and show specific error messages.
- Loading states (skeletons, not spinners where possible).
- Empty states with helpful next-action guidance.
- Smooth scroll for in-page anchors.
## 11. Tech & responsive requirements
- **Stack:** React + TypeScript + Tailwind CSS. Use functional components and hooks.
- **Mobile-first.** Verify layouts at 375 px (iPhone SE), 768 px (iPad), 1024 px, 1440 px+.
- Use `clamp()` for fluid typography where appropriate.
- Prefer container queries over media queries for component-level responsiveness.
- Use `dvh` / `svh` units instead of `vh` to handle mobile viewport chrome.
- Zero horizontal overflow at any width. Zero layout shift on load.
- Respect safe-area insets on iOS.
## 12. Accessibility (WCAG 2.2 AA)
- Semantic HTML — `header`, `nav`, `main`, `section`, `article`, `footer`.
- All interactive controls reachable by keyboard with a visible focus ring.
- Color contrast ≥ 4.5:1 for body, 3:1 for large text and UI components.
- All images have meaningful `alt` text. Decorative images use `alt=""`.
- Form fields have associated `