Skip to content

DirectorySkills

Split-screen portfolio: 1440, made in this run
Run 1Split-screen portfolio“Make my portfolio. Use brief.md; my work is 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

Split-Screen Portfolio

A two-panel portfolio: a fixed left panel with name, bio and links, and a right column of work that scrolls.

$9.99once, yours to keep

Builds a split-screen portfolio with a fixed left panel into your own project: a fixed terracotta-and-cream left panel with the name, a short bio and buttons; the right column scrolls through large project pictures, an about block and contact; on phones the panel becomes a normal header. 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 photographer, designer, architect or artist wants a portfolio where their intro stays in view while the work scrolls, or someone asks for a split-screen portfolio.

By RecaplyUpdated 12 Nov

Install Split-Screen Portfolio

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

Read https://recaply.co/skills/split-screen-portfolio/install.md and follow it to install the split-screen-portfolio skill from split-screen-portfolio.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 Split-Screen Portfolio is for

What you get

  • One HTML file with its CSS inside: no build step, no framework
  • A split-screen portfolio with a fixed left panel
  • Checked at phone and desktop widths

Good fit

  • When a photographer, designer, architect or artist wants a portfolio where their intro stays in view while the work scrolls

Not for

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

About this skill

You say

Make my portfolio. Use brief.md; my work is in photos/.

It said back

Your portfolio is built and the automated check passes at 390, 768 and 1440 px. I looked at the 390 and 1440 screenshots and found nothing cut off or overlapping. I did not open the 768 screenshot or try it in a live browser (hover, keyboard, phone menu).

Files (in the project folder)

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

What it did in run 1

  1. split-screen-portfolio
  2. ls -la . photos && cat brief.md
  3. cd ./.claude/skills/split-screen-portfolio && ls -R . | head -30; cat reference/index.html reference/style.css reference/script.js; node scripts/check.mjs --ready
  4. ~/.claude/projects/-private-var-folders-4r-x1k-d3dx36v-yrnn39ymflm40000gn-T-rcl-real-runs-split-screen-portfolio-work1/946be7d0-9b37-4902-8992-e747e5b4c923/tool-results/bk0rpvz3p.txt
  5. ./photos/giraffe-book.jpg
  6. ./photos/rain-book.jpg
  7. ./photos/magazine-cover.jpg
  8. ./photos/school-mural.jpg
  9. cd . && S=.claude/skills/split-screen-portfolio/reference && cp $S/style.css style.css && python3 - <<'E' s=open('script.js','w') if False else None E head -17 $S/script.js | sed '/^\/\/ Billing/,$d' > script.js cat >> script.js <<'E' for (const y of document.querySelectorAll('[data-year]')) y.textContent = new Date().getFullYear(); // Contact form: no server is connected yet, so say so honestly. for (const f of document.querySelectorAll('[data-form]')) f.addEventListener('submit', (e) => { e.preventDefault(); const s = f.querySelector('.form-status'); if (s) s.textContent = 'Thank you. This form is not connected yet, so nothing was sent. Please email kai@oduya.studio.'; }); E cat >> style.css <<'E' /* ---- portfolio overrides ---- */ .nav{position:fixed!important;left:0;right:0;background:var(--bg)!important;border-bottom:1px solid var(--line)!important} .nav .wrap{width:min(100% - 40px,var(--max))!important;margin-inline:auto!important} .nav-in{min-height:64px} .menu .btn{min-height:40px} .hero-portfolio .hero-in{display:block} .hero-words{max-width:34rem} .hero h1 em{color:var(--em)} .work-art{aspect-ratio:auto;background:var(--surface)} .work-art img{width:100%;height:auto;transition:transform .6s ease} .work-link:hover .work-art img{transform:scale(1.04)} .work-meta p{color:var(--muted)} .work-art{border:0} .earlier{margin-top:clamp(40px,6vw,72px);padding-top:1.2rem;border-top:1px solid var(--line);color:var(--muted)} .clients{margin-top:1rem;color:var(--muted)} .btn-primary{background:var(--em)} .btn-primary:hover{background:var(--accent)} .hero-ctas .btn-primary{box-shadow:0 2px 0 rgba(0,0,0,.12)} .btn-primary:hover{box-shadow:0 8px 16px -8px rgba(0,0,0,.45)} .about-in,.contact-in{grid-template-columns:1fr} .foot-in{grid-template-columns:1.6fr repeat(2,1fr)} .work-link:focus-visible{outline-offset:6px} @media (min-width:1000px){ main>.hero{height:100vh;box-sizing:border-box;padding-top:64px;align-items:center} main>.sec:first-of-type{padding-top:calc(64px + 48px)} .foot .wrap{width:auto;margin-inline:clamp(28px,4vw,64px)} .foot{margin-left:0} } @media (max-width:900px){.foot-in{grid-template-columns:1fr 1fr}} @media (max-width:520px){.foot-in{grid-template-columns:1fr}} @media (max-width:999px){.nav{position:sticky!important}} @media (prefers-reduced-motion:reduce){.work-link:hover .work-art img,.btn:hover{transform:none}} E cat > index.html <<'E' <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Kai Oduya: Children's book and editorial illustrator, Nairobi</title> <meta name="description" content="Kai Oduya is a children's book and editorial illustrator in Nairobi, working in gouache and digital. Picture books, magazine covers and a school mural."> <meta property="og:type" content="website"> <meta property="og:title" content="Kai Oduya: Children's book and editorial illustrator, Nairobi"> <meta property="og:description" content="Picture books, magazine covers and murals in gouache and digital, drawn from the city of Nairobi."> <meta property="og:image" content="photos/giraffe-book.jpg"> <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=Archivo+Narrow:wght@500;600;700&family=Archivo:wght@400;500&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="#main" aria-label="Kai Oduya, back to top"><span>Kai Oduya</span></a> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="menu"><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="M4 7h16M4 12h16M4 17h16"/></svg><span class="sr-only">Menu</span></button> <nav id="menu" class="menu" aria-label="Main"><ul><li><a href="#work">Work</a></li><li><a href="#about">About</a></li><li><a href="#contact">Contact</a></li></ul><a class="btn btn-primary btn-sm" href="#contact">Say hello</a></nav> </div></header> <main id="main"> <section class="hero hero-portfolio"><div class="wrap hero-in"><div class="hero-words reveal"><p class="kicker">Illustrator · Nairobi</p><h1>Kai Oduya draws <em>the city and its children</em></h1><p class="hero-sub">Children's book and editorial illustrator, nine years in gouache and digital.</p><div class="hero-ctas"><a class="btn btn-primary" href="#work">See the work</a><a class="btn btn-ghost" href="#contact">Contact</a></div></div></div></section> <section class="sec work work-list-v" id="work" aria-label="Selected work"><div class="wrap"><ul class="work-list"> <li class="work-item reveal"><a href="photos/giraffe-book.jpg" class="work-link" aria-label="Twiga and Me, 2024, view picture"><div class="work-art"><img src="photos/giraffe-book.jpg" width="896" height="1152" loading="lazy" alt="A girl in a red dress walks through golden grass beside a tall giraffe, with the Nairobi skyline at sunset behind them."></div><div class="work-meta"><h3>Twiga and Me</h3><p>A picture book from Acacia Books</p><span class="work-year">2024</span></div></a></li> <li class="work-item reveal"><a href="photos/rain-book.jpg" class="work-link" aria-label="The Long Rain, 2025, view picture"><div class="work-art"><img src="photos/rain-book.jpg" width="896" height="1152" loading="lazy" alt="Two laughing boys share a green umbrella in a rainy street market with fruit stalls and lamps."></div><div class="work-meta"><h3>The Long Rain</h3><p>A picture book from Acacia Books</p><span class="work-year">2025</span></div></a></li> <li class="work-item reveal"><a href="photos/magazine-cover.jpg" class="work-link" aria-label="City Readers, 2025, view picture"><div class="work-art"><img src="photos/magazine-cover.jpg" width="896" height="1152" loading="lazy" alt="A woman cycles past blue and orange tower blocks with a tall stack of books on her back rack."></div><div class="work-meta"><h3>City Readers</h3><p>Twelve covers for Msafiri Weekly magazine</p><span class="work-year">2025</span></div></a></li> <li class="work-item reveal"><a href="photos/school-mural.jpg" class="work-link" aria-label="Ngong Road Primary mural, 2023, view picture"><div class="work-art"><img src="photos/school-mural.jpg" width="1152" height="896" loading="lazy" alt="A long painted school wall of smiling pupils under acacia trees and birds, with two pupils in uniform walking past."></div><div class="work-meta"><h3>Ngong Road Primary mural</h3><p>18 metres long, painted with the pupils</p><span class="work-year">2023</span></div></a></li> </ul> <p class="earlier reveal">Earlier: <strong>Grandma's Market</strong> (2022), my first picture book. Pictures to come.</p></div></section> <section class="sec about" id="about" aria-labelledby="about-h"><div class="wrap about-in"><div class="about-words reveal"><div class="sec-head"><h2 id="about-h">About</h2></div><p>I draw the city I grew up in: busy, kind and full of colour. Most of my books are about children finding their way around it.</p><p class="clients">Clients: Acacia Books, Msafiri Weekly, Ngong Road Primary School, Kijani Festival.</p></div></div></section> <section class="sec contact" id="contact" aria-labelledby="contact-h"><div class="wrap contact-in"><div class="reveal"><div class="sec-head"><h2 id="contact-h">Contact</h2></div><p class="contact-line"><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="M3 6h18v12H3zM3 7l9 6 9-6"/></svg><a href="mailto:kai@oduya.studio">kai@oduya.studio</a></p></div><form class="contact-form reveal" data-form aria-label="Contact form"><label class="field"><span>Your name</span><input name="name" type="text" required autocomplete="name"></label><label class="field"><span>Email</span><input name="email" type="email" required autocomplete="email"></label><label class="field"><span>Message</span><textarea name="message" rows="5" required></textarea></label><button class="btn btn-primary" type="submit">Send message</button><p class="form-status" role="status" aria-live="polite"></p></form></div></section> </main> <footer class="foot"><div class="wrap foot-in"><div class="foot-brand"><a class="brand" href="#main"><span>Kai Oduya</span></a><p>Illustrator, Nairobi.</p></div><nav class="foot-col" aria-label="Pages"><h2>Pages</h2><ul><li><a href="#work">Work</a></li><li><a href="#about">About</a></li><li><a href="#contact">Contact</a></li></ul></nav><nav class="foot-col" aria-label="Get in touch"><h2>Get in touch</h2><ul><li><a href="mailto:kai@oduya.studio">Email</a></li></ul></nav></div><div class="wrap foot-small"><p>© <span data-year>2026</span> Kai Oduya. All pictures are by Kai Oduya.</p></div></footer> <script src="script.js" defer></script> </body> </html> E node .claude/skills/split-screen-portfolio/scripts/check.mjs index.html --out check 2>&1 | tail -40
  10. cd . && cp .claude/skills/split-screen-portfolio/reference/style.css style.css && ls
  11. ./style.css
  12. ./script.js
  13. ./index.html
  14. cd . && node .claude/skills/split-screen-portfolio/scripts/check.mjs index.html --out check 2>&1 | tail -40
  15. ./check/1440.png
  16. ./check/390.png
  17. Done

12 Nov 2026 · Claude Code 2.1.322 with Claude Sonnet 5.5 · 2 min 8 s · $0.43 of API use

Questions

Is Split-Screen Portfolio free?

No. Split-Screen Portfolio 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 Split-Screen Portfolio?

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

What do I get when I buy Split-Screen Portfolio?

A ZIP of the whole skill folder (39 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 Split-Screen Portfolio?

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 ./split-screen-portfolio with your agent's flag.

What do I get from Split-Screen Portfolio?

One HTML file with its CSS inside: no build step, no framework. A split-screen portfolio with a fixed left panel. Checked at phone and desktop widths.

What does Split-Screen Portfolio need?

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

How big is Split-Screen Portfolio?

7 files, about 29,543 tokens in all. The SKILL.md is about 2,429 tokens, and your agent reads it only when the job fits.

What does a run cost?

Our 1 runs took 2 min 8 s to 2 min 8 s and $0.43 to $0.43 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 Split-Screen Portfolio to use it?

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