Today I’m starting to switch my static site from Jekyll to Astro. Not because I’m leaving Ruby for JavaScript—I already know both. But because Jekyll has become a maintenance headache for what I’m trying to do with dcyoung.dev, and Astro just handles it better.
The Jekyll Flow Has Too Many Steps
Jekyll served me well for years, but the workflow for pulling in dynamic content has gotten awkward. To display bookmarks from my bookmarking app, here’s what currently happens:
yaml
# .github/workflows/update-bookmarks.yml
# 1. GitHub Action runs on a schedule
# 2. Ruby script hits my bookmarks API
# 3. Script writes this YAML file to _data/bookmarks.yml
- slug: ditching-ruby-for-javascript-sort-of
title: "Cool Article"
ext_url: "https://example.com"
date: "2026-02-11"
# 4. Commit the YAML file back to the repo
# 5. Cloudflare picks up the commit
# 6. Triggers a rebuild of the entire site
Blog posts work the same way, except they live in a separate repository and get pulled in through another scheduled action. It works, but there are a lot of moving parts for what should be straightforward.
What Changes with Astro
With Astro, collections can be built directly from API endpoints at build time. No intermediate YAML files, no commits, no orchestration:
javascript
// src/content/config.ts
const bookmarks = await fetch('https://api.mybookmarkapp.com/bookmarks')
.then(res => res.json());
// That's the whole flow
The awkward bit with Jekyll was that I needed the YAML file to exist in the repo for builds to work. Astro just fetches the data when it builds. It’s simpler.
The Other Stuff That Never Quite Worked
Pagination was another thing I never got working properly in Jekyll. When you’re pulling from a YAML file instead of actual posts, Jekyll’s pagination gets confused. I probably could have solved it with enough plugin configuration, but with Astro it’s built in.
And I’m hoping to finally add search to my site. With Astro’s component model and the tooling around it, it looks doable without pulling in something heavy or fighting with gem dependencies.
Why This Matters
I’m not saying Jekyll is bad. It’s served millions of sites well, including mine for years. But for my particular needs—pulling content from APIs, wanting pagination and search to just work—Astro fits better.
So yeah, technically I’m “switching to JavaScript.” More accurately, I’m switching to a tool that removes friction from my workflow.
There we have it. One less GitHub Action to maintain.
Ship it.