Engineering notes
Technical decisions, tradeoffs, and lessons from building smplkit.
Why We Ditched Next.js for Our Developer Console
Next.js is a great framework. We used it wrong.
JSON:API — Why We Picked a Standard Instead of Rolling Our Own
Every API needs a response format. The question is whether you design your own or adopt an existing standard.
Schema Conventions That Let AI Agents Write Correct Code
We use AI coding agents extensively at smplkit. Not as a novelty — as a core part of the development workflow. Claude Code writes implementation code, runs tests, monitors CI, and auto-remediates f...
Why Alembic Over Liquibase for a Python FastAPI Stack
If you're building a Python backend with SQLAlchemy and you need database migrations, Alembic is the obvious choice. It's SQLAlchemy's companion migration tool, built by the same author, deeply int...
Internal and External API Isolation with Dual Load Balancers
smplkit product microservices serve two audiences from the same application process: customer SDKs calling public API endpoints, and internal smplkit services calling private coordination endpoints...
Designing API Key Auth for a Multi-Product Developer Platform
API key authentication seems simple until you're designing it for a platform with multiple products, multiple environments, and two distinct types of API consumer.
Why We Chose PostgreSQL Over DynamoDB for a Multi-Cloud SaaS Platform
Every SaaS platform needs a database. For smplkit, the choice was more constrained than it first appeared — not because there aren't enough options, but because multi-cloud portability eliminated m...
Replacing Redoc with Scalar: Lessons in API Documentation UX
We made a mistake. Not a catastrophic one — the kind where you pick a reasonable tool, integrate it, and then discover through use that it doesn't fit.
Building a Consistent Icon System for a Product Suite
smplkit has fifteen products. Each one needs an icon that works at every size: the navigation flyout, the product page header, the sidebar in the developer console, marketing materials, and eventua...
SEO Fundamentals for Developer Tool Websites
Most developer tool websites get SEO wrong — not because SEO is hard, but because developers tend to either ignore it entirely or cargo-cult a list of optimizations without understanding why they m...
Email Capture for Static Sites Without a Backend
Before smplkit launched, we needed a way to collect email addresses from developers who wanted to be notified about new products. The marketing site is fully static — no server, no database, no API...
Separating Docs from Marketing: A Developer Platform Pattern
One of the earliest infrastructure decisions for any developer platform is whether documentation lives inside the marketing website or separately. The answer seems obvious — it's all content, put i...
Naming a Developer Tool: Why Lowercase Won
Naming a product is one of those decisions that feels trivial until you realize it touches everything: your domain, your npm package, your import statements, your marketing site, your legal filings...
Information Architecture for a Multi-Product SaaS Platform
Here's a question that sounds simple until you try to answer it: how do you organize a website for a product that doesn't exist yet?
Choosing AWS Amplify for a Developer Platform Marketing Site
Every developer tool needs a website. And every developer building that tool has to resist the urge to over-engineer it.