Project 11

skdesign.online — Designer Portfolio

My first shipped client work: an editorial, monochrome portfolio for fashion designer Saliha Kılıç, live at skdesign.online — built to put 124 pieces of her real work in front, with GSAP scroll set-pieces that stay out of their way.

§ 01 Problem

A fashion designer graduating with a body of real work — textile patterns, fashion illustrations, design croquis — and nowhere to show it: the pieces lived as raw photos in a zip file. The brief was a portfolio where the work is the hero and the web design disappears behind it. And unlike every other project on this page, the acceptance test wasn't my own judgment — it was a real client saying yes or no.

§ 02 Approach

  • A strict editorial design system where the UI stays monochrome so the work carries all the color: Playfair Display for serif headings, Inter for labels, border-radius zero everywhere, no drop shadows — depth comes from 1px hairlines and tonal layers.
  • An asset pipeline instead of manual uploads: her 124 raw pieces went through sharp into color-preserved, 2000px long-edge WebP under public/works, and a typed content/works.ts — regenerated by script from the files on disk — is the single source of truth the whole site renders from.
  • One motion vocabulary on GSAP 3.15 + Lenis: SplitText line reveals for headings, clip-path wipes for editorial images, one pinned scroll set-piece per page — and the 'Seçki' page renders featured pieces on a scroll-driven 3D rotary ring. Nothing auto-rotates, and prefers-reduced-motion collapses every set-piece into a plain vertical layout.
  • Real client feedback treated as requirements, not noise: the hero felt too dark, so it became a crossfading slideshow leading with a lighter image; gallery cards clipped on short viewports, so their height became viewport-responsive; the category dial went through two redesigns before she approved it.
  • A fixed verification bar before every deploy: typecheck, lint and build green, every route returning 200, zero console errors and zero failed image loads — checked headlessly, not eyeballed.

§ 03 Outcome

Live at skdesign.online on Vercel: home, a filterable gallery of all 124 works across her four categories (Desen · Çizim · Tasarım · Materyal), the Seçki showcase, and an about page. The durable lesson was that client work inverts the definition of done — 'done' stopped being when I was satisfied and became when she was.

124

real works shipped through the sharp → WebP pipeline (content/works.ts)

0

console errors / failed image loads across all routes at deploy check

§ 04 For the record

§ 05 Evidence

evidenceLive — skdesign.online
evidencepackage.json — Next.js 15, React 19, Tailwind v4, GSAP 3.15, Lenis, sharp
evidencecontent/works.ts — 124 typed works, regenerated from public/works (44 MB WebP)
evidencecomponents/couture/CoutureRing.tsx — scroll-driven 3D ring, reduced-motion stack fallback
skdesign.online home — editorial monochrome hero over the designer's work
fig. 1skdesign.online home — editorial monochrome hero over the designer's work
Collections — masonry gallery of 124 works with category dial filter
fig. 2Collections — masonry gallery of 124 works with category dial filter
Seçki — dark showcase intro with scroll-driven 3D ring of featured pieces
fig. 3Seçki — dark showcase intro with scroll-driven 3D ring of featured pieces
About page — designer portrait and grounded bio
fig. 4About page — designer portrait and grounded bio