Skip to content

DirectorySkills

Scrapbook app site: 1440, made in this run
Run 1Scrapbook app site“Please make a website for our recipe-sharing app, with a home page and a pricing page. Notes in brief.md.”
Runs in
  • Claude Code
  • Codex
  • Cursor
  • Gemini CLI
  • GitHub Copilot
  • OpenCode
Generates with
Your agent's model
Tested with
Claude Code 2.1.322Claude Sonnet 5.51 real run, 10 Nov
Needs
Node 20+Chrome
Licence
Recaply licence

Scrapbook App Site

A warm amber, taped-photo site for a memory or journaling app, with a home page and a pricing page.

$9.99once, yours to keep

Builds a two-page site (home and pricing) in a warm scrapbook style into your own project: warm amber paper, handwritten headlines, photos taped at angles, sticker icons and torn edges; a home page with a photo-collage hero, features, a photo wall, quotes and a sign-up, plus a pricing page. Plain HTML, CSS and JavaScript, or matched to React, Next.js, Vue, Svelte, Astro or Tailwind when the project uses them. Comes with a working reference and a check that screenshots it at phone, tablet and desktop widths and flags sideways overflow, text under 12px, missing alt text and names, low contrast, no focus styles, motion that ignores reduced motion, leftover sample words and emoji icons. Use when a journaling, photo book, family memories or hobby app needs a friendly site with a pricing page, or someone asks for a scrapbook, taped-paper, handmade look.

By RecaplyUpdated 12 Nov

Install Scrapbook App Site

After the download, ask your agent to add it, or run the line yourself.

Read https://recaply.co/skills/scrapbook-app-site/install.md and follow it to install the scrapbook-app-site skill from scrapbook-app-site.zip.

Paste it into your agent. It reads our install steps, finds the ZIP you downloaded and adds the skill for you.

New to skills? How to install a skill

Similar skills

All 735 skills

Who Scrapbook App Site is for

What you get

  • One HTML file with its CSS inside: no build step, no framework
  • A two-page site (home and pricing) in a warm scrapbook style
  • Checked at phone and desktop widths

Good fit

  • When a journaling, photo book, family memories or hobby app needs a friendly site with a pricing page

Not for

  • An app with a backend, sign-in or a database
  • Copying another company's site

About this skill

You say

Please make a website for our recipe-sharing app, with a home page and a pricing page. Notes in brief.md.

It said back

I built the two-page site in plain HTML, CSS and JS: a home page (index.html) and a pricing page (pricing.html). Both pass the check for sideways overflow, small text, alt text, contrast, focus styles and reduced motion at 390, 768 and 1440px. I read the 1440px screenshots of both pages and the 390px one of the home page. I did not open the 768px ones, and I added a small mobile gallery fix after looking, so I re-ran the check on the home page only.

The files are in the project folder:

  • index.html
  • pricing.html
  • style.css
  • script.js
Show more

What it did in run 1

  1. ./brief.md
  2. scrapbook-app-site
  3. cd .; ls -la . .claude/skills/scrapbook-app-site/*; wc -c .claude/skills/scrapbook-app-site/reference/*; node .claude/skills/scrapbook-app-site/scripts/check.mjs --ready
  4. ./.claude/skills/scrapbook-app-site/reference/index.html
  5. ./.claude/skills/scrapbook-app-site/reference/pricing.html
  6. ./.claude/skills/scrapbook-app-site/reference/script.js
  7. cd ./.claude/skills/scrapbook-app-site/reference; grep -n "tiers\|\.tier\|\.billing\|faq-in\|gal-list\|--span\|\.pol\|tape\|torn\|\.foot-in\|\.feat-list\|hero-note\|\.save" style.css | cut -c1-260
  8. W=.; R=$W/.claude/skills/scrapbook-app-site/reference cp $R/style.css $R/script.js $W/ cd $W IC='class="ic" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"' STAR='<svg viewBox="0 0 32 32" aria-hidden="true" focusable="false"><path d="M16 27C6 20 3 14 6.5 9.5 10 5.5 14.5 7 16 11c1.5-4 6-5.500 9.500-1.500C29 14 26 20 16 27z" fill="#B45309"/></svg>' HEAD(){ cat <<EOF <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>$1</title> <meta name="description" content="$2"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Caveat:wght@600;700&family=Nunito:wght@400;600;700&display=swap"> <link rel="stylesheet" href="style.css"> </head> <body> <a class="skip" href="#main">Skip to content</a> <header class="nav nav-bar"><div class="wrap nav-in"> <a class="brand" href="index.html" aria-label="Grandma's Table home">$STAR<span>Grandma's Table</span></a> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="menu"><svg $IC><path d="M4 7h16M4 12h16M4 17h16"/></svg><span class="sr-only">Menu</span></button> <nav id="menu" class="menu" aria-label="Main"><ul><li><a href="index.html#features">How it works</a></li><li><a href="index.html#gallery">Recipe wall</a></li><li><a href="pricing.html">Pricing</a></li></ul><a class="btn btn-primary btn-sm" href="$3">Start a cookbook</a></nav> </div></header> <main id="main"> EOF } FOOT(){ cat <<EOF </main> <footer class="foot"><div class="wrap foot-in"><div class="foot-brand"><a class="brand" href="index.html">$STAR<span>Grandma's Table</span></a><p>One shared cookbook for the recipes your family hands down.</p></div><nav class="foot-col" aria-label="Explore"><h2>Explore</h2><ul><li><a href="index.html#features">How it works</a></li><li><a href="index.html#gallery">Recipe wall</a></li><li><a href="pricing.html">Pricing</a></li></ul></nav></div><div class="wrap foot-small"><p>© <span data-year>2026</span> Grandma's Table</p></div></footer> <script src="script.js" defer></script> </body> </html> EOF } # drawings BOWL(){ echo "<svg viewBox=\"0 0 400 300\" aria-hidden=\"true\" focusable=\"false\" preserveAspectRatio=\"xMidYMid slice\"><rect width=\"400\" height=\"300\" fill=\"$1\"/><rect y=\"215\" width=\"400\" height=\"85\" fill=\"$2\"/><path d=\"M95 150h210c0 55-40 90-105 90S95 205 95 150z\" fill=\"$3\"/><ellipse cx=\"200\" cy=\"150\" rx=\"105\" ry=\"18\" fill=\"$4\"/><path d=\"M165 120q-12-20 0-38M200 115q-12-24 0-46M235 120q-12-20 0-38\" stroke=\"#fff\" stroke-opacity=\".7\" stroke-width=\"7\" fill=\"none\" stroke-linecap=\"round\"/></svg>"; } PIE(){ echo "<svg viewBox=\"0 0 400 300\" aria-hidden=\"true\" focusable=\"false\" preserveAspectRatio=\"xMidYMid slice\"><rect width=\"400\" height=\"300\" fill=\"$1\"/><rect y=\"220\" width=\"400\" height=\"80\" fill=\"$2\"/><ellipse cx=\"200\" cy=\"190\" rx=\"140\" ry=\"50\" fill=\"#C98A3E\"/><ellipse cx=\"200\" cy=\"175\" rx=\"140\" ry=\"50\" fill=\"#E7B866\"/><path d=\"M110 175h180M200 130v90M135 150l130 50M265 150l-130 50\" stroke=\"#C98A3E\" stroke-width=\"7\" stroke-linecap=\"round\"/><circle cx=\"200\" cy=\"175\" r=\"8\" fill=\"#C98A3E\"/></svg>"; } CARD(){ echo "<svg viewBox=\"0 0 400 300\" aria-hidden=\"true\" focusable=\"false\" preserveAspectRatio=\"xMidYMid slice\"><rect width=\"400\" height=\"300\" fill=\"$1\"/><g transform=\"rotate(-4 200 150)\"><rect x=\"70\" y=\"45\" width=\"260\" height=\"190\" rx=\"6\" fill=\"#FFFDF8\"/><path d=\"M70 85h260\" stroke=\"#D9594C\" stroke-width=\"3\"/><path d=\"M95 70q20-14 40 0t40 0\" stroke=\"#3A2A18\" stroke-width=\"4\" fill=\"none\" stroke-linecap=\"round\"/><path d=\"M95 115h210M95 140h180M95 165h200M95 190h140\" stroke=\"#A98E6B\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-dasharray=\"18 7 30 6\"/></g></svg>"; } POT(){ echo "<svg viewBox=\"0 0 400 300\" aria-hidden=\"true\" focusable=\"false\" preserveAspectRatio=\"xMidYMid slice\"><rect width=\"400\" height=\"300\" fill=\"$1\"/><rect y=\"230\" width=\"400\" height=\"70\" fill=\"$2\"/><rect x=\"110\" y=\"125\" width=\"180\" height=\"105\" rx=\"14\" fill=\"$3\"/><rect x=\"98\" y=\"115\" width=\"204\" height=\"20\" rx=\"8\" fill=\"$4\"/><path d=\"M110 160h-30M290 160h30\" stroke=\"$3\" stroke-width=\"12\" stroke-linecap=\"round\"/><circle cx=\"200\" cy=\"108\" r=\"9\" fill=\"$3\"/></svg>"; } LIST(){ echo "<svg viewBox=\"0 0 400 300\" aria-hidden=\"true\" focusable=\"false\" preserveAspectRatio=\"xMidYMid slice\"><rect width=\"400\" height=\"300\" fill=\"$1\"/><g transform=\"rotate(3 200 150)\"><rect x=\"110\" y=\"30\" width=\"180\" height=\"240\" rx=\"6\" fill=\"#FFFDF8\"/><g fill=\"none\" stroke=\"#B45309\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M135 80l8 8 14-16M135 130l8 8 14-16M135 180l8 8 14-16\"/></g><path d=\"M175 80h90M175 130h70M175 180h85M135 230h120\" stroke=\"#A98E6B\" stroke-width=\"5\" stroke-linecap=\"round\"/></g></svg>"; } { HEAD "Grandma's Table: one shared cookbook for your family's recipes" "Collect your family's handed-down recipes in one shared cookbook. Snap a photo of a handwritten card and it types it up." "pricing.html#pricing" cat <<EOF <section class="hero hero-split"><div class="wrap hero-in"><div class="hero-words reveal"><h1>Every family recipe, in <em>one</em> cookbook</h1><p class="hero-sub">Snap a photo of grandma's handwritten card and Grandma's Table types it up. Add the story behind the dish, and let the whole family cook from the same book.</p><div class="hero-ctas"><a class="btn btn-primary" href="pricing.html#pricing">Start a cookbook<svg $IC><path d="M5 12h14M13 6l6 6-6 6"/></svg></a><a class="btn btn-ghost" href="#features">See how it works</a></div><p class="hero-note">Free for up to 50 recipes.</p></div><div class="hero-art reveal"><div class="polaroids" role="img" aria-label="Three taped-on pictures: a handwritten recipe card, a bowl of soup and a pie"><div class="pol pol-0">$(CARD '#F3D9A4')<p>The recipe card</p></div><div class="pol pol-1">$(BOWL '#F8DDB5' '#C98A3E' '#B45309' '#E7A15B')<p>Sunday soup</p></div><div class="pol pol-2">$(PIE '#E9D2A8' '#A9703A')<p>Apple pie</p></div></div></div></div></section> <section class="sec features features-grid" id="features" aria-labelledby="features-h"><div class="wrap"><div class="sec-head "><h2 id="features-h">Everything grandma <em>knew</em>, kept safe</h2></div><ul class="feat-list"><li class="feat reveal"><span class="feat-ic"><svg $IC><path d="M4 8h3l2-3h6l2 3h3v11H4zM12 16.500a3.500 3.500 0 1 0 0-7 3.500 3.500 0 0 0 0 7"/></svg></span><h3>Snap a photo</h3><p>Take a picture of a handwritten card and it types the recipe up for you.</p></li><li class="feat reveal"><span class="feat-ic"><svg $IC><path d="M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2zM4 19V5M8 7h7M8 11h5"/></svg></span><h3>Add the story</h3><p>Write down the story behind each dish, so it is never just a list of ingredients.</p></li><li class="feat reveal"><span class="feat-ic"><svg $IC><path d="M5 12l5 5 9-10M5 5h4M5 19h4"/></svg></span><h3>Shopping list</h3><p>Turn what you want to cook into a shopping list.</p></li><li class="feat reveal"><span class="feat-ic"><svg $IC><path d="M16 19v-1a4 4 0 0 0-8 0v1M12 11a3 3 0 1 0 0-6 3 3 0 0 0 0 6M20 19v-1a3 3 0 0 0-2-2.800M17 5.200a3 3 0 0 1 0 5.600"/></svg></span><h3>One shared cookbook</h3><p>The whole family keeps its recipes together in one place.</p></li></ul></div></section> <section class="sec gallery gallery-grid" id="gallery" aria-labelledby="gallery-h"><div class="wrap"><div class="sec-head "><h2 id="gallery-h">The family <em>recipe</em> wall</h2></div><ul class="gal-list"><li class="gal reveal" style="--span:3">$(BOWL '#FBD7A8' '#A9703A' '#3E6B5A' '#7FA68F')<p class="gal-cap">Soup that fixes everything</p></li><li class="gal reveal" style="--span:3">$(PIE '#F2D3B0' '#8C5A2B')<p class="gal-cap">The pie with a story</p></li><li class="gal reveal" style="--span:2">$(CARD '#E8D3A6')<p class="gal-cap">A handwritten card, typed up</p></li><li class="gal reveal" style="--span:2">$(POT '#D7E8D0' '#7C8A4E' '#B45309' '#8C3F06')<p class="gal-cap">Stew for a crowd</p></li><li class="gal reveal" style="--span:2">$(LIST '#BFE3F2')<p class="gal-cap">Ready for the shop</p></li></ul></div></section> <section class="sec cta cta-band" id="cta" aria-labelledby="cta-h"><div class="wrap"><div class="cta-box reveal"><h2 id="cta-h">Start your family's <em>cookbook</em></h2><p>Free for up to 50 recipes. Bring the first card to the table.</p><div class="hero-ctas"><a class="btn btn-light" href="pricing.html#pricing">Start a cookbook<svg $IC><path d="M5 12h14M13 6l6 6-6 6"/></svg></a></div></div></div></section> EOF FOOT } > index.html TICK="<svg $IC><path d=\"M5 12l5 5 9-10\"/></svg>" PLUS="<svg $IC><path d=\"M12 5v14M5 12h14\"/></svg>" { HEAD "Pricing | Grandma's Table" "Start a cookbook free, or go unlimited with the Family plan at \$4 a month." "#pricing" cat <<EOF <section class="hero hero-center page-head"><div class="wrap hero-in"><h1>Simple <em>pricing</em></h1><p class="hero-sub">Start free with up to 50 recipes. Go Family when the cookbook keeps growing.</p></div></section> <section class="sec pricing" id="pricing" aria-label="Plans"><div class="wrap"><ul class="tiers tiers-two"><li class="tier reveal"><h3>Free</h3><p class="tier-blurb">A shared cookbook to get started.</p><p class="tier-price"><span class="amount">\$0</span><span class="per">/ month</span></p><a class="btn btn-ghost" href="#">Start a cookbook</a><ul class="ticks"><li>${TICK}Up to 50 recipes</li></ul></li><li class="tier reveal featured"><p class="tier-flag">Best for families</p><h3>Family</h3><p class="tier-blurb">For a cookbook that never stops growing.</p><p class="tier-price"><span class="amount">\$4</span><span class="per">/ month</span></p><a class="btn btn-primary" href="#">Start a cookbook</a><ul class="ticks"><li>${TICK}Unlimited recipes</li><li>${TICK}One printed cookbook a year</li></ul></li></ul></div></section> <section class="sec faq" id="faq" aria-labelledby="faq-h"><div class="wrap faq-in"><div class="sec-head "><h2 id="faq-h">Good <em>questions</em></h2></div><div class="faq-list"><details class="reveal" open><summary>How does a handwritten card become a recipe?${PLUS}</summary><p>Snap a photo of the card and Grandma's Table types it up for you.</p></details><details class="reveal"><summary>What happens at 50 recipes?${PLUS}</summary><p>The Free plan holds up to 50 recipes. The Family plan has no limit.</p></details><details class="reveal"><summary>What is the printed cookbook?${PLUS}</summary><p>The Family plan includes one printed cookbook a year.</p></details><details class="reveal"><summary>Can I add the story behind a dish?${PLUS}</summary><p>Yes. Every recipe has room for the story that goes with it.</p></details></div></div></section> EOF FOOT } > pricing.html cat >> style.css <<'EOF' .tiers-two{grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),420px));justify-content:center} EOF node .claude/skills/scrapbook-app-site/scripts/check.mjs index.html --out check 2>&1 | tail -25; node .claude/skills/scrapbook-app-site/scripts/check.mjs pricing.html --out check-p 2>&1 | tail -25
  9. /private/var/folders/4r/x1k_d3dx36v_yrnn39ymflm40000gn/T/rcl-real-runs/scrapbook-app-site/gen/build.mjs
  10. B=/private/var/folders/4r/x1k_d3dx36v_yrnn39ymflm40000gn/T/rcl-real-runs/scrapbook-app-site; W=$B/work1; cd $W && node $B/gen/build.mjs $W $W/.claude/skills/scrapbook-app-site/reference && node .claude/skills/scrapbook-app-site/scripts/check.mjs index.html --out check 2>&1 | tail -20; node .claude/skills/scrapbook-app-site/scripts/check.mjs pricing.html --out check-p 2>&1 | tail -20
  11. cd . && node ../gen/build.mjs . .claude/skills/scrapbook-app-site/reference && node .claude/skills/scrapbook-app-site/scripts/check.mjs index.html --out check 2>&1 | tail -20; node .claude/skills/scrapbook-app-site/scripts/check.mjs pricing.html --out check-p 2>&1 | tail -20
  12. ./check/1440.png
  13. ./check-p/1440.png
  14. ./check/390.png
  15. printf '@media (max-width:900px){.gal-list>.gal:last-child:nth-child(odd){grid-column:1/-1}}\n' >> style.css && node .claude/skills/scrapbook-app-site/scripts/check.mjs index.html --out check 2>&1 | tail -3
  16. Done

10 Nov 2026 · Claude Code 2.1.322 with Claude Sonnet 5.5 · 2 min 20 s · $0.42 of API use

Questions

Is Scrapbook App Site free?

No. Scrapbook App Site costs $9.99 once and stays in your Recaply account, or it comes with the Recaply plan ($19.99 a month), which opens every premium skill and prompt.

Which agents can use Scrapbook App Site?

Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.

What do I get when I buy Scrapbook App Site?

A ZIP of the whole skill folder (43 KB): the SKILL.md your agent follows and its 7 other files, the references, templates and scripts it uses. You download it from this page whenever you need it, and install it in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. The Recaply plan opens it too, with every other premium skill and prompt.

How do I install Scrapbook App Site?

Buy it, then download the ZIP from this page. For Claude Code, unzip it into .claude/skills/ in your project. For Codex, Cursor and Gemini CLI, unzip it and run npx skills add ./scrapbook-app-site with your agent's flag.

What do I get from Scrapbook App Site?

One HTML file with its CSS inside: no build step, no framework. A two-page site (home and pricing) in a warm scrapbook style. Checked at phone and desktop widths.

What does Scrapbook App Site need?

Node 20+ and Chrome, and no API key. Each use costs nothing beyond your agent.

How big is Scrapbook App Site?

8 files, about 34,626 tokens in all. The SKILL.md is about 2,654 tokens, and your agent reads it only when the job fits.

What does a run cost?

Our 1 runs took 2 min 20 s to 2 min 20 s and $0.42 to $0.42 of API use each, in Claude Code with claude-sonnet-5-5. On a Claude plan, a run counts toward your usage instead.

Do I have to name Scrapbook App Site to use it?

Type /scrapbook-app-site first to make sure it loads. Without it, Claude Code may judge a small job simple enough to do without the skill.