[{"slug":"changelog","publishSlug":"changelog","title":"Changelog","name":"Plank","vertical":"Data, internal & startup","tech":"Vanilla JS","summary":"A calm product changelog in the Linear / Stripe style — dated New/Improved/Fixed entries, live tag filtering, inline screenshots, and an RSS feed.","order":1,"liveUrl":"https://changelog.view.fast/","previewUrl":"https://changelog.view.fast/","setupQuestions":["What's the product name and a one-line description of what it does?","Give me 3-4 recent release notes — version, date, category, and what changed.","What's your brand accent color?","Where should \"subscribe to updates\" point (email signup URL or just RSS)?"],"photoTerms":["macbook on minimal desk workspace","app interface ui mockup screenshot","abstract gradient background soft","clean product screenshot on laptop"],"prompt":"Build me a **product changelog** — a calm, dated \"what's new\" page in the Linear /\nStripe / Clerk style, with New / Improved / Fixed badges, tag filtering, and an RSS\nfeed — as a self-contained static site (one `index.html` plus a CSS and a JS file\nand a `feed.xml`, no build step, no framework).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's the product name and a one-line description of what it does?\n2. Give me 3–4 recent release notes — version, date, category (New / Improved / Fixed), and what changed.\n3. What's your brand accent color?\n4. Where should \"subscribe to updates\" point — an email signup URL, or just the RSS feed?\n\n**Then build a complete, polished, responsive changelog with:**\n\n- A **header**: product name, a one-line description, and Subscribe actions (an email\n  prompt and an RSS link), with a sticky top bar.\n- A **filter bar** that toggles the timeline by **New / Improved / Fixed** (plus\n  \"All\"), highlights the active filter, and shows a live \"showing X of Y\" count.\n- A **release timeline**, newest first: each entry has its date, a relative \"x days\n  ago\" stamp, the version number, a colored category badge, a title, a short\n  description (bullets are good), and — for the bigger releases — an inline\n  screenshot or UI mockup.\n- **Per-entry permalink anchors**: each release has an `id`, and a link icon that\n  copies a deep link to the clipboard and shows a small \"copied\" toast.\n- A **footer subscribe block**: an email field that shows a friendly \"you're on the\n  list\" success state on submit (no backend), plus a prominent RSS link.\n- A valid **`feed.xml`** (RSS 2.0) that mirrors the same entries, linked from the\n  page `<head>` so feed readers discover it.\n\n**Design & content notes:**\n\n- Calm and restrained, like a well-run SaaS changelog: a near-white (or warm paper)\n  background, a single confident accent color, a refined serif for headings and a\n  clean sans for body, generous whitespace, and a subtle two-column timeline (date on\n  the left, content on the right). Include a tasteful light/dark toggle that remembers\n  the choice.\n- Three quiet badge colors — a green for **New**, a blue for **Improved**, an amber\n  for **Fixed** — used as small pills, never loud.\n- Use realistic content based on my answers — never \"lorem ipsum\". Write believable\n  release copy with real version numbers and dates; invent a couple more plausible\n  past releases so the timeline looks lived-in.\n- Use real images. For the per-release screenshots, prefer clean inline-SVG UI mockups\n  of the product (they read as real product shots and stay crisp); for any photos, pull\n  free images that fit, e.g. from Unsplash\n  (`https://images.unsplash.com/...`) or `https://picsum.photos/seed/product-changelog-1/1200/800`,\n  with descriptive `alt` text.\n- Persist the active filter to the URL (`?filter=new`) and `localStorage` so a shared\n  link opens pre-filtered. Compute the \"x days ago\" stamps in JS from each entry's\n  `datetime`. All of it runs in the browser — no backend, no account.\n- Keep it accessible: semantic `<article>` entries, real `<label>`s, the filter as a\n  labelled button group with `aria-pressed`, keyboard-operable controls, visible focus,\n  and good contrast in both themes.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"changelog\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/changelog"},{"slug":"dashboard","publishSlug":"brightside-growth-dashboard","title":"Growth dashboard","name":"Brightside Coffee — Growth Dashboard","vertical":"Data, internal & startup","tech":"Vanilla JS","summary":"A single-screen, auto-refreshing growth dashboard for an online store — live KPI tiles with sparklines, a revenue trend, traffic sources, top products, and a channel leaderboard.","order":1,"liveUrl":"https://brightside-growth-dashboard.view.fast/","previewUrl":"https://brightside-growth-dashboard.view.fast/","setupQuestions":["What's the brand name and what do you sell?","Which 4-6 metrics matter most to your team day to day?","What's your monthly revenue target?","What's your brand's primary accent color?"],"photoTerms":["specialty coffee bag product flat lay","coffee roastery interior warm light","ecommerce packaging on wooden table","barista pouring latte overhead shot"],"prompt":"Build me a **single-screen growth dashboard for my online store** — the kind a small\nteam pins to the office TV and glances at all day — as a self-contained static site\n(one `index.html` plus a CSS and a JS file, no build step, no framework).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's the brand name and what do you sell?\n2. Which 4–6 metrics matter most to your team day to day?\n3. What's your monthly revenue target?\n4. What's your brand's primary accent color?\n\n**Then build a complete, polished, responsive dashboard with:**\n\n- A header bar with the brand, a \"Live\" pill, a ticking clock, and a \"last updated\"\n  timestamp.\n- A row of KPI tiles — revenue today, revenue MTD vs. target (with a progress bar),\n  orders, average order value, and conversion rate — each with a sparkline and an\n  up/down delta vs. yesterday.\n- A revenue trend chart for the last 30 days: daily bars plus a 7-day moving-average\n  line, with date labels.\n- A \"Traffic by source\" donut (organic / paid / email / social / direct) with a\n  legend showing sessions and share.\n- A \"Top products\" table — five products with units sold and a revenue bar.\n- A \"Marketing channels\" leaderboard with spend and ROAS, color-coded by performance.\n- An \"Email list\" panel: total subscribers, new-today counter, and a daily-signups\n  sparkline.\n- Auto-refresh every several seconds: the numbers tick to new values with a subtle\n  animation and the \"last updated\" stamp resets.\n\n**Design & content notes:**\n\n- \"Wall TV\" mood: dark, calm background; one warm accent color; a serif for big\n  numbers and headings, a clean sans for labels; tabular figures so digits don't\n  jiggle. Make it dense but legible from across the room.\n- Build the charts with inline SVG (or a tiny CDN charting lib) — no heavy framework.\n- Use realistic content based on my answers — never \"lorem ipsum\". Invent believable\n  product names, channel names, and a month of revenue history with weekend dips and\n  a couple of campaign spikes.\n- Use real images for the product thumbnails. Pull free photos that fit, e.g.\n  `https://picsum.photos/seed/<product>/80/80` (vary the seed per product), with\n  descriptive `alt` text.\n- Drive everything from a small data model at the top of the JS file, with clearly\n  named functions, so it's easy to swap in a real analytics/commerce API later.\n- Keep it accessible: semantic HTML, a skip link, labelled regions, good contrast,\n  and respect `prefers-reduced-motion` (no animation when it's set).\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"dashboard\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/dashboard"},{"slug":"tip","publishSlug":"tip","title":"Tip splitter","name":"Even Split","vertical":"Tools, apps & games","tech":"Vanilla JS","summary":"A fast bill-and-tip splitter — enter the bill, tap a tip, set the people, and get a clean per-person amount with tip figured on the pre-tax total.","order":1,"liveUrl":"https://tip.view.fast/","previewUrl":"https://tip.view.fast/","setupQuestions":["What's your default tip percentage and which presets should the buttons show (e.g. 15 / 18 / 20 / 25)?","What currency and locale should amounts use (e.g. USD $, EUR €)?","Should tip be calculated on the pre-tax or post-tax amount by default?","Typical party size to default to, and should it offer a \"round up each person\" option?"],"photoTerms":["friends splitting bill at restaurant table","hands with credit card and receipt cafe","dinner table from above with plates and glasses","group of friends laughing over dinner"],"prompt":"Build me a **fast bill-and-tip splitter** — a single-page calculator that takes a\nrestaurant bill, a tip percentage, and a number of people, and instantly shows a\nclean per-person amount — as a self-contained static site (one `index.html` plus a\nCSS and a JS file, no build step, no framework).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's your default tip percentage, and which presets should the buttons show (e.g. 15 / 18 / 20 / 25)?\n2. What currency and locale should amounts use (e.g. USD `$`, EUR `€`)?\n3. Should tip be calculated on the pre-tax or post-tax amount by default?\n4. What's a typical party size to default to, and should it offer a \"round up each person\" option?\n\n**Then build a complete, polished, responsive calculator with:**\n\n- A **bill amount** field (the subtotal, before tax) with a big, easy-to-tap money input.\n- A **tip selector**: preset percentage buttons plus a custom-percent input, with the active choice clearly highlighted.\n- A **separate tax field**, so by default the tip is figured on the **pre-tax** bill — with a toggle to tip on the post-tax total instead.\n- A **split-by-people** control: a − / + stepper _and_ a slider, kept in sync, showing the count live.\n- A **live breakdown** that updates on every keystroke: the big per-person number up top, then bill, tip, tax, and total on a receipt-style card.\n- A **round-up-per-person** toggle that rounds each person to the next whole unit and shows the small extra \"cushion\" that lands on the tip.\n- A **\"Copy the split\"** button that copies a tidy text summary to the clipboard, and a **\"New bill\"** reset.\n- A short hero up top and a quick \"why tip on the pre-tax bill\" explainer below.\n\n**Design & content notes:**\n\n- Warm, friendly, \"restaurant receipt\" mood: cream/paper background, a confident\n  green accent, a coral highlight, a monospace typeface for the dollar figures so\n  numbers feel like a printed check. Serif display headings, clean sans body.\n- Use realistic content based on my answers — never \"lorem ipsum\". Seed the\n  calculator with a believable sample bill so it looks alive on first load.\n- Use a real image. Pull a free photo that fits, e.g.\n  `https://picsum.photos/seed/dinner-1/1200/800` or\n  Pexels, with descriptive `alt` text.\n- All the math runs in the browser — no backend, no account. Compute on every input\n  change; format currency with `Intl.NumberFormat`.\n- Keep it accessible: semantic HTML, real `<label>`s, a labelled radio group for the\n  tip buttons, keyboard-operable stepper and slider, visible focus, and good contrast.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"tip\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/tip"},{"slug":"calories","publishSlug":"calories","title":"Calorie tracker","name":"Plateful","vertical":"Tools, apps & games","tech":"Vanilla JS","summary":"A browser-only daily macro tracker — log meals, watch calorie and protein/carb/fat rings fill toward your goals, and keep quick-add favorites, all saved locally.","order":2,"liveUrl":"https://calories.view.fast/","previewUrl":"https://calories.view.fast/","setupQuestions":["What's your daily calorie goal, and your protein/carb/fat targets (in grams or percentages)?","What should the app be called, and whose diary is it (a name for the header)?","Any dietary style to theme it around — e.g. high-protein, keto, vegetarian, balanced?","List 4–6 go-to foods or meals you eat often so we can preload them as quick-add favorites (with rough calories/macros)."],"photoTerms":["healthy meal prep containers overhead flat lay","colorful protein bowl on wooden table","grilled chicken and vegetables plate","person logging food on phone at table"],"prompt":"Build me a **single-page daily macro tracker** — a food diary that logs meals and\ntracks calories plus protein/carbs/fat against my goals — as a **vanilla-JS app**\n(one `index.html`, one CSS file, one JS file, no build step, no framework). Persist\neverything in `localStorage` so my diary is still there when I come back.\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's your daily calorie goal, and your protein/carb/fat targets (in grams or percentages)?\n2. What should the app be called, and whose diary is it (a name for the header)?\n3. Any dietary style to theme it around — e.g. high-protein, keto, vegetarian, balanced?\n4. List 4–6 go-to foods or meals you eat often so we can preload them as quick-add favorites (with rough calories/macros).\n\n**Then build a complete, polished, responsive app with:**\n\n- A **Today dashboard**: a big animated calorie ring (eaten vs. goal, showing\n  calories remaining in the center) and protein/carbs/fat progress bars that fill\n  toward each target and flag when I go over.\n- A **meal diary** split into Breakfast, Lunch, Dinner, and Snacks. Each meal shows\n  its running calorie subtotal; each logged item shows its calories and P/C/F, with\n  a one-tap delete.\n- An **add-food form** (in a dialog) with name, meal, calories, protein, carbs, fat,\n  and a **servings multiplier** slider so I can log 1.5× of something. Typing the\n  name of a known favorite autofills its macros.\n- A **quick-add favorites** list of my go-to foods — one tap logs them into the meal\n  that fits the time of day. The add form can also save a new food as a favorite.\n- A **date switcher** (prev/next + a date picker, plus left/right arrow keys) so I\n  can review or back-fill previous days. Each day keeps its own entries.\n- A **goals & settings** dialog to edit my name, dietary style, and calorie + macro\n  targets, with a live check that my macros add up to my calorie goal.\n- A **weekly summary**: a 7-day calorie bar chart (today highlighted, on-target days\n  in green) with average calories, average protein, and days-logged.\n\n**Design & content notes:**\n\n- Calm, modern dark UI: near-black background, warm coral as the primary/calorie\n  accent, blue for carbs and gold for fat, a serif display face (e.g. Fraunces) for\n  headings and a clean sans (e.g. Inter) for everything else. Rounded cards, soft\n  shadows, smooth ring/bar animations.\n- Preload the diary with realistic seed data for the named person and dietary style\n  (a partly-logged \"today\" so the rings look alive, a full \"yesterday,\" and a few\n  prior days of plausible totals). Use believable food names and macro numbers —\n  never \"lorem ipsum.\"\n- Food photos aren't required (the UI is data-first), but if you add any imagery use\n  real free photos that fit, e.g.\n  `https://picsum.photos/seed/meal-prep-1/1200/800` (vary the seed) with descriptive\n  `alt` text. Emoji food icons are great for the favorites list.\n- Persist all state in `localStorage` and keep it robust: write synchronously so\n  nothing is lost if I close the tab right after logging.\n- Keep it accessible (semantic HTML, real `<label>`s on every field, a\n  `<dialog>`-based modal, keyboard support, good contrast, and `prefers-reduced-motion`\n  respected).\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"calories\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/calories"},{"slug":"invitation","publishSlug":"invitation","title":"Wedding invite","name":"Maya & Daniel","vertical":"Personal & creative","tech":"Astro","summary":"An elegant multi-section wedding site — live countdown, our story, details, travel, gallery, registry, a validating RSVP form, and an FAQ.","order":2,"liveUrl":"https://invitation.view.fast/","previewUrl":"https://invitation.view.fast/","setupQuestions":["What are both your names, your wedding date, and the venue/city?","Where and when are the ceremony and reception, and is there a dress code?","Where should guests stay/fly into, and do you have a hotel block?","Which registry links should we include, and what meal options should the RSVP form offer?"],"photoTerms":["engaged couple vineyard golden hour","outdoor wedding ceremony arch string lights","wedding table setting florals candles","couple holding hands walking countryside"],"prompt":"Build me an **elegant multi-section wedding website** as an **Astro site** (a real\nminimal Astro project — `package.json`, `astro.config.mjs`, `src/pages/index.astro`,\nsmall components, no SSR adapter — that builds to static files with `astro build`).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What are both your names, your wedding date, and the venue/city?\n2. Where and when are the ceremony and reception, and is there a dress code?\n3. Where should guests stay/fly into, and do you have a hotel block?\n4. Which registry links should we include, and what meal options should the RSVP form offer?\n\n**Then build a complete, polished, responsive site with:**\n\n- A full-bleed **hero** with our names, the date, the venue, and a **live countdown**\n  that ticks down to the exact ceremony date/time (and switches to a sweet \"We're\n  married!\" message once the date has passed).\n- A sticky top **nav** that smooth-scrolls to each section, collapsing to a hamburger\n  menu on mobile, with an always-visible RSVP button.\n- **Our Story** — how we met, the proposal, told as a vertical timeline with a few\n  dated milestones and a portrait photo.\n- **The Details** — ceremony and reception times, the venue name and address with an\n  \"Open in Maps\" link, and a dress-code note.\n- **Travel & Stay** — nearest airports, the hotel room block (with a booking code and\n  cutoff date), and directions/parking/shuttle info.\n- **Photo gallery** — a tidy mosaic of 5–6 images with good `alt` text.\n- **Registry** — a few linked registry cards (store registries plus a honeymoon fund),\n  each with a short personal note.\n- **RSVP form** — full name, email, accept/decline, guest count, meal preference, and\n  a song request. It must **validate** (required fields, real email), reveal the\n  meal/guest/song fields only when someone is attending, and show a warm **success\n  state** that echoes their choices. No backend — handle it client-side.\n- **FAQ** — an accordion answering plus-ones, kids, parking, weather, and the RSVP\n  deadline.\n- A **footer** with our names, the date, and our hashtag.\n\n**Design & content notes:**\n\n- Warm editorial wedding aesthetic: ivory/cream background, deep olive green, a\n  terracotta accent, and thin gold rules. An elegant serif (e.g. Cormorant Garamond)\n  for headings paired with a clean humanist sans (e.g. Mulish) for body. Generous\n  whitespace, a quiet ornament divider, subtle hover motion.\n- Use realistic content based on my answers — never \"lorem ipsum\". Invent believable\n  copy: a real story, plausible travel logistics, specific meal names, real FAQ\n  answers.\n- Use real images. Pull free photos that fit, e.g. from Picsum\n  (`https://picsum.photos/seed/our-wedding-1/1200/800`, varying the seed per image) or\n  real Unsplash direct URLs (`https://images.unsplash.com/...`) matching terms like\n  _engaged couple vineyard golden hour_, _outdoor wedding ceremony arch string\n  lights_, _wedding table setting florals candles_, _couple holding hands walking\n  countryside_ — with descriptive `alt` text.\n- Keep dependencies minimal (just `astro`). Put all the wedding content in one\n  `src/data/wedding.ts` file so a single edit updates the whole site. Persist nothing\n  server-side; the RSVP success state is purely client-side.\n- Keep it accessible (semantic HTML, labelled form fields, keyboard support, visible\n  focus, good contrast) and mobile-first.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"invitation\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./dist` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./dist\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./dist --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/invitation"},{"slug":"links","publishSlug":"links","title":"Link-in-bio","name":"Jess Park — Link in Bio","vertical":"Personal & creative","tech":"Plain HTML & CSS","summary":"A mobile-first link-in-bio page for a food creator — avatar and bio, a highlighted primary CTA, a stack of link buttons, a featured video, and social icons.","order":2,"liveUrl":"https://links.view.fast/","previewUrl":"https://links.view.fast/","setupQuestions":["What's your name, what do you make/create, and a one-line bio?","What's the single most important thing you want visitors to click right now (the primary CTA)?","List 4–6 links you want as buttons, with their labels and URLs.","Which social platforms should show, and do you have a recent video to feature?"],"photoTerms":["food creator portrait kitchen natural light","overhead colorful healthy meal prep bowls","hands plating food styled flat lay","cozy kitchen herbs cutting board"],"prompt":"Build me a **mobile-first \"link in bio\" page for a food creator** as a single,\nself-contained HTML file with CSS (no build step, no framework).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's your name, what do you make/create, and a one-line bio?\n2. What's the single most important thing you want visitors to click right now (the primary CTA)?\n3. List 4–6 links you want as buttons, with their labels and URLs.\n4. Which social platforms should show, and do you have a recent video to feature?\n\n**Then build a complete, polished, responsive one-pager with:**\n\n- A centered profile header: round avatar (with a tasteful gradient ring), name with a small verified check, handle, a short bio, and a couple of topic \"tags\".\n- One **highlighted primary CTA** card at the top that stands out from everything else (e.g. \"Get my free meal-prep guide\") with a kicker, title, and one-line subtitle.\n- A vertical **stack of tappable link buttons** — each with a small thumbnail or icon, a title, a meta line, and a chevron. Add small \"New\" / \"Pre-order\" pills where it helps.\n- A **featured latest video/reel** card: a 16:9 thumbnail with a play button overlay, a title, and a short caption, linking out.\n- A row of **social icons** (Instagram, TikTok, YouTube, Pinterest — whichever I pick) as inline SVG, no icon library.\n- A small **newsletter signup** (just an email field) that validates the address and shows a friendly \"You're on the list\" success state, and remembers it in `localStorage`.\n- A subtle **footer** with a contact email.\n\n**Design & content notes:**\n\n- Warm, appetizing, editorial mood: cream background, a terracotta accent with a sage secondary, a serif display face (e.g. Fraunces) for headings and a clean sans (e.g. Inter) for body. Soft cards with gentle shadows and rounded corners; tasteful hover lift and a subtle entrance animation.\n- Mobile-first: it should feel made for a phone — a single narrow column, big tap targets, then look great centered on desktop too.\n- Write real-sounding copy from my answers — never \"lorem ipsum\". Invent believable recipe titles, link labels, follower counts, and a real-feeling bio voice.\n- Use real images. Pull free food photos that fit from Unsplash, e.g. `https://images.unsplash.com/...` (food creator portrait, healthy meal-prep bowls, hands plating food, cozy kitchen herbs) or `https://picsum.photos/seed/food-links-1/240/240`, each with descriptive `alt` text.\n- Keep it accessible (semantic HTML, a labelled email field, keyboard support, good contrast, `prefers-reduced-motion`). No build step — one `index.html`.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"links\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/links"},{"slug":"listing","publishSlug":"listing","title":"Real-estate listing","name":"1428 Vista Del Mar","vertical":"Local & small business","tech":"Vite + React","summary":"An interactive single-listing site for one home — a photo gallery with lightbox, key stats, a live mortgage estimator, floor plan, and a tour-request form.","order":2,"liveUrl":"https://listing.view.fast/","previewUrl":"https://listing.view.fast/","setupQuestions":["What's the property address, list price, and beds/baths/square footage?","What are 4–6 standout features (e.g. \"chef's kitchen, ocean-view primary suite, pool\")?","Who's the listing agent — name, brokerage, phone, email?","Roughly what neighborhood/lifestyle should the copy lean into?"],"photoTerms":["modern luxury home exterior dusk twilight","open concept living room large windows","primary bedroom suite ocean view","backyard pool patio sunset"],"prompt":"Build me a **single-property listing microsite for a home that's for sale** as a\nVite + React app.\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's the property address, list price, and beds/baths/square footage?\n2. What are 4–6 standout features (e.g. \"chef's kitchen, ocean-view primary suite, pool\")?\n3. Who's the listing agent — name, brokerage, phone, email?\n4. Roughly what neighborhood/lifestyle should the copy lean into?\n\n**Then build a complete, polished, responsive site with:**\n\n- A full-bleed hero with the address, city/state, list price, and a beds / baths /\n  sqft / price-per-sqft stat row over a twilight exterior photo, plus \"Schedule a\n  tour\" and \"View photos\" buttons.\n- A short \"story\" intro paragraph that sells the home in the agent's voice.\n- A \"Highlights\" grid (one card per standout feature, with a small icon).\n- A photo gallery: a tiled grid where clicking any image opens a full-screen\n  lightbox with caption, prev/next, and keyboard arrows + Esc.\n- A \"Facts & features\" table (bedrooms, baths, lot size, year built, garage, HOA…).\n- An **interactive mortgage estimator**: sliders for price, down-payment %, and\n  interest rate, plus a 15/20/30-year toggle, that live-updates the estimated\n  monthly payment with a principal / interest / tax / insurance breakdown.\n- A simple SVG floor plan with a level switcher (main / upper / lower) next to a\n  neighborhood blurb with a Walk Score and nearby points of interest.\n- A \"Schedule a tour\" form (name, phone, email, preferred date + time, message)\n  that shows a friendly confirmation state on submit, beside an agent contact card.\n- A footer with an MLS-style detail block and a \"deemed reliable but not\n  guaranteed / Equal Housing Opportunity\" disclaimer.\n\n**Design & content notes:**\n\n- Coastal-luxury, editorial mood: warm ivory/sand background, deep ocean-ink text,\n  a single brass accent, a serif display face (Cormorant Garamond) over a clean\n  sans (Inter). Generous whitespace, soft shadows, no clutter.\n- Use realistic content based on my answers — never \"lorem ipsum\". Invent believable\n  copy, room names, neighborhood landmarks, and an MLS number.\n- Use real images. Pull free photos that fit, e.g. from Unsplash\n  (`https://images.unsplash.com/photo-…?auto=format&fit=crop&w=1600&q=80`) or Pexels,\n  for the exterior, living room, kitchen, primary suite, and pool, with descriptive\n  `alt` text.\n- Keep all the listing content in one `data.js` module so the site is easy to\n  re-skin for another property. Persist nothing to a backend — the form and\n  calculator are client-side only.\n- Mortgage math: monthly P&I from the standard amortization formula; estimate tax\n  (~1.18%/yr of price) and insurance (~0.35%/yr) so the total is realistic.\n- Keep it accessible (semantic HTML, labelled form fields, keyboard support for the\n  lightbox, good contrast) and mobile-first.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"listing\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./dist` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./dist\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./dist --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/listing"},{"slug":"revenue-review","publishSlug":"revenue-review","title":"Revenue analysis","name":"Lumen Analytics — FY2025 Revenue Review","vertical":"Data, internal & startup","tech":"Vite + React","summary":"An interactive year-end SaaS revenue review — an executive KPI strip, an ARR bridge waterfall that sums, MRR movement, cohort retention, revenue mix, churn, and a base/bull/bear forecast.","order":2,"liveUrl":"https://revenue-review.view.fast/","previewUrl":"https://revenue-review.view.fast/","setupQuestions":["What's your company name and what does the product do?","What's your current ARR (or MRR) and net revenue retention, roughly?","What plan tiers and customer segments do you sell to?","What fiscal period should this cover (e.g. calendar 2025, FY ending June)?"],"photoTerms":["abstract financial chart blue gradient background","professional headshot woman finance executive neutral","minimal data dashboard ui dark mode","corporate office boardroom presentation screen"],"prompt":"Build me an **interactive end-of-year revenue review for my SaaS company** — a single-page\nboard dashboard with KPIs, an ARR bridge, retention cohorts, churn, and a next-year\nforecast — as a **Vite + React app**.\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's your company name and what does the product do?\n2. What's your current ARR (or MRR) and net revenue retention, roughly?\n3. What plan tiers and customer segments do you sell to?\n4. What fiscal period should this cover (e.g. calendar 2025, FY ending June)?\n\n**Then build a complete, polished, responsive dashboard with:**\n\n- A masthead with the company name, the fiscal period, a \"Confidential / Board materials\"\n  tag, and a \"Prepared by\" byline with a small photo.\n- An **executive summary strip**: ARR, Net Revenue Retention, gross logo churn, blended ACV,\n  and CAC payback months — each with a value, a YoY delta chip, and a one-line note.\n- An **ARR bridge / waterfall**: Starting ARR + New + Expansion − Contraction − Churned =\n  Ending ARR. The gains and losses must actually sum to the ending number — float the bars\n  off the running total and connect them.\n- An **MRR movement** chart: a stacked bar per month (new + expansion up, contraction +\n  churned down), with an optional \"net new\" line overlay. The twelve months should net to\n  the year's ARR change.\n- A **cohort retention heatmap**: rows are signup cohorts, columns are months-since-signup,\n  cells are net revenue retention % — red below 100, green above, with hover tooltips.\n- A **revenue mix** panel with a toggle between \"by plan tier\" and \"by customer segment\",\n  shown as labelled horizontal bars with ARR, share %, customer count and ACV.\n- A **churn analysis**: a ranked list of stated churn reasons (summing to 100%) next to a\n  \"logos at risk\" table (account, segment, ARR, health score, renewal date, reason).\n- A **FY-next forecast** with a **base / bull / bear** scenario toggle that swaps a quarterly\n  ARR area chart, the projected ending ARR, the YoY growth, and the key assumptions.\n\n**Design & content notes:**\n\n- Dark analyst-dashboard mood: near-black navy background, soft panels with hairline borders,\n  one accent per series (blue / violet for gains, amber / red for losses, green for balance),\n  a clean sans for text and a monospace for every number. Calm, precise, board-ready — not flashy.\n- The numbers have to reconcile. Pick a starting ARR and a set of new / expansion /\n  contraction / churned figures that actually add up to your ending ARR, and derive NRR and\n  gross retention from them. Invent believable account names for the at-risk table.\n- Use realistic content based on my answers — never \"lorem ipsum\".\n- Use real images. Pull free photos that fit, e.g.\n  `https://picsum.photos/seed/byline-1/240/240` for the byline photo (and\n  an abstract blue gradient for the masthead), or Pexels, and add descriptive `alt` text.\n- Build the charts yourself with inline SVG (waterfall, stacked bars, area line) and CSS for\n  the heatmap and bars — keep dependencies to just React. Use `base: \"./\"` in the Vite config\n  so it works from any path, and add `<meta name=\"robots\" content=\"noindex\">` since it's internal.\n- Keep it accessible (semantic HTML, labelled controls, keyboard-focusable chart bars, good contrast).\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"revenue-review\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./dist` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./dist\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./dist --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/revenue-review"},{"slug":"band","publishSlug":"band","title":"Band site","name":"The Tidal Wolves","vertical":"Personal & creative","tech":"Vanilla JS","summary":"A bold one-page band site with a working sticky audio player, tour dates, a merch shelf, and a mailing-list signup.","order":3,"liveUrl":"https://band.view.fast/","previewUrl":"https://band.view.fast/","setupQuestions":["What's your band name and genre, and the one-line vibe you want the hero to say?","What's your latest single, and where can people stream it?","List three to five upcoming shows (city, venue, date) — or say you have none yet.","Give two or three merch items with prices, plus three song titles."],"photoTerms":["indie folk band performing on stage moody lighting","four piece band group portrait outdoors film grain","live concert crowd silhouette warm stage lights","vinyl record and band tee flat lay merch"],"prompt":"Build me a **bold, full-bleed one-page website for my band** as a vanilla-JS app\n(a single `index.html` plus a small CSS and JS file — no framework, no build step).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's your band name and genre, and the one-line vibe you want the hero to say?\n2. What's your latest single or release, and where can people stream it (Spotify/Apple/Bandcamp links)?\n3. List 3–5 upcoming shows (city, venue, date) — or say you have none yet and we'll show a \"tour TBA\" state.\n4. Give me 2–3 merch items with names and prices, plus 3 song titles for the music section.\n\n**Then build a complete, polished, responsive site with:**\n\n- A full-bleed hero with the band photo, the band name big, a logo mark, and the latest-single tagline.\n- A **sticky bottom audio player** that streams the new single — play/pause, a seek bar with elapsed/total time, and previous/next track buttons. Clicking any song in the music list loads it into the player.\n- A \"Music\" section: the songs as a clickable tracklist, plus links out to Spotify / Apple Music / Bandcamp / YouTube.\n- A \"Tour\" section: each show with city, venue, date, and a ticket button — including \"Sold out\" and \"Few left\" states.\n- A merch shelf (vinyl, tee, tote) with photo, description, price, and a buy button.\n- A mailing-list signup (first name + email) that validates and shows a friendly \"You're on the list\" confirmation, and remembers the visitor on return via localStorage.\n- A short \"About\" blurb in the band's voice with the member lineup.\n- A \"Booking & press\" contact block with email addresses and social links.\n\n**Design & content notes:**\n\n- Moody, coastal, gig-poster mood: a near-black base, a deep teal, and one warm amber accent; a big serif display face (e.g. Fraunces) for headings and a clean sans (e.g. Inter) for body.\n- Use realistic content based on my answers — never \"lorem ipsum\". Invent believable show dates, song descriptions, and bios if I leave gaps.\n- Use real images. Pull free photos that fit, e.g.\n  `https://picsum.photos/seed/indie-band-1/1200/800` (vary the seed) or Pexels, and add\n  descriptive `alt` text.\n- No build step — a single `index.html` with a linked CSS and JS file that opens straight in a browser. Make the player actually work (real `<audio>` element); persist the mailing-list state in localStorage.\n- Keep it accessible (semantic HTML, labelled form fields, keyboard support including space-to-play, and good contrast).\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"band\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/band"},{"slug":"barber","publishSlug":"barber","title":"Barbershop","name":"Ironclad Barber Co.","vertical":"Local & small business","tech":"Plain HTML & CSS","summary":"A sharp, masculine single-page barbershop site — services and prices, barber profiles, a cuts gallery, and hours with a prominent book-now button.","order":3,"liveUrl":"https://barber.view.fast/","previewUrl":"https://barber.view.fast/","setupQuestions":["What's the shop name and style (e.g. \"old-school straight-razor, modern fades\")?","What services and prices do you offer?","Who are your barbers and what's each one known for?","Address, hours, and your online booking link?"],"photoTerms":["barber giving fade haircut clippers","vintage barbershop interior leather chairs","hot towel straight razor shave close up","barbershop pole storefront classic"],"prompt":"Build me a **single-page website for my barbershop** as a plain HTML & CSS site (no\nbuild step, no framework — just `index.html`, `styles.css`, and a little `script.js`).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's the shop name and style (e.g. \"old-school straight-razor, modern fades\")?\n2. What services and prices do you offer?\n3. Who are your barbers and what's each one known for?\n4. What's your address, hours, and online booking link (or phone)?\n\n**Then build a complete, polished, responsive one-pager with:**\n\n- A full-bleed hero with a shop-interior photo, the name big, a short tagline, and a\n  prominent \"Book a chair\" button.\n- A \"Services & prices\" section as a clean grid (cut, skin fade, beard trim,\n  hot-towel straight-razor shave, full service, buzz, kids', senior), each with a\n  price and a one-line description. Highlight one as the house favorite.\n- A \"Meet the barbers\" section with a photo, name, chair number, specialty chips, and\n  a short bio for each barber.\n- A gallery of cuts and shop atmosphere (a tidy masonry-style grid).\n- A \"Hours & location\" block: the week's hours with **today highlighted** and a live\n  \"Open now / Closed\" status computed in JS, a walk-in policy note, address, phone,\n  and transit directions.\n- A booking form (name, phone, service, barber, preferred time) that validates and\n  shows a friendly, personalized \"You're on the books\" success state — no backend.\n- A footer with phone, directions, booking link, and socials.\n\n**Design & content notes:**\n\n- Masculine, classic-meets-modern barbershop mood: near-black charcoal background,\n  warm cream paper, one brass/amber accent. Condensed uppercase display type\n  (Oswald) for headings, clean sans (Inter) for body. Subtle hover lifts, no slop.\n- Use realistic content based on my answers — never \"lorem ipsum\". Invent believable\n  barber names, bios, prices, and a couple of real-sounding reviews.\n- Use real images. Pull free photos that fit, e.g. grayscale shots from\n  `https://picsum.photos/seed/ironclad-barbershop-1/1200/800?grayscale` (vary the\n  seed per image) or fitting Unsplash photos of a barbershop interior, a fade\n  in progress, a hot-towel shave, and a classic barber pole — all with descriptive\n  `alt` text.\n- Keep it accessible (semantic HTML, labelled form fields, good contrast, keyboard\n  support, a skip link) and mobile-first with a working hamburger menu.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"barber\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/barber"},{"slug":"foodtruck","publishSlug":"foodtruck","title":"Food truck","name":"Kimchi Taco Co.","vertical":"Local & small business","tech":"Vanilla JS","summary":"A mobile-first food-truck site whose centerpiece is a weekly schedule that auto-highlights where the truck is parked today, with one-tap map directions and a live \"we're here now\" banner.","order":3,"liveUrl":"https://foodtruck.view.fast/","previewUrl":"https://foodtruck.view.fast/","setupQuestions":["What's the truck's name and cuisine / signature item?","What are 3–5 menu items with prices?","Where will you be each day this week (day, place, hours)?","Instagram handle and a catering contact email?"],"photoTerms":["colorful food truck street parked daytime","korean bbq beef tacos kimchi close up","food truck service window customers line","loaded burrito unwrapped overhead"],"prompt":"Build me a **mobile-first website for my food truck whose centerpiece is a weekly schedule that auto-highlights where the truck is parked today** as a vanilla-JS app (single `index.html` plus `styles.css` and `app.js` — no build step, no framework).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What's the truck's name and cuisine / signature item?\n2. What are 3–5 menu items with prices?\n3. Where will you be each day this week (day, place, hours)?\n4. Instagram handle and a catering contact email?\n\n**Then build a complete, polished, responsive site with:**\n\n- A full-bleed hero with a truck photo, the name big, a tagline, and a **live \"We're at … today\" banner** that JavaScript fills in from the schedule (and shows \"Open now / Opens at … / next stop on …\" depending on the current day and time).\n- A **\"This week's route\"** section: a list of day → location → hours, ordered so today comes first and today's row is visually highlighted. Each open day has a one-tap **Directions** link that opens Google Maps to that address. Day-off rows read as closed.\n- A **Menu** grouped into tacos, burritos/bowls, sides, and drinks, each item with a price and a one-line description; mark veg options.\n- A **Catering / private events** blurb with perks and a **quote-request form** that validates name + email and shows a friendly success state on submit (plus a `mailto:` and `tel:` fallback).\n- A **gallery strip** of food/truck photos.\n- A footer with contact info and Instagram / TikTok links.\n\n**Design & content notes:**\n\n- Bright, appetizing food-truck mood: warm cream paper background, a bold chili-red primary with gochujang-orange and sesame-gold accents, near-black warm ink for text. Big condensed display type (e.g. Anton) for headings, clean Inter for body.\n- Use realistic content based on my answers — never \"lorem ipsum\". Invent believable LA-style stops, menu copy, and prices if I'm vague.\n- Use real images. Pull free photos that fit, e.g. `https://picsum.photos/seed/kimchi-taco-truck-1/1200/800` (vary the seed per image), with descriptive `alt` text.\n- Put the schedule as data in `app.js` (days indexed Sun=0…Sat=6, open/close as minutes from midnight) and compute \"today\" + \"open now\" client-side. Build the Google Maps links with `https://www.google.com/maps/dir/?api=1&destination=`.\n- Keep it accessible (semantic HTML, labelled form fields, keyboard support, good contrast) and mobile-first.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"foodtruck\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./site` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First publish: send every file as multipart form data. This Bash/Zsh block preserves relative paths and works for one file or a whole folder:\n   ```bash\n   PUBLISH_ROOT=./site\n   publish_files=()\n   while IFS= read -r -d \"\" file; do\n     relative=${file#\"$PUBLISH_ROOT\"/}\n     publish_files+=(-F \"files=@$file;filename=$relative\")\n   done < <(find \"$PUBLISH_ROOT\" -type f -print0)\n   curl -sS \"${publish_files[@]}\" \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n3. From the `{ \"data\": ... }` receipt, give me `data.space.liveUrl`, `data.version.immutableUrl`, `data.claim.url`, and `data.claim.expiresAt`. Remind me to claim within 6 hours. Keep `data.claim.token` secret.\n4. Save `data.space.id` and `data.claim.token` locally (for example in an ignored, mode-600 `.spacefast/state.json`). For a quick update, rebuild the `publish_files` array above and publish to the same space:\n   ```bash\n   SPACEFAST_SPACE_ID=<saved-space-id>\n   SPACEFAST_TOKEN=<saved-claim-token-or-access-token>\n   curl -sS -H \"Authorization: Bearer $SPACEFAST_TOKEN\" \\\n     -F \"spaceId=$SPACEFAST_SPACE_ID\" \"${publish_files[@]}\" \\\n     \"https://api.spacefast.com/v1/publish?wait=1\"\n   ```\n   If an update after claiming returns `space_claimed_credential_available`, exchange the saved claim token once at `POST https://api.spacefast.com/v1/anonymous-claim/exchange`, save `data.credential.accessToken`, and retry with that access token.\n\n**Optional shortcuts and reference only:** if the `sf` CLI is already installed, `sf publish ./site --wait` does the same job. A zip of the publish folder is also supported, but neither the CLI nor a zip is required. Docs: [direct agent/API publishing](https://spacefast.com/setup) · [files and folders](https://spacefast.com/help/publishing) · [claiming](https://spacefast.com/help/anonymous-publish) · [updates and rollback](https://spacefast.com/help/versions)","repoUrl":"https://github.com/spacefast/examples/tree/master/recipes/foodtruck"},{"slug":"report","publishSlug":"report","title":"Annual report","name":"State of Indie Web 2025","vertical":"Data, internal & startup","tech":"Astro","summary":"A long-form annual community survey report — methodology, demographic charts, tool rankings, sentiment scales, and an editor's takeaways.","order":3,"liveUrl":"https://report.view.fast/","previewUrl":"https://report.view.fast/","setupQuestions":["What community or audience is this survey for?","How many people responded, and when did the survey run?","What are the 3–4 headline questions or findings you want to feature?","What tools, platforms, or options should appear in the ranking charts?"],"photoTerms":["diverse developers coworking laptops candid","abstract colorful bar chart illustration","person coding at desk dual monitors","conference audience tech meetup crowd"],"prompt":"Build me a **long-form annual community survey report** — a scrollable “State of …”\nwrite-up full of charts, rankings, and commentary, in the lineage of State of JS\nand the Stack Overflow Developer Survey — as an **Astro site** (static, no SSR).\n\n**Before you build, ask me these questions in one message and wait for my answers. If I skip anything, choose a sensible default and tell me what you chose:**\n\n1. What community or audience is this survey for?\n2. How many people responded, and when did the survey run?\n3. What are the 3–4 headline questions or findings you want to feature?\n4. What tools, platforms, or options should appear in the ranking charts?\n\n**Then build a complete, polished, responsive report with:**\n\n- A bold hero: the report title, a one-line summary, and three headline numbers\n  (respondents, countries, days in the field), over a faint coworking photo.\n- **Intro + methodology** — how many responded, how they were sampled, the dates\n  the survey ran, and an honest note that the audience self-selects.\n- **Demographics** — years of experience (vertical bar chart), team size and\n  primary role (donut charts), and country of residence (horizontal bars).\n- **Tools & frameworks** — a usage-vs-satisfaction chart: two bars per tool, one\n  for “used it” and one for “would use again,” sorted by satisfaction.\n- **Hosting & deployment popularity** — a horizontal bar “race” with a\n  year-over-year delta chip next to each platform, and a “new this year” badge.\n- **Biggest pain points** — a ranked list with vote counts and bars (respondents\n  could pick up to three).\n- **Sentiment** — a set of agree/disagree statements as a five-point Likert\n  diverging-bar chart, fanning out from a shared centre line.\n- **Key takeaways** — the editor’s commentary on what changed since last year,\n  each with a small up/down delta.\n- **Appendix** — full respondent-count tables behind every chart, plus a\n  “share this report” footer.\n\n**Design & content notes:**\n\n- Dark, editorial “survey results” aesthetic: deep ink background, a curated\n  multi-color chart palette, a characterful display font for headings over a clean\n  reading sans, and a monospace for every number on the page. A floating\n  table-of-contents that highlights the current section is a nice touch.\n- Render every chart as **server-side inline SVG or CSS bars** — no client-side\n  charting library to download. Keep one source-of-truth data file so all the\n  numbers stay internally consistent (the demographic breakdowns should sum to\n  the total respondent count).\n- Use realistic content based on my answers — never “lorem ipsum.” Invent\n  believable figures, rankings, and quotable write-in comments.\n- Use real images. Pull free photos that fit, e.g.\n  `https://picsum.photos/seed/coworking-1/1200/800` (vary the seed) or\n  Pexels, and add descriptive `alt` text.\n- Keep it accessible (semantic HTML, labelled charts with text alternatives,\n  keyboard support, good contrast) and respect `prefers-reduced-motion`.\n\n**Add this exact line right before `</body>` so the site carries its badge:**\n\n```html\n<script src=\"https://spacefast.com/badge.js\" data-example=\"report\"></script>\n```\n\n**When the site is ready, publish it to Spacefast with the direct API — no account, install, or extra instructions needed:**\n\n1. Use `./dist` as the publish folder. For no-build projects, put only the finished public files in that dedicated folder. Confirm it has `index.html` at its root and no secrets, source files, `.git`, or `.spacefast` state.\n2. First pub