Rebuilding my portfolio in public
After years on WordPress, I decided to rebuild thabopali.co.za as a custom Next.js site. Here is why, and what I learned along the way.
For the better part of a decade, my portfolio lived on WordPress. It worked. Clients found me, the contact form sent emails, and the orange shapes in the background made the site feel like mine.
But somewhere between writing my fifteenth Nintex workflow at the university and shipping the third client site of the year, I started feeling something uncomfortable: the site selling me to clients didn't represent how I actually build things.
What was wrong with the old site
The old site had three problems I couldn't ignore:
- The hero said "Back-end Developer" while my services page sold full-stack work. Mixed signals.
- The skills page used those bar charts that show "Python: 75%" — a UX pattern that signals junior to anyone evaluating me seriously.
- The portfolio was a grid of screenshots with no story. For an attorney trying to decide whether to hire me, screenshots aren't enough.
Picking the new stack
I went with Next.js 14 + TypeScript + Tailwind. Predictable choices, but predictable for good reasons:
- Server-side rendering means good SEO without me doing anything clever
- TypeScript catches the dumb mistakes before they ship
- Tailwind keeps me from yak-shaving on CSS architecture
For motion I'm using Framer Motion for component-level stuff and GSAP for scroll-driven animations. There's a subtle Three.js particle field on the hero — restrained, not flashy.
// The hero canvas is lazy-loaded so it doesn't block initial paint
const HeroCanvas = dynamic(
() => import('@/components/three/hero-canvas').then((mod) => mod.HeroCanvas),
{ ssr: false, loading: () => null }
);What's coming next
Over the next few weeks I'll be writing case studies for real client work — ES & Associates, CHEMS Hub, and RarityByU — and starting a podcast on the side. Both will live here.
If you're a developer thinking about rebuilding your own portfolio, or a business wondering whether custom is worth it over a template, I'd love to hear from you. The contact page is wired up and works.
A portfolio isn't where you list what you can do. It's where you prove it.
— Me, to myself, around 2am one Tuesday
More soon.