001

Creative Portfolio Template

£20 or the whole Vault, £79.20

A complete one-page studio portfolio built from GSAP Vault effects: split-text hero, client logo marquee, stagger grid work section, pinned horizontal case studies, count-up stats, and magnetic buttons.

ScrollTriggerSplitText Lenis beginner
9 more details
text-animationstaggerhorizontal-scrollpinningscrubinfinite-loopcount-uphover-effectscroll-reveal

This template reads better at your own screen size than in the frame below:

Updated

About this template

A production-ready one-page portfolio template for studios, freelancers, and agencies, with six GSAP Vault effects composed into a site with a real art direction: a Klein blue hero slab, editorial serif typography, and poster-style project artwork.

Read the full template overview

The hero headline reveals with masked SplitText characters, a seamless marquee loops six placeholder client logos, project cards stagger in with a clip reveal, case studies pin into a horizontal scroll, stats count up on entry, and every call to action is magnetic.

Swap the placeholder text, logos, and artwork for your own content and deploy anywhere as static files.

Creative Portfolio Template - website template preview

What's included

9 items
  • Complete deployable one-page site: nav, hero, work grid, case studies, stats, studio, and contact sections
  • Masked SplitText hero reveal with staggered character rise
  • Seamless client logo marquee with six styled placeholder wordmarks, adjustable speed and direction
  • Grid-aware stagger reveal on the project cards with clip-path wipe
  • Pinned horizontal case-study scroll with scrub progress bar and keyboard support
  • Count-up stats with locale-aware formatting, prefixes, and suffixes
  • Magnetic buttons and links that pull toward the cursor
  • Lenis smooth scrolling wired in and fully optional
  • Accessible: reduced motion gets a complete static page, focus mirrors hover throughout

Perfect for

5 use cases
  • Freelance designer or developer portfolios that need to stand out
  • Small studio and agency sites with case-study storytelling
  • Photographer and creative director showcases
  • A launch-ready starting point for client portfolio projects
  • Learning how GSAP Vault effects compose into a full page

How it works

4 sections

Structure

One script initialises every section with a single setup and teardown path and one motion branch.

Hero, marquee and grid

The hero headline rises character by character from behind a mask with SplitText, the client marquee loops with no visible seam, and the work grid staggers its cards in across rows and columns.

The pinned case study

The case-study section pins with ScrollTrigger and moves its track sideways as you scroll down, the stats count up to their final figures, and the calls to action pull gently toward the cursor as it comes near.

Reduced motion

A prefers-reduced-motion branch renders the whole page static, including stacking the horizontal panels vertically.

Plugins ScrollTrigger, SplitText
Difficulty Beginner
Smooth scroll Lenis integration
Includes HTML + JS + CSS source, documentation, AI setup prompt, lifetime updates

Lighthouse, as measured

Google Lighthouse on this template's demo, from the latest scan. A measurement of the demo as shipped, not a promise for your page.

Accessibility
100
Best practices
100

No performance score, on purpose. That figure depends on how you deploy: your server's compression and caching, your CDN, the connection and the device doing the test, none of which the code controls. The same page can score very differently on two consecutive runs, so measure it where it will live.

Questions about this template

Will this work if I only have three or four projects to show?

Yes, and it is often better that way. The work grid is a plain CSS grid that reflows at any count, and the pinned horizontal case-study section is built per slide, so you delete the slides you do not need. Three strong projects in the case-study rail reads more confident than nine thumbnails.

Do I have to use the client logo marquee?

No. It ships with six placeholder wordmarks because a studio site usually wants social proof there, but the whole strip is one guarded section you can delete without touching anything else. If you keep it, swap the wordmarks for SVGs of real client marks rather than raster logos so they stay crisp.

Can I change the stats, or are they decorative?

They are real numbers you set. Each stat counts up to a value you put in the markup, with locale-aware formatting plus optional prefixes and suffixes, so you can show currency, percentages or a plain project count. If a number would be embarrassing, delete that stat rather than inflating it.

Is the contact section a working form?

No. It is a designed contact section with no backend, because a static template cannot post anywhere on its own. Point it at Formspree, Netlify Forms or your own handler, or replace it with a mailto link and your email address, which is what most freelance portfolios actually want.

Can I use this for a client's site and not just my own?

Yes. The standard licence covers unlimited personal and commercial projects, including client work, with no per-project fee. The only things you cannot do are redistribute the source itself or build a competing template product out of it.

Paid template

Purchase to unlock the code.

Buying Creative Portfolio Template opens the HTML, CSS and JavaScript source, the full documentation, an AI setup prompt for your editor, and every update we ship to it. Standard license: unlimited personal and commercial projects. Every paid product is tested for desktop and mobile layouts, reduced-motion handling, animation cleanup and keyboard controls wherever there is something to operate.

£20 Standard license, unlimited projects

Browse free effects

Or the whole library: the Vault, £79.20, one payment.

Documentation

What's Included

Code snippet omitted: it ships with the download.

Quick Start

1. Open index.html in a browser. The template is fully self-contained; GSAP, SplitText, and Lenis load from CDN.

2. Make it yours:

  • Replace the text content in index.html (studio name, projects, stats, contact details)
  • Swap the placeholder client logos: the .client-logo spans in the marquee are styled text wordmarks. Replace them with your clients' names, or drop in <img>/inline SVG logos (keep both .marquee-group copies identical so the loop stays seamless)
  • Swap the poster placeholder artwork: the .poster--klein, .poster--clay, .poster--moss, .poster--ink, .poster--stone, and .poster--bone figures are stand-ins. Replace them with background-image or drop <img> tags inside the .work-thumb / .panel-visual elements
  • Change the palette by editing the custom properties at the top of assets/style.css: --klein (the hero slab and accent), --ink, --bone, plus the poster colours --clay, --moss, --stone

3. Deploy. Static files, no build step. Any host works: Netlify, Vercel, GitHub Pages, or a plain server.

Optional: minify before you go live

assets/script.js is the readable source and is what index.html loads. It is around 14KB, which is fine to ship as-is. If you would rather serve it minified, produce it yourself once your edits are done:

Code snippet omitted: it ships with the download.

Then point the last <script> tag in index.html at assets/script.min.js. Keep script.js as the file you edit and re-run the command after each change, otherwise the two quietly drift apart.

Sections & Options

Every section is driven by data attributes and can be removed independently; the script skips anything it doesn't find.

Hero ([data-hero-reveal])

The headline splits into masked characters that rise in after fonts load. Elements marked [data-fade-up] follow with a stagger.

Marquee ([data-marquee])

Attribute Values Default Description
data-marquee-speed Any number 20 Seconds per loop (higher = slower)
data-marquee-reverse present/absent absent Reverses direction

The track holds two identical .marquee-group copies (the second is aria-hidden); keep them identical when editing content so the loop stays seamless.

Work Grid ([data-reveal-grid])

Cards marked [data-reveal-item] wipe in with a grid-aware stagger when the section enters the viewport. Add or remove cards freely; the grid stagger adapts automatically.

Case Studies ([data-hscroll])

The section pins and scrolls horizontally through .hscroll-panel elements, with a progress bar ([data-hscroll-progress]). Add panels by duplicating one; the travel distance is measured from the track. Tabbing into an off-screen panel scrolls it into view.

Stats ([data-count-stagger])

Attribute Values Default Description
data-count-stagger Any number 0.15 Delay between stats (seconds)
data-count-to Any number 0 Target value
data-count-duration Any number 2 Count duration (seconds)
data-count-prefix Any string none e.g. £
data-count-suffix Any string none e.g. % or +

Magnetic Elements ([data-magnetic])

Attribute Values Default Description
data-magnetic-strength Any number 24 Pull distance in pixels

Only active on fine-pointer devices; keyboard focus gets a subtle lift instead.

Smooth Scrolling

Lenis is included and optional. To remove it, delete the Lenis <script> tag from index.html; the template detects its absence and falls back to native scrolling.

Accessibility

  • Reduced motion: prefers-reduced-motion: reduce renders the entire page static; the horizontal case-study section stacks vertically, stats show final values, and all content is immediately visible
  • Keyboard navigation: focus mirrors hover on nav links, buttons, and cards; tabbing through case-study panels scrolls the pinned section to keep focus visible
  • Semantic HTML: nav/main/section/article/footer landmarks, real <a> elements for all interactions
  • Screen readers: the duplicated marquee copy is aria-hidden, placeholder artwork carries role="img" labels

Customisation Notes

  • Fonts: Fraunces (display serif), Instrument Sans (body), Space Mono (labels) load from Google Fonts. Swap the <link> in index.html and the --font-display / --font-body / --font-mono variables in style.css to rebrand
  • Section order: sections are independent; reorder them in index.html without touching the script
  • Adding pages: the script is idempotent per page; include the same style.css/script.js on inner pages and only the sections present will animate

Dependencies

Required:

  • GSAP 3.12+
  • ScrollTrigger plugin
  • SplitText plugin

Optional:

  • Lenis (smooth scroll, included by default)

Worked examples, the events and programmatic API, and the class reference ship with the download, alongside the full source.