Skip to content

DirectorySkills

Dark portrait quotes: 1440, made in this run
Run 1Dark portrait quotes“Add testimonials to our dark-themed music production plug-in site. Quotes in brief.md, headshots in photos/.”
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, 12 Nov
Needs
Node 20+Chrome
Licence
Recaply licence

Dark Portrait Quotes

Three testimonials on near-black, each with a monochrome portrait in a glowing accent ring above the quote.

$9.99once, yours to keep

Builds dark-mode testimonials with monochrome portraits into your own project: near-black section with three columns: a greyscale round portrait in a soft electric-violet glow ring, the quote in light grey, the name in white and the role in muted grey; thin dividers between columns. 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 dark-themed product, developer tool, music, gaming or security brand wants testimonials, or someone asks for dark testimonials with portraits.

By RecaplyUpdated 12 Nov

Install Dark Portrait Quotes

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

Read https://recaply.co/skills/dark-portrait-quotes/install.md and follow it to install the dark-portrait-quotes skill from dark-portrait-quotes.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 Dark Portrait Quotes is for

What you get

  • One HTML file with its CSS inside: no build step, no framework
  • Dark-mode testimonials with monochrome portraits
  • Checked at phone and desktop widths

Good fit

  • When a dark-themed product, developer tool, music, gaming or security brand wants testimonials

Not for

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

About this skill

You say

Add testimonials to our dark-themed music production plug-in site. Quotes in brief.md, headshots in photos/.

It said back

I've added the testimonials section as a new page, index.html. Your project had no site files, only brief.md and photos/, so I built the section standalone for you to drop into the real page. The check passes at 390, 768 and 1440 px: no sideways scroll, no text under 12px, alt text and names present, contrast and focus styles fine, and no leftover sample text. I looked at the 390 and 1440 screenshots, and they read cleanly with nothing cut off. I did not open the 768 screenshot.

Files: index.html, style.css and script.js are in the project folder. The check screenshots are check/390.png, check/768.png and check/1440.png.

Show more

What it did in run 1

  1. dark-portrait-quotes
  2. ls -la . photos && cat brief.md
  3. cd ./.claude/skills/dark-portrait-quotes && cat reference/index.html reference/style.css reference/script.js; node scripts/check.mjs --ready; file ../../../photos/*
  4. cd ./.claude/skills/dark-portrait-quotes && cat reference/index.html reference/style.css reference/script.js; node scripts/check.mjs --ready; sips -g pixelWidth -g pixelHeight ../../../photos/*.jpg
  5. cd ./.claude/skills/dark-portrait-quotes && cat reference/index.html reference/style.css reference/script.js; node scripts/check.mjs --ready
  6. ./photos/mara-quinn.jpg
  7. ./photos/dele-okon.jpg
  8. ./photos/tess-alvarez.jpg
  9. cd . && S=.claude/skills/dark-portrait-quotes/reference && cp $S/script.js script.js && python3 - <<'EOF' import re css=open('.claude/skills/dark-portrait-quotes/reference/style.css').read() css=css.replace('--bg:#0B0B10','--bg:#000000').replace('--surface:#14141C','--surface:#0E0E0E').replace('--line:#26263A','--line:#2A2A2A').replace('--accent:#8B7BFF','--accent:#FF7A1A').replace('--em:#B3A8FF','--em:#FF9A4D').replace('--muted:#A6A6B8','--muted:#A8A8A8').replace('--ink:#F2F2F7','--ink:#F5F5F5') css=css.replace('rgba(139,123,255,.45)','rgba(255,122,26,.45)').replace('rgba(139,123,255,.6)','rgba(255,122,26,.6)').replace('#D6D6E2','#D9D9D9') css=css.replace('.dp-ring svg{width:100%;height:100%;filter:grayscale(1) contrast(1.05)}', '.dp-ring{position:relative}\n.dp-ring img{position:absolute;width:200%;height:200%;max-width:none;left:var(--x);top:var(--y);filter:grayscale(1) contrast(1.05)}\n.dp-i:focus-within .dp-ring{animation:glow 4s ease-in-out infinite}') css=css.replace('.dp-i:hover .dp-ring{','.dp-i:hover .dp-ring{') open('style.css','w').write(css) items=[("Mara Quinn","Film composer","Halftone sits under a string section like it was always there. The pads are warm without going muddy.","mara-quinn","-44%","-40%"), ("Dele Okon","Techno producer, Berlin","It&rsquo;s the first soft synth I have put through a club system without reaching for an EQ.","dele-okon","-40%","-26%"), ("Tess Alvarez","Music teacher on YouTube, 410k subscribers","My students get a usable sound in the first five minutes. The macro knobs make it easy to teach.","tess-alvarez","-50%","-10%")] li=''.join(f''' <li class="dp-i reveal" tabindex="0"><figure><span class="dp-ring" style="--x:{x};--y:{y}"><img src="photos/{f}.jpg" width="192" height="192" alt="Portrait of {n}" loading="lazy"></span><blockquote><p>&ldquo;{q}&rdquo;</p></blockquote><figcaption><b>{n}</b><span class="role">{r}</span></figcaption></figure></li>''' for n,r,q,f,x,y in items) html=f'''<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Halftone Audio: what producers say</title> <meta name="description" content="Producers on Halftone, the synth plug-in for VST3, AU and AAX."> <meta property="og:title" content="Halftone Audio: what producers say"> <meta property="og:description" content="Producers on Halftone, the synth plug-in for VST3, AU and AAX."> <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=Space+Grotesk:wght@400;500;700&display=swap"> <link rel="stylesheet" href="style.css"> </head> <body> <a class="skip" href="#main">Skip to content</a> <main id="main"> <section class="t-sec center" id="voices" aria-labelledby="voices-h"><div class="sec-head center"><h2 id="voices-h">Heard in the <em>studio</em></h2><p class="sub">Producers on working with Halftone.</p></div><ul class="wrap dp">{li} </ul></section> </main> <script src="script.js" defer></script> </body> </html> ''' open('index.html','w').write(html) EOF node .claude/skills/dark-portrait-quotes/scripts/check.mjs index.html --out check 2>&1 | tail -40
  10. cd . && cp .claude/skills/dark-portrait-quotes/reference/script.js script.js && python3 - <<'EOF' css=open('.claude/skills/dark-portrait-quotes/reference/style.css').read() for a,b in [('--bg:#0B0B10','--bg:#000000'),('--surface:#14141C','--surface:#0E0E0E'),('--line:#26263A','--line:#2A2A2A'),('--accent:#8B7BFF','--accent:#FF7A1A'),('--em:#B3A8FF','--em:#FF9A4D'),('--muted:#A6A6B8','--muted:#A8A8A8'),('--ink:#F2F2F7','--ink:#F5F5F5'),('rgba(139,123,255,.45)','rgba(255,122,26,.45)'),('rgba(139,123,255,.6)','rgba(255,122,26,.6)'),('#D6D6E2','#D9D9D9'), ('.dp-ring svg{width:100%;height:100%;filter:grayscale(1) contrast(1.05)}','.dp-ring{position:relative}\n.dp-ring img{position:absolute;width:200%;height:200%;max-width:none;left:var(--x);top:var(--y);filter:grayscale(1) contrast(1.05)}\n.dp-i:focus-within .dp-ring{animation:glow 4s ease-in-out infinite}')]: css=css.replace(a,b) open('style.css','w').write(css) items=[("Mara Quinn","Film composer","Halftone sits under a string section like it was always there. The pads are warm without going muddy.","mara-quinn","-44%","-40%"), ("Dele Okon","Techno producer, Berlin","It&rsquo;s the first soft synth I have put through a club system without reaching for an EQ.","dele-okon","-40%","-26%"), ("Tess Alvarez","Music teacher on YouTube, 410k subscribers","My students get a usable sound in the first five minutes. The macro knobs make it easy to teach.","tess-alvarez","-50%","-10%")] li=''.join(f''' <li class="dp-i reveal" tabindex="0"><figure><span class="dp-ring" style="--x:{x};--y:{y}"><img src="photos/{f}.jpg" width="192" height="192" alt="Portrait of {n}" loading="lazy"></span><blockquote><p>&ldquo;{q}&rdquo;</p></blockquote><figcaption><b>{n}</b><span class="role">{r}</span></figcaption></figure></li>''' for n,r,q,f,x,y in items) html='''<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Halftone Audio: what producers say</title> <meta name="description" content="Producers on Halftone, the synth plug-in for VST3, AU and AAX."> <meta property="og:title" content="Halftone Audio: what producers say"> <meta property="og:description" content="Producers on Halftone, the synth plug-in for VST3, AU and AAX."> <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=Space+Grotesk:wght@400;500;700&display=swap"> <link rel="stylesheet" href="style.css"> </head> <body> <a class="skip" href="#main">Skip to content</a> <main id="main"> <section class="t-sec center" id="voices" aria-labelledby="voices-h"><div class="sec-head center"><h2 id="voices-h">Heard in the <em>studio</em></h2><p class="sub">Producers on working with Halftone.</p></div><ul class="wrap dp">'''+li+''' </ul></section> </main> <script src="script.js" defer></script> </body> </html> ''' open('index.html','w').write(html) EOF node .claude/skills/dark-portrait-quotes/scripts/check.mjs index.html --out check 2>&1 | tail -40
  11. ./index.html
  12. ./style.css
  13. ./script.js
  14. cd . && node .claude/skills/dark-portrait-quotes/scripts/check.mjs index.html --out check
  15. ./check/1440.png
  16. ./check/390.png
  17. Done

12 Nov 2026 · Claude Code 2.1.322 with Claude Sonnet 5.5 · 1 min 15 s · $0.26 of API use

Questions

Is Dark Portrait Quotes free?

No. Dark Portrait Quotes 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 Dark Portrait Quotes?

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

What do I get when I buy Dark Portrait Quotes?

A ZIP of the whole skill folder (31 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 Dark Portrait Quotes?

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 ./dark-portrait-quotes with your agent's flag.

What do I get from Dark Portrait Quotes?

One HTML file with its CSS inside: no build step, no framework. Dark-mode testimonials with monochrome portraits. Checked at phone and desktop widths.

What does Dark Portrait Quotes need?

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

How big is Dark Portrait Quotes?

7 files, about 19,968 tokens in all. The SKILL.md is about 2,103 tokens, and your agent reads it only when the job fits.

What does a run cost?

Our 1 runs took 1 min 15 s to 1 min 15 s and $0.26 to $0.26 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 Dark Portrait Quotes to use it?

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