craft·

Choose Vanilla

I built this site the “hard way” with pure HTML, CSS, and JavaScript and it was so worth it.

Vanilla Ice Cream
In developer parlance, vanilla means the basic, unadorned version of a product or language. No sprinkles, no whipped cream; just plain ol’ vanilla.

When deciding to build this site, I chose the “hard way” — pure HTML, CSS, and JavaScript. No frameworks, no drag-and-drop builders, not even a static site generator. Back then, I didn’t even know what a static site generator was.

Why would anyone do that, especially with so many shortcuts available today?

Thing is, building from scratch taught me more than any shortcut ever could. I wanted to learn. More than that, I needed to. I had a hunch this path would force me to grapple with the fundamentals, so I followed my gut, and jumped right in.

Baby Steps

I started immediately, jogging through tutorials, pasting code, breaking things and refreshing endlessly. After a few hours I took a screenshot of my first site and sent it to my brother. It was a blindingly mint green page with 3 lines of text and a button in the upper left corner. When you clicked it, a pop-up appeared: “Hi!”

First Website
First website. I was so proud.

It was suuuper basic. And I couldn’t have been prouder — my own slice of the internet, right there!

Why Not WordPress?

Seeing that a few lines of text took me hours, it was going to take days to get something presentable. Which begs the question - why not just use the tools already out there?

Fair question. If all I wanted was a blog, I could have cooked it up on WordPress or Squarespace in a couple minutes. But I had that hunch I’d use site-building skills for more than a blog. A blog is just a great place to start. Plus, if I built on someone else’s platform, it wouldn’t really be mine.

That touches on two major points for me: having the pride of craftsmanship, and complete control. Frameworks and pay-to-post sites just can’t provide that. And if I stop paying, or don’t own the source code, the whole thing would be subject to the whims of someone else’s platform.

The goal was clear: this will only be the beginning of my foray into development. So I kept going.

Repetition, Frustration, & Discovery

Treating this site as a training ground, I gave myself permission to struggle through the basics. The early days were full of discoveries: learning typography concepts like padding and margin, seeing how different browsers rendered things, and even getting a glimpse into the history of website design and the early internet.

It was amazing to be a beginner again, soaking in new information and deploying it as fast as I could. Every day I was tweaking, refining, & making small improvements that felt huge at the time.

Every improvement came with a cost, however; I’d copy my template across few pages, then realize the navigation bar needed a change. Suddenly, I had to revisit every page and make the same fix by hand.

If you’ve ever built something yourself, you know how this goes. The more it grew, the heavier each little change became. Before long, the fun, creative spark was fizzling, and most of my energy got swallowed into backtracking and untangling problems I’d created for myself.

No one wakes up thinking, “I’d love to invent a static site generator today.” Those things are born because developers, just like me, get tired of copy-pasting the same header and navigation across dozens of pages. We need a way to update a template once and have it ripple everywhere. Same thing with CSS frameworks. I ended up making my own version of both.

That’s the beauty of starting vanilla: the frustration teaches you the why behind the tools. Tools are built to solve specific problems. If you never face the problems yourself, you don’t really understand what’s being solved.

Picking Up Power Tools

Starting with vanilla HTML, CSS, and JavaScript was like learning to use a screwdriver to assemble furniture. It was slow, sometimes frustrating, but every turn taught me something about the mechanics of the craft. I learned what worked, what didn’t, and how the pieces fit together.

Once I got a grasp of the basics, I reached for the power tools. For me, that’s where large language models came in. These aren’t a replacement for understanding; they’re force multipliers. LLMs have been trained on mountains of vanilla HTML, CSS, and JavaScript. When you prompt them, they often start from these fundamentals, building on the same foundation you’re learning.

Used well, they amplify your work, letting you experiment, iterate, and scale faster than you could by hand alone. Used without a grasp of the basics, they can be frustrating, confusing, and even counterproductive.

The lesson is simple: start with the fundamentals. Struggle through the copy-pasting, the margin tweaks, & the line-height experiments. Learn what it really means to build from the atomic elements of our craft. Only then does it make sense to start using advanced tooling.

Starting with the fundamentals means that once you’ve struggled through them, you can build anything.

TL;DR

Don’t rush for the shiny tools. Start with the basics. Build something by hand, mess it up, fix it, and feel it in your hands. When you graduate to power tools — LLMs, frameworks, whatever comes next — you’ll wield them with purpose, understanding, and control. That’s when building becomes not just faster, but smarter. Choose vanilla. Master the fundamentals. Build something awesome.

Ashton