Six Rebuilds, One Domain: A Field Guide to Every Mistake I Made Designing My Own Website
Version One: The Flash Era Disaster (2011)
My first portfolio was built in Flash. I was twenty, I thought intro animations were personality, and I genuinely believed visitors would sit through a fifteen-second loading screen to watch my name assemble itself letter by letter.
Nobody sat through it. My bounce rate was something like 90%, which at the time I blamed on 'the algorithm' — a thing I did not understand and could not name. The site worked exactly as designed: it kept people out.
What it got wrong: I designed for me, not for the recruiter who had thirty seconds and a dial-up-adjacent hotel Wi-Fi connection.
Version Two: The WordPress Theme Everyone Recognized
By 2014 I'd learned my lesson about novelty and overcorrected into blandness. I bought a premium WordPress theme — you know the one, with the full-width hero image and the three-column services section — and populated it with stock photos of people pointing at whiteboards.
It loaded fast and converted terribly. The problem wasn't the theme; it was that my site looked identical to ten thousand other portfolios, including several of the people I was competing with for freelance work. One client literally told me he'd confused my site with another developer's.
What it got wrong: professional is not the same as memorable.
Version Three: The Bootstrap Incident
Version three was a static site I hand-rolled with Bootstrap 3, and I was so proud of those default blue buttons. The design was functional, the code was clean, and the content was buried under a navigation scheme that made sense only to me. My 'Writing' section was three clicks deep. Nobody found it, including — I checked the analytics — me, on more than one occasion, when I needed to link to an old post.
What it got wrong: information architecture is a design decision, and I made it by vibe.
Version Four: The Over-Engineered Next.js Monolith
This is the one I'm least proud of, mostly because I should have known better. Around 2019 I rebuilt the site as a fully server-rendered, statically-generated, CI/CD-deployed Next.js project with a custom CMS layer, GraphQL, and a component library I wrote from scratch because 'existing UI kits felt limiting.'
It was beautiful. It was fast. It was also a maintenance nightmare that took me four months to build and made publishing a blog post feel like shipping a production release. I wrote eleven posts in two years. The friction killed the habit.
What it got wrong: I optimized the stack and starved the content. Readers don't care about your build pipeline; they care whether you published anything this quarter.
Version Five: The Minimalist Overcorrection
After the monolith burned me out, I swung hard the other way: a single HTML file, system fonts, no images, no personality. Technically, it was my best-performing site — sub-second loads, perfect Lighthouse scores across the board.
And it was boring. Dwell time cratered. People came for a résumé link and left. I had stripped out everything, including the things that made the site worth visiting.
What it got wrong: performance is a constraint, not a goal. Fast and forgettable is still forgettable.
Version Six: Where Things Stand Now
The current josephkhan.me is a static site generator with a markdown folder, a single typeface I actually like, and a homepage that's just a short intro and my five best pieces. Publishing takes about ninety seconds. I've written more in the past year than in the previous four combined.
The design lessons distilled down to three things:
- Reduce publishing friction above all else. The best CMS is the one you'll actually use at 11 p.m. on a Tuesday.
- Put your best work one click from the homepage. Not three clicks. One.
- Have an opinion somewhere visible. Every version that failed was either trying to impress other developers or impress nobody at all.
The Pattern Across All Six
Looking back, every rebuild chased a technical trend while the actual problem — unclear voice, buried content, too much friction — stayed constant. The stack was never the bottleneck. I was.
If you're on rebuild number four of your own site, this is your sign to stop redesigning and start writing. The seventh version of my site will probably happen someday, but it'll be because I have something new to say, not because a new framework dropped.
Probably.