Blog archive
220 of 220 articles

How I Made a Chatbot With My Knowledge: Turning My Technical Articles into a GraphRAG Assistant
As software engineers, our personal blogs and notes often end up as chronological archives — hundreds of Markdown files, JSON payloads, and code repositories scattered across years of work. Traditional vector search…
Me Against Myself: From Rebellious Idealism to Pragmatic Systems Thinking
From "your system is not open source" to "how can I change your system's properties" I have spent twelve years arguing with people who build closed systems. I did not notice, until recently, that the longest, most exhau…

Unified AI Orchestration: Setting Up 9router, Model Combos, and Cline in VS Code
When working with autonomous coding agents like Cline, managing multiple upstream AI providers — such as Google AI Studio, OpenRouter, and premium OAuth subscriptions — quickly becomes a maintenance bottleneck. Rate…

Complete Technical Migration Strategy: Migrating Legacy Django Auth to Keycloak & OpenFGA via ETL
A production-ready, four-phase ETL strategy for migrating legacy Django authentication to Keycloak and fine-grained authorization to OpenFGA.

From 3NF MySQL to Fast Search: Building a CDC-Powered Read Model
Normalized MySQL is great for writing data correctly. It’s not great for serving it fast. Once a project entity spans tasks, members, documents, orders, and comments, every “project overview” request turns into a wall o…

Architecting Search Engines: A Deep Dive into Meilisearch Internals, Vector Retrieval, and Algolia
The design of application search has undergone a fundamental transformation over the past decade. Traditionally, software architectures relied on either SQL relational string operations (LIKE '%term%') or heavy analytic…

Architecting an Open-Source Search Engine: From Algolia Internals to Vector Similarity and Qdrant
High-performance discovery platforms demand sub-50ms query latency, search-as-you-type prefix matching, real-time data synchronization, and semantic vector retrieval. Commercial SaaS solutions like Algolia have long dom…
How an AI Prompt Turned a Complex Multi-Database ETL Project Into Hours of Work
In large organizations, data rarely lives in one place. Some information is stored in Oracle databases, while other datasets live in PostgreSQL.

When Your Domain Talks to Stripe, A DDD Cautionary Tale
A real-world dissection of a circular dependency in a billing module, and how Domain-Driven Design gives you the vocabulary — and the tools…

How I Use AI to Build Production-Ready GraphQL Resources Faster
A practical workflow with Go, PostgreSQL, sqlc, gqlgen, and architecture-aware prompting

Authentication & Authorization: RBAC, ReBAC, ABAC, and PBAC Explained
From “who are you?” to “what can you do?” — a complete guide to modern access control models, with real examples using CASL, Keycloak, and…
Git Reset: Recovering From Unstable AI Code Contributions
The rise of AI-powered development and "vibe coding" has dramatically changed how we build software. Today, tools like GitHub Copilot, ChatGPT, Claude, Cursor, and other AI assistants can generate features, fix bugs, an…

Keycloak + OpenFGA: A Practical Integration Guide
Learn how to combine Keycloak authentication with OpenFGA’s relationship-based authorization to build scalable, fine-grained access control for modern applications.
Deploying a Lovable (TanStack Start) App with GitHub Actions — the Real Story
Deploying a Lovable (TanStack Start) App with GitHub Actions — the Real Story Lovable is a great way to scaffold a TanStack Start app fast. But the moment you want to ship it yourself — on your own domain, through your…

How Domain Boundary Violations Slowly Destroy Your Codebase
Have you ever opened a “service” file and seen it reach deep into three or four other domains? Ever had to add a workaround like…
The Entity You Modeled Isn't the Entity That Persists
A recurring architectural mistake — and the state machine pattern that fixes it. A pattern you've probably seen before There's a particular kind of mess that shows up in almost every system that models a multi-stage bus…
One Door, Two Mechanisms: When Your Domain Model Quietly Forks Itself
I want to talk about a bug that, on the surface, looked trivial. An endpoint was missing.
Understanding Server-Sent Events (SSE): Architecture, Authentication, and Testing in NestJS
Introduction Modern web applications often need real-time communication. Examples include: Notifications Chat applications Live dashboards Stock prices Progress tracking Monitoring systems Most developers immediately th…
When Medium's Bots Fear Your Writing: Why I'm Leaving After 6 Years and 200 Articles
Six years. Two hundred articles. Technical writing about software architecture, data pipelines, and the tools I work with every day.

What Happens When You Hire a Junior Who Vibe Codes as a Senior Engineer
On the difference between generating solutions and understanding problems