Why I Rebuilt bsoong.com as a CMS
· Brandon Soong · Updated September 13, 2026
I want to be the most famous Brandon Soong on the internet. So I rebuilt my static portfolio as a CMS and turned myself into the test case.
A few weeks ago I had a thought that, for whatever reason, kind of stuck with me.
I want to be the most famous Brandon Soong on the internet.
I don’t really mean famous in the influencer or celebrity sense. I’m not ruling it out, but that’s not really what I’m getting at. What I’m more interested in is whether I can do it through engineering, writing, SEO, Answer Engine Optimization (AEO), and generally understanding how the internet is changing now that AI is becoming such a big part of how people actually find information.
There’s something funny to me about taking what is objectively a pretty dumb sounding goal and treating it like an engineering problem.
If I actually wanted the internet to strongly associate “Brandon Soong” with me, what would that take?
What does Google care about? What does ChatGPT care about? What does Claude care about? Gemini? Perplexity? Whatever the fuck comes next?
How much of that is traditional SEO? How much of it is good content? How much of it is structured data, links, authority, publishing frequency, or just having enough information out there for these systems to connect all the dots?
I don’t really know yet, which is mostly why I want to do it.
And the obvious place to start was bsoong.com.
The old site
I’ve had bsoong.com for a long time, but for most of that time it was basically just a portfolio.
A few projects, some information about me, my work experience, my resume, and whatever else I felt like putting on there at the time.
It was hosted on GitHub Pages and was almost entirely static. Which honestly was completely fine for what I needed it to be.
The problem was that the site was built around me barely touching it.
Every time I wanted to make a meaningful change I had to go into the codebase, change something, commit it, and redeploy.
Updating my resume meant changing the site. Adding a project meant changing the site. Changing my bio meant changing the site. Writing anything meant changing the site.
None of that is particularly difficult. I’m a software engineer. I can deploy a website.
It’s just enough friction that you don’t do it.
And I think that was the bigger realization.
If I actually wanted this website to grow with me, I needed to stop treating every content change like a software change.
At some point the idea shifted from “I should redo my portfolio” to “I should probably just build myself a little publishing platform.”
So that’s what I did.
What I actually built
The first usable version took me somewhere around eight hours.
It’s nothing insane technically, but I also didn’t want to build something I would immediately have to throw away the second I wanted to add another feature.
The site is now a full-stack Next.js app using the App Router and React Server Components. Most of the structured content lives in PostgreSQL on Neon through Drizzle. Uploaded files, like different versions of my resume, live in object storage.
There’s also an admin side of the site where I can go in and update most of the things you’re looking at without touching code. I can create or edit pages, write posts, upload files, preview things before publishing them, keep revisions, and roll things back if I screw something up.
When something is published, I’m using tag-based cache revalidation so it can show up on the public site immediately without having to redeploy the whole application.
Roughly:
Visitors / agents
│
▼
Vercel / Next.js
App Router + RSC
│ │
▼ ▼
Public /admin
pages NextAuth
llms.txt
.md / RSS
cache tags
│ │
└─────┬─────┘
▼
Neon Postgres
(Drizzle)
│
▼
Vercel Blob
(resume files)
There are probably cleaner ways I could build parts of this and there are definitely much more complicated ways I could build it.
I’m trying very hard not to do that.
I have a tendency, like I think a lot of engineers do, to turn small side projects into architecture exercises and then lose interest somewhere around the fourth abstraction layer.
For this one I mostly wanted enough structure that I wouldn’t hate myself six months from now.
The way I’ve been thinking about it is basically:
The code defines how the platform works. The database defines what the platform says.
That’s probably the most important change from the old site.
If I want to rewrite this article tomorrow, I can.
If I want to upload a new resume, I can.
If I finish something I’m working on and want to add it as a project, I can.
If I eventually want to add totally different content types, or have an AI agent managing certain things for me, I’ve at least given myself somewhere reasonable to start.
I don’t need to rebuild the website every time I decide I want the website to say something different.
Why does a personal website need all of this?
It probably doesn’t.
If the only goal here was to have somewhere to send recruiters, this would absolutely be overkill.
But I don’t really want this to just be a portfolio anymore.
I want bsoong.com to eventually become the best source of information about me on the internet.
Not LinkedIn. Not an old company bio. Not some random cached page from eight years ago.
This.
If somebody searches my name, I want this to be what they find.
And increasingly I also want this to be what machines find.
That’s probably the part of this whole thing that I find the most interesting.
The way people search for information is obviously changing pretty quickly. I know my own behavior has changed. There are plenty of things I would have Googled two years ago that I now just ask ChatGPT.
That means there’s another audience for websites now that isn’t really a human audience at all.
So while I obviously want the site to look good and be pleasant to use, I’m also thinking a lot more about what the site looks like underneath.
Structured data, metadata, canonical URLs, sitemaps, RSS, internal linking, semantic markup, stable page structures, and how all of the content relates to everything else.
If I write about something I built, I want it connected to the project.
If I have a project using a certain technology, I want that relationship to exist somewhere.
If I’ve written ten things about AI agents, that should probably tell both a person and a machine something about what I’m interested in.
None of that is particularly exciting visually, but I think it’s going to matter more and more.
The AEO part
SEO has obviously been around forever.
The AI side of this feels much less figured out.
People call it AEO (Answer Engine Optimization), GEO (Generative Engine Optimization), LLM optimization, or whatever term happens to be popular that week. I’m sure half of those acronyms will disappear at some point.
I mostly just want to understand what actually works.
What makes an AI system recognize somebody as a real entity?
How does it decide which source is authoritative?
Does structured data actually matter?
How much do backlinks matter?
Does publishing more frequently help?
How much does traditional SEO carry over into AI answers?
If there are five different pages on the internet saying five different things about me, which one wins?
And probably most importantly, how much of the advice being put out about all of this right now is complete bullshit?
Because I suspect the answer is a lot.
I work with AI enough that I don’t really want my understanding of it to stop at model APIs, agents, prompts, MCP, or whatever framework I happen to be using.
There’s a whole other problem around how these systems discover information, retrieve it, decide whether to trust it, and eventually present it back to somebody.
That feels like a really interesting thing to understand while everything is still kind of unsettled.
And instead of just reading about it, I figured I could use myself as the test case.
So Brandon Soong is the experiment now.
Why not just use an existing CMS?
I definitely could have.
If the goal was just publishing articles, there are about a million easier ways I could have done this.
WordPress, Ghost, Sanity, Contentful, Payload, whatever.
Any of those probably would have gotten me there faster.
But that also misses part of why I wanted to build this.
I want to be able to mess with everything.
I want to change the schema if I feel like it.
I want to experiment with how content connects together.
I want to build internal tools that probably make no sense for anybody other than me.
I want to play around with AI features and see what’s actually useful instead of adding AI to something just because I can.
I want to see what changes actually affect search visibility.
I want to break things.
And then I want to fix them.
This is basically a permanent side project that happens to also be my website.
Which is much more interesting to me than just having a portfolio.
I also need to actually write things
This is probably the other major reason I built it this way.
I’ve spent years building stuff and very little time actually writing about any of it.
There are projects I’ve worked on, systems I’ve designed, interviews I’ve completely bombed, things I’ve built that worked really well, and things that I thought were great ideas that absolutely were not.
Most of that just exists in my head.
And I think I’ve always had this problem where I assume something needs to be particularly insightful or polished before it deserves to be published.
Which, unsurprisingly, results in me not publishing anything.
I’m trying to get away from that.
I’d rather write while I’m actually figuring things out.
Some of these posts will probably be very technical. Some will be about software engineering or system design. Some will be AI related. Some will be about random things I’m building. Some may just be me trying to work through an idea that I can’t stop thinking about.
There will probably also be things on here that I read a few years from now and think are completely wrong.
That’s okay.
I’d actually rather have a record of what I thought at the time than pretend I had everything figured out after the fact.
If I keep doing this for long enough, hopefully the site ends up being a pretty decent record of how I’ve changed as an engineer and as a person.
Where I want this to go
The funny part is I genuinely do still want to become the most famous Brandon Soong on the internet.
I know how ridiculous that sounds.
That’s partially why I like it.
It gives me this weird little north star for a bunch of things I already want to get better at anyway.
I want to write more.
I want to keep building.
I want to understand SEO beyond the surface level.
I want to understand how AI systems find and interpret information.
I want a stronger public record of the things I’ve done and the things I’m interested in.
And I want somewhere I can keep experimenting with all of that without needing it to become a startup, a business, or anything more serious than it needs to be.
Maybe this works.
Maybe none of the AEO stuff matters in the way I think it will.
Maybe traditional search still ends up being the most important thing.
Maybe another Brandon Soong has been preparing for this exact moment his entire life and I’m already screwed.
I have no idea.
That’s kind of the point.
I built the infrastructure.
Now I need to actually put things on it that are worth finding.
So this is article number one.
We’ll see what happens.
Tags: Next.js, PostgreSQL, Platform, SEO, AEO, AI, Personal Website