# Well, Well, Well... Look Who's Back
Table of Contents
Hey internet! Remember me? No? That’s fair. It’s been a hot minute since I last graced these digital pages with my sparkling wit and questionable technical opinions. Like, a really hot minute. We’re talking 2016 levels of hot minute here.
For those keeping score at home (and by “those,” I mean my mom and that one bot that keeps trying to sell me cryptocurrency), it’s been roughly 9 years since my last blog post. In internet years, that’s approximately 847 millennia. I’m basically a digital fossil at this point.
What’s a Guy Been Up to for Nine Years?
Oh, you know, just completely restructuring my entire existence. No big deal.
I packed up my life in Denver (goodbye, legal weed and reasonable rent prices) and moved to New York City. Because apparently I hate having disposable income and enjoy paying $3,000 a month for a closet that someone generously calls a “studio apartment.” The American Dream, baby!
Speaking of changes, the tech stack I knew and loved in 2016 is now about as relevant as a BlackBerry at a TikTok convention. Remember when we thought Angular 1.x was the bee’s knees? When Grunt and Gulp were the cool kids on the build tool block? When we were all convinced that jQuery would rule the world forever?
Narrator: It would not rule the world forever.
So yeah, I’ve spent the better part of a decade learning new frameworks, unlearning old ones, getting excited about the Next Big Thing™, then watching it get deprecated faster than you can say “npm install.”
Time to Get Back in the Saddle
But here’s the thing - I miss writing. I miss sharing the weird technical rabbit holes I fall down. I miss complaining about JavaScript fatigue while simultaneously contributing to it. I miss having a place to document all the dumb mistakes I make so future me can look back and say, “Oh right, that’s why we don’t do that.”
Plus, my therapist says I need more “creative outlets,” and apparently arguing with strangers on Twitter doesn’t count. Who knew?
Blogging in 2025: A Static Site Generator Renaissance
So here we are, ready to dive back into the wonderful world of blogging. But hold up - things have changed since 2016. Back then, I was using Docpad (RIP, sweet prince) and editing everything directly in my IDE like some kind of caveman.
Well, folks, it’s 2025, and we’ve got better tools now. Let me introduce you to the dynamic duo that’s going to power this comeback tour: Astro and Keystatic.
Astro: The Cool Kid on the Block
Remember when we used to debate whether to use Jekyll, Hugo, or Gatsby? Those were simpler times. Now we have Astro, and honestly, it’s pretty fantastic. Think of it as the Swiss Army knife of static site generators - it plays nice with React, Vue, Svelte, or whatever flavor of JavaScript framework is trending this week.
Setting Up Astro
Getting started with Astro is refreshingly straightforward. No need for a PhD in build configuration:
npm create astro@latest my-comeback-blogcd my-comeback-blognpm installnpm run devBoom. You’ve got a site. It’s that easy. I know, I know - in 2016, we would have needed at least 47 different config files and a sacrifice to the JavaScript gods to get this far.
Finding Astro Themes
Here’s where things get fun. The Astro ecosystem has exploded with themes, and unlike the old days where you had to build everything from scratch (uphill, both ways, in the snow), you can actually find some gorgeous pre-built options:
- Astro.build/themes - The official gallery. It’s like a candy store, but for developers.
- Built at Lightspeed - The unofficial gallery, with a lot more options for paid themes and inspiration from other frameworks, tools and
- GitHub - Search for “astro-theme” and prepare to lose several hours of your life browsing options.
- Community showcases - The Astro Discord is surprisingly non-toxic and full of people showing off their creations.
Getting Up and Running Fast
The beauty of Astro is that it’s designed for speed - both in development and in the final site. You can literally go from “I want a blog” to “I have a blog” in about 15 minutes. That’s faster than it takes to order coffee in NYC (which, coincidentally, is also overpriced).
Keystatic: Because We’re Not Animals
Now, here’s where 2025 me is smarter than 2016 me. Back in the day, I was editing Markdown files directly in Atom IDE like some sort of digital barbarian. It worked, sure, but it wasn’t exactly user-friendly. Heaven forbid I wanted to write a post on my phone or - gasp - let someone else contribute to the site.
Enter Keystatic, the CMS that doesn’t make you want to throw your laptop out the window.
Setting Up Keystatic
Keystatic is what happens when developers actually think about user experience. It’s a content management system that plays beautifully with static site generators, giving you a proper editing interface without the bloat of traditional CMSs.
npm install @keystatic/core @keystatic/astroimport { defineConfig } from 'astro/config'
import react from '@astrojs/react'import markdoc from '@astrojs/markdoc' import keystatic from '@keystatic/astro'
const isDev = process.env.NODE_ENV !== 'production';
// https://astro.build/configexport default defineConfig({ integrations: [react(), markdoc()], integrations: [react(), markdoc(), (isDev? keystatic() : false )],})Then you add a config file that’s actually readable (revolutionary concept, I know), and suddenly you have a proper editing interface. No more fumbling with frontmatter syntax or accidentally breaking your site because you forgot a closing bracket.
import { config, fields, collection } from '@keystatic/core';
export default config({ storage: { kind: 'local', }, collections: { posts: collection({ label: 'Posts', slugField: 'title', path: 'src/content/posts/*', format: { contentField: 'content' }, schema: { title: fields.slug({ name: { label: 'Title' } }), content: fields.markdoc({ label: 'Content' }), }, }), },});Integrating with Astro
The Astro-Keystatic integration is smoother than a jazz saxophonist on a Saturday night. Add the Keystatic integration to your Astro config, set up your content schemas, and you’re golden. Your content lives in your repo (because we’re not savages), but you get a proper editing experience.
With this config, as long as you’re using npm run dev you can go to /keystatic at any time, and get a handy dandy admin interface for all of your collections. There;s just an absolute ton I could say about Keystatic, but I’ll simply recommend checking out their documentation.
Making It Work with Common Themes
Keystatic uses markdoc out of the box, which some Astro themes use. Some, not all. Lots of Astro themes use mdx. From a practical point of view, it’s the difference between a .mdoc and a .md file extension. By default, Keystatic wants to try and find .mdochowever…
// ...
schema: { title: fields.slug({ name: { label: 'Title' } }), content: fields.markdoc({ label: 'Content', extension: 'md' }),},I’ll admit that took me an embarrassingly long time to find too, so, if it saved you time, you’re welcome!
What’s Next?
So that’s the plan, folks. We’re back in business with a modern stack that doesn’t make me want to question my life choices (well, not more than usual). Expect posts about the weird bugs I encounter, the cool libraries I discover, and probably some hot takes about why the newest JavaScript framework is both the best and worst thing that’s ever happened to web development.
It’s good to be back. Now, if you’ll excuse me, I need to go figure out why my CSS is mysteriously broken on mobile. Some things never change.
P.S. - If you’re reading this and thinking “who is this guy and why should I care?” - fair question. I’m just another developer yelling into the void, but at least I’m yelling with style. And if you’re reading this in 2034 and wondering why I disappeared again for 9 years, well… some patterns are hard to break.