Skip to content

DirectorySkills

Call-first local hero: 1440, made in this run
Run 1Call-first local hero“Hero for our dental practice with phone, hours and address clearly visible. Details 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

Call-First Local Hero

A local-business hero with a friendly headline and picture, plus a bar of call, hours, address and emergency details.

$9.99once, yours to keep

Builds a local-business hero with a contact bar into your own project: cream hero with a deep green headline, a line and two buttons (Book online, Call us) on the left and a rounded picture panel on the right; across the bottom a white contact bar with four parts: phone, opening hours with an "Open now" mark, address with directions, and the 24-hour emergency line. 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 local service (vet, dentist, plumber, salon, garage, clinic, restaurant) wants a hero that gets people to call or visit, or someone asks for a hero with phone, opening hours and address.

By RecaplyUpdated 12 Nov

Install Call-First Local Hero

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

Read https://recaply.co/skills/call-first-local-hero/install.md and follow it to install the call-first-local-hero skill from call-first-local-hero.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 Call-First Local Hero is for

What you get

  • One HTML file with its CSS inside: no build step, no framework
  • A local-business hero with a contact bar
  • Checked at phone and desktop widths

Good fit

  • When a local service wants a hero that gets people to call or visit, or someone asks for a hero with phone, opening hours and address

Not for

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

About this skill

You say

Hero for our dental practice with phone, hours and address clearly visible. Details in brief.md.

It said back

The hero for Brightsmile Dental is built, and the automated check passes at 390, 768 and 1440px. I viewed the 390 and 1440 screenshots before the last small button fix and did not re-view them afterwards. I did not look at the 768 screenshot.

The check covers sideways overflow, small text, alt text, names, contrast, focus styles, reduced motion and script errors.

Show more

What it did in run 1

  1. call-first-local-hero
  2. ./brief.md
  3. cd .; ls -a; S=.claude/skills/call-first-local-hero; ls $S/reference; cat $S/reference/index.html $S/reference/style.css $S/reference/script.js
  4. ls -a && cat .claude/skills/call-first-local-hero/reference/index.html .claude/skills/call-first-local-hero/reference/style.css .claude/skills/call-first-local-hero/reference/script.js
  5. R=.claude/skills/call-first-local-hero/reference && cp $R/style.css style.css && python3 -I - <<'EOF' import re p='style.css' s=open(p).read() s=s.replace(":root{--bg:#FBF5EA;--surface:#FFFFFF;--ink:#173C30;--muted:#4D6159;--line:#E8DFCC;--accent:#1F5C46;--on-accent:#FFFFFF;--em:#1F5C46;--coral:#F08A6C;--good:#167A4A;", ":root{--bg:#F1FAF9;--surface:#FFFFFF;--ink:#0B3B3A;--muted:#42615F;--line:#D3E6E3;--accent:#0F766E;--accent-hover:#0B5F59;--on-accent:#FFFFFF;--em:#0F766E;--coral:#2BB3A7;--good:#0F7A4A;") s=s.replace("#E3F1EA","#D9F1EE").replace("rgba(23,60,48,.5)","rgba(11,59,58,.5)") # nav hidden-free: remove unused pause/h-note rules not needed; fine s=s.replace(".cb-open{font-style:normal;font-weight:600;font-size:.9rem;color:var(--good);margin-left:.3rem}", ".cb-open{font-style:normal;font-weight:600;font-size:.9rem;color:var(--good);margin-left:.3rem}\n.cb-bar a:hover{text-decoration:underline}\n.cb-bar a{display:inline-block;padding-block:.15rem}\n.cb-bar dl{margin:0}.cb-bar dt{float:left;clear:left;width:5.2rem;font-weight:600;color:var(--ink)}.cb-bar dd{margin:0 0 0 5.2rem}") open(p,'w').write(s) EOF cat > script.js <<'EOF' document.documentElement.classList.add('js'); const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)'); (() => { const els = document.querySelectorAll('.reveal'); if (reduceMotion.matches || !('IntersectionObserver' in window)) { els.forEach((e) => e.classList.add('in')); return; } const io = new IntersectionObserver((entries) => { for (const en of entries) if (en.isIntersecting) { en.target.classList.add('in'); io.unobserve(en.target); } }, { threshold: 0.12 }); els.forEach((e) => io.observe(e)); })(); // "Open now" from the opening hours on the visitor's clock (hours are always written out too). // Hours by day (0 = Sunday): [opens, closes] in 24h decimal, or null when closed. const HOURS = { 0: null, 1: [7.5, 20], 2: [7.5, 20], 3: [7.5, 20], 4: [7.5, 20], 5: [7.5, 17], 6: [9, 13] }; const op = document.querySelector('[data-open]'); if (op) { const d = new Date(), h = d.getHours() + d.getMinutes() / 60, t = HOURS[d.getDay()]; const open = !!t && h >= t[0] && h < t[1]; op.textContent = open ? '· Open now' : '· Closed now'; op.classList.toggle('shut', !open); } EOF cat > index.html <<'EOF' <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Brightsmile Dental, Hove</title> <meta name="description" content="Gentle dentists in Hove with early and late appointments. Call 01632 960771. 3 Church Road, Hove."> <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=Outfit:wght@400;500;600;700&display=swap"> <link rel="stylesheet" href="style.css"> </head> <body> <a class="skip" href="#main">Skip to content</a> <div class="hero cb"><header class="hbar wrap"><a class="brand" href="#main"><svg viewBox="0 0 32 32" aria-hidden="true" focusable="false"><path d="M8 5c3-1.5 5 .5 8 .5S21 3.500 24 5c3 1.500 3 6 1.500 10-1 3-1.500 6-2.500 10-.5 2-3 2-3.500 0-.7-3-1.200-5-3.500-5s-2.800 2-3.500 5c-.5 2-3 2-3.500 0-1-4-1.500-7-2.500-10C5 11 5 6.500 8 5z" fill="#0F766E"/></svg>Brightsmile Dental</a><a class="btn btn-primary" href="#book">Book online</a></header><main id="main"><div class="wrap cb-in"><div class="cb-copy"><p class="h-kick">Brightsmile Dental, Hove</p><h1>Gentle dentists, early and late appointments</h1><div class="h-acts"><a class="btn btn-primary" href="#book">Book online</a><a class="btn btn-ghost" href="tel:+441632960771">Call the practice</a></div></div><div class="cb-pic" aria-hidden="true"><svg viewBox="0 0 200 200" aria-hidden="true" focusable="false"><circle cx="100" cy="100" r="96" fill="#D9F1EE"/><path d="M60 52c14-8 26 2 40 2s26-10 40-2c15 8 14 30 7 52-5 16-6 34-12 52-3 9-14 9-16-1-2-13-4-26-19-26s-17 13-19 26c-2 10-13 10-16 1-6-18-7-36-12-52-7-22-8-44 7-52z" fill="#FFFFFF"/></svg><svg viewBox="0 0 240 160" aria-hidden="true" focusable="false"><path d="M30 120c40 30 140 30 180 0" fill="none" stroke="#FFFFFF" stroke-width="10" stroke-linecap="round"/><circle cx="50" cy="40" r="6" fill="#FFFFFF"/><circle cx="190" cy="30" r="9" fill="#FFFFFF"/></svg></div></div><ul class="wrap cb-bar"><li class="reveal"><svg 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"><path d="M5 3h4l2 5-2.500 1.500a11 11 0 0 0 6 6L16 13l5 2v4a2 2 0 0 1-2 2A17 17 0 0 1 3 5a2 2 0 0 1 2-2z"/></svg><span><b>Call us</b><a href="tel:+441632960771">01632 960771</a></span></li><li class="reveal"><svg 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"><path d="M12 7v5l3 2M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18"/></svg><span><b>Opening hours <em class="cb-open" data-open></em></b><dl><dt>Mon–Thu</dt><dd>7:30am–8pm</dd><dt>Fri</dt><dd>7:30am–5pm</dd><dt>Sat</dt><dd>9am–1pm</dd><dt>Sun</dt><dd>Closed</dd></dl></span></li><li class="reveal"><svg 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"><path d="M12 21s7-6.500 7-12a7 7 0 0 0-14 0c0 5.500 7 12 7 12zM12 11a2 2 0 1 0 0-4 2 2 0 0 0 0 4"/></svg><span><b>Find us</b>3 Church Road, Hove<br><a href="https://www.google.com/maps/search/?api=1&amp;query=3+Church+Road+Hove" target="_blank" rel="noopener">Directions<span class="sr-only"> (opens in a new tab)</span></a></span></li><li class="reveal"><svg 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"><path d="M6 16V11a6 6 0 0 1 12 0v5l2 2H4zM10 20a2 2 0 0 0 4 0"/></svg><span><b>Dental emergency</b>Emergency line:<br><a href="tel:+441632960772">01632 960772</a></span></li></ul></main></div> <script src="script.js" defer></script> </body> </html> EOF sed -i '' 's/\([0-9]\)\.\([0-9]\)00 /\1.\2 /g; s/3\.500/3.5/g; s/1\.500/1.5/g; s/2\.500/2.5/g; s/6\.500/6.5/g; s/5\.500/5.5/g; s/2\.800/2.8/g; s/1\.200/1.2/g; s/0\.7/.7/g' index.html grep -o 'd="M8 5[^"]*"' index.html; node .claude/skills/call-first-local-hero/scripts/check.mjs index.html --out check 2>&1 | tail -30
  6. ls
  7. cp .claude/skills/call-first-local-hero/reference/style.css style.css && sed -i '' -e 's/#FBF5EA/#F1FAF9/; s/--ink:#173C30/--ink:#0B3B3A/; s/--muted:#4D6159/--muted:#42615F/; s/--line:#E8DFCC/--line:#D3E6E3/; s/--accent:#1F5C46/--accent:#0F766E/; s/--em:#1F5C46/--em:#0F766E/; s/--coral:#F08A6C/--coral:#2BB3A7/; s/--good:#167A4A/--good:#0F7A4A/; s/#E3F1EA/#D9F1EE/; s/rgba(23,60,48,.5)/rgba(11,59,58,.5)/' style.css && cat >> style.css <<'EOF' .cb-bar a:hover{text-decoration:underline} .cb-bar a{display:inline-block;padding-block:.15rem} .cb-bar dl{margin:0} .cb-bar dt{float:left;clear:left;width:5.2rem;font-weight:600;color:var(--ink)} .cb-bar dd{margin:0 0 0 5.2rem} EOF head -c 300 style.css
  8. ./script.js
  9. ./index.html
  10. cp .claude/skills/call-first-local-hero/reference/style.css style.css && ls
  11. ./.claude/skills/call-first-local-hero/reference/style.css
  12. ./style.css
  13. node .claude/skills/call-first-local-hero/scripts/check.mjs index.html --out check 2>&1 | tail -30
  14. ./check/1440.png
  15. ./check/390.png
  16. ./style.css
  17. node .claude/skills/call-first-local-hero/scripts/check.mjs index.html --out check 2>&1 | tail -5
  18. Done

10 Nov 2026 · Claude Code 2.1.322 with Claude Sonnet 5.5 · 1 min 42 s · $0.30 of API use

Questions

Is Call-First Local Hero free?

No. Call-First Local Hero 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 Call-First Local Hero?

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

What do I get when I buy Call-First Local Hero?

A ZIP of the whole skill folder (32 KB): the SKILL.md your agent follows and its 6 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 Call-First Local Hero?

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 ./call-first-local-hero with your agent's flag.

What do I get from Call-First Local Hero?

One HTML file with its CSS inside: no build step, no framework. A local-business hero with a contact bar. Checked at phone and desktop widths.

What does Call-First Local Hero need?

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

How big is Call-First Local Hero?

7 files, about 20,899 tokens in all. The SKILL.md is about 2,212 tokens, and your agent reads it only when the job fits.

What does a run cost?

Our 1 runs took 1 min 42 s to 1 min 42 s and $0.30 to $0.30 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 Call-First Local Hero to use it?

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