Portfolio Lab

Show off your work.

A portfolio's whole job is to present what you've built. Here are clean, copy-ready ways to display your projects — and to go deeper with real case studies. Pick a component, hit Code, and drop it into your own site.

Start Here

Add Your Images

Every component below uses a coloured placeholder box so you can see the layout. To make it yours, drop an <img> inside that box. The trick is object-fit: cover — it fills the box at any size without squishing your photo.

Placeholder → real image HOW-TO
Placeholder (what you start with)
A project screenshot
Your image dropped in
A few tips:
  • Keep images in an images/ folder next to your HTML, then link them like images/my-project.jpg.
  • Always add alt text describing the picture — it's read aloud by screen readers.
  • Resize big photos before uploading (aim under ~300 KB) so the page loads fast.
  • Use lowercase file names with no spaces: hero-shot.jpg, not Hero Shot.JPG.
HTML
<!-- BEFORE — an empty placeholder box -->
<div class="proj-thumb"></div>

<!-- AFTER — drop your own image inside it -->
<div class="proj-thumb">
  <img src="images/my-project.jpg" alt="Screenshot of my project">
</div>
01 — Show Your Projects

Project Cards

The workhorse of any portfolio: a tidy grid of cards with a thumbnail, tech tags, and quick links to the live site and code. Hover to reveal the actions.

Grid + hover actions GRID
ReactAPI

Weather Dashboard

Live forecasts with a clean, card-based UI.

UIFigma

Fitness App

A motivating redesign of a workout tracker.

HTMLCSS

Bakery Site

A warm landing page for a local bakery.

HTML
<div class="proj-grid">
  <article class="proj-card">
    <div class="proj-thumb">
      <img src="project.jpg" alt="">
      <div class="actions">
        <a href="#"><i class="ph ph-eye"></i></a>
        <a href="#"><i class="ph ph-github-logo"></i></a>
      </div>
    </div>
    <div class="proj-body">
      <div class="proj-tags"><span>React</span></div>
      <h3>Project title</h3>
      <p>Short description.</p>
    </div>
  </article>
</div>
02 — Show Your Projects

Bento Showcase

Mixed-size tiles let your best project take the spotlight while others fill the gaps. The trendiest way to feature work without everything looking the same.

Asymmetric tile grid BENTO

Featured: Aurora

Full product redesign

Analytics App

Dashboards

Photo Site

Shop

Mobile App

iOS & Android
HTML
<div class="bento">
  <div class="b b1"><h4>Featured: Aurora</h4><small>Full product redesign</small></div>
  <div class="b b2"><h4>Analytics App</h4><small>Dashboards</small></div>
  <div class="b b3"><h4>Photo Site</h4></div>
  <div class="b b4"><h4>Shop</h4></div>
  <div class="b b5"><h4>Mobile App</h4><small>iOS &amp; Android</small></div>
</div>
03 — Show Your Projects

Minimal List

When the work speaks for itself, a clean typographic list feels confident and fast. Each row nudges on hover and links straight to the project.

Typographic rows LIST
HTML
<div class="min-list">
  <a class="min-row" href="#">
    <span class="yr">2026</span>
    <div><h3>Project name</h3><p>Role · Type</p></div>
    <span class="go">→</span>
  </a>
</div>
04 — Show Your Projects

Filterable Gallery

Let visitors narrow your work by type. A little JavaScript toggles which cards show — great once you have projects in a few different categories.

Filter buttons + grid INTERACTIVE

Travel Blog

Web

Brand Kit

Design

Habit Tracker

App

News Portal

Web

Poster Series

Design
HTML
<div class="filter-bar">
  <button class="filter-btn active" data-filter="all">All</button>
  <button class="filter-btn" data-filter="web">Web</button>
  <button class="filter-btn" data-filter="design">Design</button>
  <button class="filter-btn" data-filter="app">Apps</button>
</div>

<div class="fg-grid">
  <div class="fg-item" data-cat="web">
    <div class="t">🌐</div>
    <div class="c"><h4>Travel Blog</h4><small>Web</small></div>
  </div>
  <div class="fg-item" data-cat="design">
    <div class="t">🎨</div>
    <div class="c"><h4>Brand Kit</h4><small>Design</small></div>
  </div>
  <div class="fg-item" data-cat="app">
    <div class="t">📱</div>
    <div class="c"><h4>Habit Tracker</h4><small>App</small></div>
  </div>
  <div class="fg-item" data-cat="web">
    <div class="t">📰</div>
    <div class="c"><h4>News Portal</h4><small>Web</small></div>
  </div>
  <div class="fg-item" data-cat="design">
    <div class="t">✏️</div>
    <div class="c"><h4>Poster Series</h4><small>Design</small></div>
  </div>
</div>
05 — Show Your Projects

Hover Reveal Cards

Keep cards clean, then reveal the description on hover. The image zooms slightly and the text slides in — a small touch that feels polished.

Reveal on hover HOVER

Aurora

A full checkout redesign that recovered lost sales.

Lumen

Data dashboards that make numbers make sense.

Northwind

A storefront built for speed and clarity.

HTML
<div class="reveal-card">
  <div class="bg"></div>
  <div class="info">
    <h4>Project name</h4>
    <p>Hidden until hover.</p>
  </div>
</div>
06 — Go Deeper

Case Study Breakdown

The most valuable thing on a portfolio. Don't just show the final screen — tell the story: the role you played, and a clear Problem → Process → Solution. This is what turns a gallery into a portfolio.

Full project write-up CASE STUDY
UXWeb App2026

Redesigning the Aurora checkout

A cart that lost shoppers at the final step. I rebuilt the checkout into one focused flow — and recovered the drop-off.

My roleDesign & Front-end
Timeline6 weeks
ToolsFigma, React
TeamSolo + 1 PM
1

The problem

68% abandoned a cluttered 4-page checkout — too many fields, no progress, hidden costs.

2

The process

Mapped the flow, ran a 5-user test, prototyped a single page with inline validation and a sticky summary.

3

The solution

Shipped a one-screen checkout with autosave, clear errors, and upfront totals — four steps down to one.

HTML
<article class="cs">
  <div class="cs-cover"><img src="cover.jpg" alt=""></div>
  <div class="cs-body">
    <h3>Project title</h3>
    <p class="lede">One-line outcome.</p>

    <!-- what YOU did -->
    <div class="cs-meta">
      <div><small>My role</small><span>Design &amp; Build</span></div>
      <div><small>Timeline</small><span>6 weeks</span></div>
    </div>

    <!-- tell the story: Problem → Process → Solution -->
    <div class="cs-steps">
      <div class="cs-step"><div class="num">1</div>
        <div><h4>The problem</h4><p>68% abandoned a cluttered 4-page checkout.</p></div></div>
      <div class="cs-step"><div class="num">2</div>
        <div><h4>The process</h4><p>Mapped the flow and prototyped a single page.</p></div></div>
      <div class="cs-step"><div class="num">3</div>
        <div><h4>The solution</h4><p>Shipped a one-screen checkout with upfront totals.</p></div></div>
    </div>
  </div>
</article>
08 — Go Deeper

Results & Impact

Employers want outcomes, not just visuals. Back up a project with the numbers it moved — conversions, load time, ratings. Even class projects can show before/after metrics.

Outcome metrics IMPACT
1.2s
Page load — down from 5.4s
9 / 10
Test users finished the task
4 → 1
Steps to check out
100
Lighthouse score
HTML
<div class="pf-impact">
  <div class="stat"><div class="n">1.2s</div>
    <div class="l">Page load — down from 5.4s</div></div>
  <div class="stat"><div class="n">9 / 10</div>
    <div class="l">Test users finished the task</div></div>
  <div class="stat"><div class="n">4 → 1</div>
    <div class="l">Steps to check out</div></div>
  <div class="stat"><div class="n">100</div>
    <div class="l">Lighthouse score</div></div>
</div>
10 — More Layouts

Split Feature

A big visual on one side, the story on the other. Great for spotlighting a single standout project — the image carries the impact while the text gives context.

Two-column spotlight SPLIT
FeaturedWeb App

Lumen Analytics

A dashboard that turns raw numbers into clear, glanceable insight — rebuilt for speed and clarity.

View case study
HTML
<div class="split-feat">
  <div class="vis"><img src="project.jpg" alt=""></div>
  <div class="txt">
    <div class="tags"><span>Featured</span><span>Web App</span></div>
    <h3>Project name</h3>
    <p>What it is and why it matters.</p>
    <a href="#">View case study →</a>
  </div>
</div>
12 — Full Examples

Minimal Portfolio

A complete one-page portfolio in the editorial style: a confident type-led intro and a clean numbered index of work. Lots of whitespace, no clutter — lets the projects speak.

Whole page — type-driven MINIMAL

Designer & front-end developer making calm, useful interfaces.

Currently crafting design systems and shipping them in React. Previously at two startups.

01

Aurora Checkout

UX · 2026
02

Lumen Analytics

Product · 2025
03

Northwind Store

E-commerce · 2025
HTML
<div class="bar">
  <div class="logo">Your Name</div>
  <nav><a href="#">Work</a><a href="#">About</a></nav>
</div>
<header class="hero">
  <h1>A confident one-line intro.</h1>
  <p>What you do, in a sentence.</p>
</header>
<div class="work">
  <a class="row"><span class="n">01</span>
    <h3>Aurora Checkout</h3><span class="meta">UX · 2026</span></a>
  <a class="row"><span class="n">02</span>
    <h3>Lumen Analytics</h3><span class="meta">Product · 2025</span></a>
  <a class="row"><span class="n">03</span>
    <h3>Northwind Store</h3><span class="meta">E-commerce · 2025</span></a>
</div>
13 — Full Examples

Bold & Colorful

A high-energy portfolio: a dark canvas, oversized headline with a pop of accent, and a grid of vivid project blocks. Great for showing personality and creative range.

Whole page — vivid blocks BOLD
Available for work

I build loud,
memorable websites.

Aurora
Brand Kit
Arcade
HTML
<div class="top">
  <div class="logo">YOUR·NAME</div>
  <div class="pill">Available for work</div>
</div>
<header class="hero">
  <h1>I build <em>loud</em> websites.</h1>
</header>
<div class="grid">
  <a class="blk"><i class="ph-duotone ph-rocket-launch"></i>Aurora</a>
  <a class="blk"><i class="ph-duotone ph-paint-brush"></i>Brand Kit</a>
  <a class="blk"><i class="ph-duotone ph-game-controller"></i>Arcade</a>
</div>