Writing
SubscribeFrom CI Checks to a Coordinated Production Release
Scopebase already checked changes in CI. Its new release workflow prepares the web app and worker together, binds evidence to one commit, and checks readiness before resuming reviews.
“No Findings” Can Mean Four Different Things
An empty findings list can follow a complete, partial, skipped, or failed review. Here's how Scopebase keeps those outcomes distinct instead of showing false confidence.
The Model Call Timed Out. What Do You Charge?
Why Scopebase separates customer credits from provider spend, reserves each model attempt, and keeps unknown usage from silently counting as zero.
GitHub Timed Out. Did the Review Still Get Posted?
A timeout after a GitHub write leaves the outcome unknown. Here's how Scopebase checks for an existing review before retrying, and why recovery can trade availability for avoiding duplicates.
A Queue Message Can Disappear. The Review Still Has to Run.
How Scopebase recovers missed queue notifications and stops workers from saving results for an outdated pull request revision.
How Much of a Repository Should an AI Reviewer Read?
How Scopebase selects changed code and a bounded set of local dependencies before sending source to a model, and what the limits leave out.
How I Built a RAG Tutor That Can't Hallucinate
Most 'AI on your course' features bolt a generic chatbot onto a sidebar and let it make things up. Here's how I built a tutor that only answers from the course's own videos - and gates retrieval on enrollment in the same query.
Why I Used Two Queues Instead of One
One worker pool, two very different jobs - a slow CPU-bound video transcode and a fast I/O-bound embedding call. Put them in the same queue and they starve each other. Here's why I split them, and the systems lesson underneath it.
Docker: Single-Stage vs Multi-Stage Builds
One Dockerfile ships a 1.2GB image, the other ships 180MB - same app. Here's the difference between single-stage and multi-stage builds, and why multi-stage is almost always the right default.
Building an API Client for the Express Backend
A small fetch wrapper that keeps API calls predictable—handling JSON, errors, and cookies in one place.
How I Built Elo-Based Matchmaking for a Real-Time Chess App
Building fair matchmaking is harder than the math. Here's how I implemented Elo ratings and a dynamic queue in PlayChess - K-factors, range expansion, and the edge cases that bit me.
How I Built and Published an npm CLI Tool
BuildElevate started as a personal frustration with repetitive project setup. Here's the full story - architecture, mistakes, lessons, and what it took to publish my first npm package.
Agentic Coding > Vibe Coding
Both put AI at the keyboard, so they get lumped together. Here's why agentic coding - plan, context, review, verify - beats vibing your way through code you'll have to maintain.
Building Production-Ready Auth with Better Auth
Most auth tutorials stop at sign-in and sign-up. Here's how I built the full thing - email verification, Google OAuth, TOTP 2FA, rate-limited emails, and account linking - using Better Auth in a Next.js monorepo.
How Apps Check If a Card Number Is Valid
Ever typed a wrong card number and the form caught it instantly - before even hitting a server? Here's the elegant algorithm behind that.
How Apps Know Your Password Is Weak
That red 'password too weak' warning didn't come from nowhere. Here's the logic behind password strength checkers - entropy, dictionary attacks, pattern detection, and breached password lists.
What Is a Monorepo? A Simple Explanation
Multiple apps, one repository. Here's what a monorepo actually is, why teams use them, and how Turborepo makes them fast enough to be worth it.
A Practical Git Workflow for Modern Teams
A concise Git workflow to help teams collaborate efficiently and keep the codebase clean.
REST API Design Principles That Age Well
Practical REST API principles for building clear, maintainable, and predictable services.
Hello World
My first blog post.