Vighnesh IyerLet's talk

// Portfolio01 UI/UX Design

Profile Website Design

A from-scratch rebuild of my portfolio — one design system and one case-study template for UI/UX, 3D and graphic design, with pages that load a fraction of the weight.

WebsiteIADesign system
Discipline
UI/UX Design
Category
Portfolio website
Role
Designer and builder
Tools
Figma, Astro, Pages CMS
Profile Website Design — cover

Overview

My first portfolio site did its job — it put UI/UX, 3D and graphic design work online in one place. But as the work grew, it started to get in the way: projects sat below repeated banners, 3D pages downloaded every render at once, and every change meant editing code.

So I rebuilt it from scratch. Not a new coat of paint on the old pages, but a new structure, a design system and a single template that every project now follows.

What wasn't working

The work was buried – Every inner page opened with the same "Creative Portfolio" banner and stats before the project itself, so a visitor had to scroll just to see what they had clicked on.

Numbers that couldn't be backed up – The banner claimed "25+ projects", "3 major studios" and "100% client satisfaction". The first two were loose; the last one wasn't something I could stand behind.

Heavy 3D pages – Renders were stored as SVG files wrapping an image, 1–4 MB each, and a 3D page downloaded all of them the moment it opened — even though it showed one at a time.

Inconsistent details – Contact details differed between pages; some still carried placeholder text.

Hard to keep current – Every page was a separate HTML file, each case study laid out differently, and any update meant editing code. Newer work, like TradeRake, wasn't on it at all.

Before and after

The same four pages on the old site and the new one.

Before — Home
Before — Home
After — Home
After — Home
Before — Portfolio
Before — Portfolio
After — Portfolio
After — Portfolio
Before — A 3D project
Before — A 3D project
After — A 3D project
After — A 3D project
Before — A case study
Before — A case study
After — A case study
After — A case study

The rest of the site

The same treatment carried through every page, not just the portfolio.

About – The story stayed the same, but the page got tighter: the design philosophy and career evolution now read as two short sections instead of a long scroll beside a large illustration.

Before — About
Before — About
After — About
After — About

Skills – "Skills Constellation" became "Skills & expertise". The ratings and tools are the same, but each card now puts the tool, the level and what I use it for in one place, grouped by discipline.

Before — Skills
Before — Skills
After — Skills
After — Skills

Experience – The old timeline listed projects — Profile Website, HMI, tripora — as if they were jobs, and my role at Baron Tech Labs was missing. The new timeline lists roles, employers and dates; the projects live in the portfolio.

Before — Experience
Before — Experience
After — Experience
After — Experience

Education – The old page had a typo in its heading ("Educatioal Journey") and reused the Experience page's intro and stats. The new page is a single timeline: the IIIT-B certification, my B.Sc. and the Arena Animation programme.

Before — Education
Before — Education
After — Education
After — Education

Contact – The old form had 22 fields, with phone, project title and budget all required, and two cards both titled "Phone". The new page lists four clearly labelled ways to reach me, a shorter form where only name, email, topic and message are required — with "Full-time role" as an option for recruiters — and an FAQ.

Before — Contact
Before — Contact
After — Contact
After — Contact

Graphic design – The old gallery sat below the same repeated banner as a slideshow. The new page uses the same viewer as the 3D projects, grouped by tool.

Before — Graphic design
Before — Graphic design
After — Graphic design
After — Graphic design

What changed

Work first – Each project page now opens with its title, a strip of key facts — discipline, category, role, tools — and the cover, then goes straight into the case study.

One template for everything – UI/UX case studies, 3D models and graphic design all use the same page, built from the same blocks, so every project reads the same way.

A render viewer for 3D – One large image with tabs for Final renders, Shaded and Wireframe, a thumbnail strip, arrows, keyboard and swipe, and full screen. Only the image in view downloads at full size.

Honest numbers – The stats on the home page are ones I can back up: years in production, films, my IIIT-B CGPA and the number of projects.

Built to maintain – Everything is now edited from the browser, and images take care of themselves — more on that below.

// Before → after

22.5 → 0.2 MB
downloaded when the Excavator page opens
226 → 30 MB
3D render library, before the site compresses it further
12
projects on one case-study template
0
lines of code to publish an update

// How I rebuilt it

  1. 01

    Audit

    Went through every page of the old site as a visitor would, and listed what got in the way of the work.

  2. 02

    Design system

    One dark theme with colour, type and spacing tokens, and components shared by every page.

  3. 03

    Templates

    One case-study template built from blocks — text, images, steps, results and a render viewer for 3D work.

  4. 04

    Content and speed

    Moved editing into a CMS, converted every image, and made the build compress what I upload.

Design system

Everything on the site comes from one small system, so a new page or project looks right without being designed from scratch.

Colour – A dark, cinematic base with two accents: violet for actions and emphasis, cyan for status, focus and anything interactive. Fourteen colour tokens in total, plus two glows.

Type – Space Grotesk for display headings, Inter for reading, and JetBrains Mono for labels, numbering and metadata — the mono labels give every page the same technical, production-credits feel.

Spacing and shape – A 4-pixel spacing scale, three corner radii and a 1,200-pixel content width, with a faint 48-pixel grid behind each page header.

Components – Buttons, tags, filter chips, panels, stats and a timeline, shared by every page — and the set of case-study blocks that every project is built from, shown in the last tab.

Everything below is live — real colours, fonts and components, read straight from the stylesheet, so it can never drift out of date. The same system also has its own page.

// 01Colour
Surfaces
Page, raised panels, wells and the lit purple panel
--surface#0a0612
--surface-raised#130c20
--surface-sunken#06030b
--violet-deep#240b42
Lines
Hairlines and stronger borders
--line#251a38
--line-strong#3a2b55
Ink
Text, from headings to hints
--ink#ece6ff
--ink-muted#a397bd
--ink-faint#6c5f86
Accent
Primary actions, emphasis and glow
--accent#b026ff
--accent-text#c45cff
--accent-soft#22093d
Cyan
Status, focus, numbering and interactive states
--cyan#22e6ff
--cyan-soft#062530
--glow-accent
--glow-cyan
// 02Typography
Display · Space Grotesk · 600
Cinematic vision
Where craft meets UX
Section heading
Body · Inter · 400 / 500
Large intro text — 18 / 30. Used for page introductions and summaries.
Body text — 16 / 26. Used for case-study paragraphs, descriptions and everything in between.
Mono · JetBrains Mono · 500
// Labels, numbering, tags and metadata — 12 / 16, uppercase, tracked
// 03Spacing & shape
Spacing — 4px base
--space-14px
--space-28px
--space-312px
--space-416px
--space-624px
--space-832px
--space-1248px
--space-1664px
--space-2496px
--space-32128px
Radius
--radius-sm4px
--radius-md10px
--radius-pill999px
Layout
Content up to 1200px wide, reading column 680px, gutters 48px (16px on phones), and a 48px grid behind every page header.
// 04Components
Buttons
PrimarySecondaryGhost →
Tags, status & filters
Open to workFigmaResearch
All projectsUI/UX3D
Panel
Raised surface with a hairline — cards, facts and steps.
// Lit panel
Deep violet with the accent glow — goals, callouts and calls to action.
Stat
3+
With a cyan dot
4.0
Mono label
10+
Hairline grid
12
Timeline
Now
Latest item
Cyan dot marks the most recent
Earlier
Earlier item
Violet dots and a fading rail
// 05Case-study blocks
Every project page is written in the CMS and built from the same set of blocks, placed in the text with a simple marker.
01
Text
Paragraphs, lists, bold and links
02
Image
Caption, alt text, border on/off, full or content width, optional full-size version
03
Two images
Side by side, click to view
04
Before / after
A pair that opens with Before, After and a drag-to-compare view
05
Gallery
A grid of images, with multi-select upload
06
Render viewer
Tabs per render type, thumbnails, keyboard, swipe and full screen
07
Design system
Colours, type, spacing and components — this section
08
Process steps
A numbered row of 2–4 steps
09
Results
Big numbers with labels
10
Callout
A lit panel for goals and problem statements
11
Quote
User feedback or an insight
12
Video
YouTube, Vimeo or a video file
13
Divider
A hairline between sections

Under the hood

A portfolio only stays current if updating it is easy, so the parts nobody sees got as much attention as the pages.

A CMS instead of code – Every page is edited in Pages CMS from the browser. Case studies are built from blocks — text, images, before / after comparisons, galleries, a 3D render viewer, process steps, results and callouts — and each block is placed in the write-up with a simple marker.

// From edit to live

  1. 01

    Edit

    Change text or upload images in Pages CMS, from the browser.

  2. 02

    Save

    Every save is committed to GitHub automatically.

  3. 03

    Build

    The site rebuilds — images are checked, compressed and given thumbnails.

  4. 04

    Live

    The update is on the site about a minute later.

Media libraries – Uploads, 3D renders and graphic design each have their own library, with a folder per 3D project.

Automatic image optimisation – Every time the site publishes, large images are resized and converted to WebP, and the 3D viewer gets small thumbnails. The heaviest images on the site — 38.9 MB of them — are served as 10.8 MB.

An upload guard – The CMS can't limit file size, so the build does: anything over 5 MB stops the publish and names the file, and every image field says what size to aim for.

The stack – Astro builds a fast static site, Pages CMS edits it through GitHub, GitHub Actions rebuilds on every save and GitHub Pages hosts it — no server or database to look after.

Migrating the old work – The old site stored every render and graphic as an SVG file wrapping a picture. A small script pulled the picture out of each one and saved it as a JPG — 139 images, from 250 MB to 33 MB — so nothing had to be re-exported by hand.

Click to view, drag to compare – Any case-study image opens full size, and before / after pairs open with Before, After and Compare views — like the ones on this page. Comparisons are their own block in the CMS, so any future project can use them.

Image viewer comparing the old and new home pages with a draggable line
Before / after, opened in the viewer — drag the line to compare

A viewer for 3D work – One large render with tabs for the final, shaded and wireframe passes, a thumbnail strip, keyboard and swipe, and full screen.

Render viewer with tabs for final, shaded and wireframe renders and a thumbnail strip
The 3D render viewer on the Quad Bike page

What I learned

Audit your own work like a stranger would – Clicking through the old site as a recruiter would made the problems obvious in minutes; I had stopped seeing them as the author.

Performance is part of the design – A 3D page that downloads 22 MB before showing anything is a design problem, not just a technical one. Fixing how images load changed the experience more than any visual change.

A system beats a collection of pages – Once the template and blocks existed, adding a new project became a content task rather than a design task.

Design for the person who maintains it – That person is me. A site I can update in minutes is a site that stays current.

Like what you see?

Let's talk about the role or project — I reply within 24 hours.