How I Built This Portfolio (Without Really Knowing How to Code)
I should be upfront about something: I'm not a developer. I have a PhD in therapeutics and an MBA. My coding education consists of one undergrad Python class I barely remember and whatever I've picked up in the last year from yelling at Claude and Cursor until things work.
And yet here you are, reading this on a site I built. So let me tell you how that happened.
Why Build at All?
The easy move would have been Squarespace or a Notion site. And honestly, either would have been fine for what most people need. But I had this itch. I'd been building side projects with AI tools and I wanted a place to write about them that I actually controlled—not some platform that could change its pricing, kill its API, or bury my content in a feed.
I also wanted to learn. Building a real site felt like the fastest way to understand how the web actually works. And after five years of research methodology, I'm wired to learn by doing.
The Stack Decision
Here's what I went with and why:
Next.js because it seems to be what every serious developer recommends for React, and React is what Claude knows best. When your AI coding partner has strong opinions about a framework, it's wise to go with the flow. The App Router felt modern even though I barely understand it.
WordPress as a headless CMS because I wanted to separate content from code. The site builds statically—all the pages are generated at build time and served as plain HTML. WordPress just holds the content and serves it through an API. This means the site is fast, cheap to host, and I can write blog posts without touching code.
Tailwind CSS because writing real CSS felt like learning a second foreign language on top of JavaScript. Utility classes made sense to my brain—you describe what you want right where you want it.
Cloudflare Pages for hosting because it's free and fast. The site builds, deploys, and just works.
What Claude and Cursor Actually Did
Here's the honest breakdown:
Claude/Cursor handled about 80% of the code. Component structure, API integrations, TypeScript types, Tailwind styling, the WordPress API layer, Zod schema validation—all of that was generated by AI. I could not have written any of it from scratch.
But I made all the decisions. What pages exist, what they say, how the navigation works, the color palette, the typography, the tone of voice, what content to show and what to hide. AI generated the code; I designed the experience.
The gap is in debugging. When something broke—and things broke constantly—I couldn't always understand the error message. I'd paste the error into Claude, get a fix, apply it, and sometimes that fix would break something else. The debugging loop was the most frustrating part. AI is great at writing code. It's inconsistent at understanding why code that it wrote doesn't work.
What Was Harder Than Expected
Design decisions are exhausting. Every page has dozens of micro-decisions: how much spacing, what font size, which shade of teal, how the animations feel. AI can generate options but it can't tell you which one feels right. That's taste, and taste takes energy.
The WordPress integration was fiddly. Headless WordPress sounds clean in theory—API in, content out. In practice, you're wrestling with custom post types, ACF fields, embedded media, and authentication. It works now, but it took several rounds of "why isn't this returning the data I expected?"
Static site generation has trade-offs. Everything is fast because it's pre-built. But that means every content change requires a rebuild and deploy. It's fine for a portfolio but it took me a while to understand why my changes weren't showing up immediately.
What I Actually Learned
Building this site taught me more about software development than any tutorial could have. Not the syntax—I still barely know JavaScript. But the concepts: how components compose, how data flows through an application, why type safety matters, what "build time" vs "runtime" means, how CSS actually works.
More importantly, it taught me that the barrier between "developer" and "non-developer" is thinner than I thought. With AI tools, the constraint isn't technical ability—it's knowing what you want to build and having the patience to iterate until it's right.
The site isn't perfect. There are probably patterns in the code that would make a real developer wince. But it works, it's fast, it looks the way I want, and I understand every piece of it—even if I couldn't have written it from scratch.
That feels like enough.
The Meta Lesson
The irony of writing this post on this site isn't lost on me. I built a thing to write about building things. It's recursive and a little silly.
But that's kind of the whole point of this portfolio. I'm not trying to prove I'm a developer. I'm trying to show that I'm someone who builds things to understand them—and then writes about what I find interesting along the way.
If that resonates with you, there's more where this came from.