Starting a dev log
This is the first entry in the Imperfect Systems dev log. The plan is simple: write down what I’m building, what breaks, and what I’d do differently, in public.
Why a dev log
Most of the interesting work happens between releases. A dev log captures that middle part: the dead ends, the small wins, the decisions that only make sense once you’ve seen the alternative fail.
How this blog works
The blog isn’t bespoke. The components, the related-posts scoring, the content schema, and the syntax-highlighting config all come from a shared package, @vdaluz/astro-blog, which also powers another site. This page is mostly glue: a content collection, two route files, and a neon-on-black theme.
import { blogSchema } from '@vdaluz/astro-blog';
const blog = defineCollection({
loader: glob({ pattern: '**/*.md', base: './src/content/blog' }),
schema: blogSchema({ defaultAuthor: 'Imperfect Systems' }),
});
The components are driven entirely by CSS-variable design tokens, so the same code renders in this site’s neon-green theme and in a completely different palette elsewhere. No forks, no copy-paste.
What’s next
More posts, and probably more sites sharing the same package. For now: it builds, it’s green, and it works.
Related reading
Rebasing an affiliate PR into a build dependabot quietly broke
A grouped 12-update dependabot bump hid a Tailwind major that broke loudly and an Astro major that broke silently, triggered by one unmerged branch.
The landing page copy that competed in the wrong category
The marketing page pitched new-release tracking - an incumbent's home turf - while the view model's doc comment had the real pitch all along.
Giving every share link a face
An og:image guard that never fired, a one-line default that fixed it, a purpose-built terminal card, and a retina gotcha in headless Chrome.