← All articles
How to Build an Award-Winning Portfolio Site
A creative developer's playbook for how to build an award-winning portfolio — what Awwwards judges reward, the Next.js + GSAP + WebGL stack, and how to submit.

Everyone who has scrolled an Awwwards Site of the Day has had the same thought: how do I build one of these? The honest answer is that an award-winning portfolio is not a template you buy or a pile of animations you bolt on — it is a single, opinionated idea executed with enough craft that it survives a panel of 18+ jurors scoring it on four axes. This guide is the playbook I actually use to ship Awwwards portfolio sites: what judges reward, the Next.js + GSAP + WebGL stack behind the motion, the process, the mistakes that quietly tank a score, and exactly how to submit.
I write this as the practitioner. I'm Hon Tran — a creative developer and Awwwards jury member, the first Vietnamese developer to win an international web award, and a two-time Awwwards Independent of the Year. So this isn't reverse-engineered from screenshots; it's how the scoring works from inside the panel.
What "award-winning" actually means (the scoring)
Before you write a line of code, understand how a site is judged. On Awwwards, an approved submission goes to a minimum of 18 jurors who score it across four weighted criteria:
| Criterion | Weight | What it really measures |
|---|---|---|
| Design | 40% | Visual craft: typography, layout, color, composition, art direction |
| Usability | 30% | Can a first-time visitor navigate, load fast, and not get lost |
| Creativity | 20% | Originality of concept and execution — have they seen this before |
| Content | 10% | Quality and relevance of the actual work shown |
The three scores furthest from the average are dropped to kill outliers, voting runs ~5 days, 6.5+ earns an Honorable Mention, and the top score takes Site of the Day. (Source: the Awwwards evaluation system.)
The non-obvious lesson: Design + Usability is 70% of your score. Newcomers over-index on Creativity — a wild WebGL gimmick — and lose on the fundamentals. A groundbreaking site that takes five seconds to load or confuses navigation scores lower than a clean, fast, beautifully typeset site with modest ambition. Build the fundamentals first; spend the creativity budget where it earns the most.
Step 1 — Concept before code
Every winner I've worked on started with one sentence, not a Figma file. "A portfolio that feels like flipping through a printed monograph." "An events agency site where every section is a stage." The concept is the through-line that makes art direction, motion, and copy feel inevitable rather than decorative.
Ask three questions:
- What is the one idea? If you can't say it in a sentence, the jury won't feel it.
- What is the signature moment? Every memorable site has one interaction people screenshot — the hero reveal, a displacement transition, a scroll-driven sequence. Design the rest of the site to protect that moment.
- What can I cut? Restraint reads as confidence. A jury rewards one perfect idea over five competing ones.
Step 2 — The stack that wins
There is no single "Awwwards stack," but the winners cluster hard around a few tools because they hit the performance-and-control sweet spot. Mine, and the one behind most recent SOTDs I've shipped:
- Next.js (App Router) — routing, image optimization, and SSR/ISR for fast first paint and SEO.
- Lenis — normalized smooth scrolling that everything else hooks into.
- GSAP + ScrollTrigger — the motion engine: pinning, scrubbing, parallax, timelines.
- React Three Fiber / three.js + GLSL — WebGL for displacement transitions, particles, and 3D where it earns its weight.
The single most important architectural decision is to drive one animation loop. Don't let Lenis, GSAP, and your WebGL render each run their own requestAnimationFrame — sync them so scroll position, DOM tweens, and shader uniforms all update on the same tick:
import Lenis from "lenis";
import gsap from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
gsap.registerPlugin(ScrollTrigger);
const lenis = new Lenis({ duration: 1.1, smoothWheel: true });
// Drive Lenis from GSAP's ticker — one clock for the whole site
lenis.on("scroll", ScrollTrigger.update);
gsap.ticker.add((time) => lenis.raf(time * 1000));
gsap.ticker.lagSmoothing(0);
That single change is the difference between buttery and janky on a motion-heavy page. For the full setup, see my guide on smooth scroll in Next.js with GSAP and Lenis.
Step 3 — Motion that scores, not motion that distracts
Usability is 30% of your score, so motion has to serve navigation, not fight it. The patterns that consistently land with jurors:
- Scroll as narrative — pin a section and scrub a sequence so the user controls the pace. This is where ScrollTrigger earns its keep; I break the exact technique down in GSAP ScrollTrigger: pin, scrub & parallax.
- Considered transitions — a WebGL image displacement on hover or between projects reads as craft. Done well it's the signature moment; done gratuitously it's noise.
- Micro-interactions — magnetic buttons, custom cursors, staggered text reveals. These are cheap to build and disproportionately raise the feel of polish.
A reusable scrub timeline looks like this:
gsap.to(".hero__title", {
scrollTrigger: {
trigger: ".hero",
start: "top top",
end: "+=100%",
pin: true,
scrub: 1, // ties progress to scroll, with 1s catch-up smoothing
},
yPercent: -40,
opacity: 0.2,
ease: "none",
});
Always gate decorative motion behind prefers-reduced-motion — it's an accessibility win and a usability signal the jury notices.
const reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
if (!reduced) initScrollAnimations();
Step 4 — Performance is a judging criterion, not a chore
This is where most ambitious portfolios lose the award. A WebGL hero that drops to 20fps on a mid-range laptop reads as broken to a juror, no matter how beautiful the still frame. Treat performance as part of the design:
- Budget the main thread. Animate
transformandopacityonly — they stay off the layout/paint path. Never animatewidth,top, orbox-shadowon scroll. - Lazy-init WebGL. Mount three.js scenes only when in view (IntersectionObserver) and pause the render loop when off-screen.
- Cap pixel ratio.
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))— rendering at 3x on a phone melts the GPU for no visible gain. - Ship less JS. Dynamic-import heavy modules; keep the first interaction fast. Aim for an LCP under 2.5s even with the motion.
A site that holds 60fps on a $400 phone will out-score a prettier one that stutters. Judges browse on real devices.
Step 5 — The work itself (content, 10% but decisive)
Three exceptional case studies beat twelve thumbnails. For each project: show the problem, your role, the craft, and the outcome. Write real copy — jurors read it. A focused archive also helps you tell a coherent story; if you want to see how I structure a single deep case study, read the Iventions award-winning events website case study.
Common mistakes that quietly kill the score
- Animation without hierarchy — everything moves, so nothing matters. Motion should direct the eye.
- Ignoring mobile. A huge share of jury (and PRO-user) traffic is mobile. A desktop-only masterpiece with a broken phone layout caps at an Honorable Mention.
- Slow loads disguised as "intros." A 6-second loader is not art direction; it's a usability penalty.
- Derivative concepts. Borrowing this year's trend (the same horizontal-scroll-gallery everyone shipped) tanks the Creativity score. Originality is the whole point.
- No accessibility floor. Missing focus states, no reduced-motion path, poor contrast — small things the jury reads as carelessness.
How to submit to Awwwards
- Have a PRO account and submit the live, production URL (not staging).
- Pick the right category and fill in the credits — designer, developer, studio. This matters for the developer/jury awards.
- Submit early in the week so your 5-day voting window gets full traffic.
- Make sure it's flawless on submission day — jurors score the live site, so deploy your final build before you submit, not during voting.
- Have your team and PRO contacts ready. A strong jury score plus 10+ PRO-user votes can clinch a same-day SOTD.
Prefer to commission one?
Building an award-caliber site is a serious time investment — weeks of motion, WebGL, and performance work on top of the design. If you'd rather skip the learning curve and ship something that competes for an award, that's exactly what I do for studios and brands. See my services or browse the projects archive to gauge the level. For more on the role itself, here's what a creative developer is and when you need one.
FAQ
How long does it take to build an award-winning portfolio?
Realistically 4–8 weeks of focused work for a solo developer: roughly one week on concept and design direction, two to four on build and motion, and a final week on performance, polish, and cross-device QA. The polish week is non-negotiable — it's where Honorable Mentions become Sites of the Day.
Do I need WebGL to win an award?
No. Plenty of SOTDs are pure CSS and GSAP with exceptional typography and motion. WebGL helps you stand out on Creativity, but it only pays off if it serves the concept and holds 60fps. A flawless 2D site beats a janky 3D one every time.
What's the difference between an Honorable Mention and Site of the Day?
Both come from the same jury vote. A score of 6.5+ earns an Honorable Mention; Site of the Day goes to the single highest-scoring submission of the day. The gap is almost always usability and performance polish, not raw creativity.
Can a portfolio site win, or only client work?
Self-initiated portfolios win regularly — your own site is the purest demonstration of your craft, with no client constraints. It's often the strongest piece in a creative developer's profile.