architecture
Decomposition, boundaries and deciding what should not be built.
-
Tracking Meals and Automating Shopping With an MCP Server
An MCP server for meal tracking and grocery shopping automation: planned meals minus live stock, and why the v2 rebuild derives stock from an event journal.
-
Automating Web Shop Order Processing Before the Catalogue
Web shop order processing automated first: Stripe webhook payment confirmation, stock reservations, outbox-driven DHL labels, two manual steps.
-
OpenTaberna: Headless, Open-Source E-Commerce You Self-Host
OpenTaberna is headless, open-source e-commerce: an Apache-2.0 shop API on FastAPI and PostgreSQL that you self-host with Docker Compose.
-
A Daily Digest of What Actually Got Merged, Built from MQTT and a Local LLM
paho-mqtt subscriber to SQLite plus a local LLM: a daily digest that summarises merged pull requests per repository from diff stats, no cloud API.
-
The Whole Estate in One Article: How Every Layer Fits Together
Self-hosted platform build order: why mesh, cluster, Ceph storage, identity and observability must precede model serving, shown with Compose depends_on.
-
Documentation as a Repository: Publishing a Wiki.js Site from Reviewed Markdown
Wiki.js Git storage for docs as code: publish reviewed Markdown and fail a pull request when src/ changes without docs/, checked with git diff.
-
When Microservice Decomposition Is the Wrong Default
import-linter forbidden contract as a module boundary: a FastAPI modular monolith instead of early microservices, and when a network split pays off.
-
Self-Hosted Identity with Keycloak: Central Offboarding and Forward Auth
Keycloak "invalid_grant" "Account disabled": one admin API call disables a user for every OIDC client, plus oauth2-proxy forward auth for apps without login.
-
An Entity Graph as the Data Model for a Heterogeneous Estate
Go entity graph data model: one Entity struct with Kind and Attrs, typed contains, dependsOn and runsOn edges, health rollup and cycle detection.
-
The Transactional Outbox: Never Losing a Job You Already Committed
Transactional outbox in Postgres: commit-then-enqueue loses jobs on a crash. A SKIP LOCKED relay to Redis Streams and an idempotent consumer.
-
Layering an Angular Application: core, shared, features and the Rule That Holds
eslint-plugin-boundaries element-types: enforcing one dependency direction between Angular core, shared and features folders, with a failing lint example.
-
Embedding a Built Frontend Into a Go Binary with go:embed
//go:embed dist with http.FileServer returns 404 on SPA client routes after a refresh: an index.html fallback, serving the API from the same Go binary.
-
Serving Several Local Models on One GPU with On-Demand Loading
llama-swap config.yaml with cmd, ttl and healthCheckTimeout: loading llama-server models on demand and unloading idle ones on a single GPU.
-
One Dashboard on Five Unrelated Backends: Normalising at the Boundary
asyncio.gather with return_exceptions=True in a FastAPI BFF: map two upstream APIs onto one schema and return partial data with health when one is down.
-
Modelling an Order Lifecycle as an Explicit State Machine
Python order status as a state machine: a transition table and one transition_to method that raises InvalidTransition on moves like shipping a cancelled order.
-
UUID Case Normalization as a Recurring Cross-Service Bug
Uppercase vs lowercase UUID keys cause silent cache and database lookup misses between services. Normalise once at the boundary with str(uuid.UUID(value)).
-
Docker Compose or Kubernetes: What the Control Loop Actually Buys You
Docker Compose restart: always vs a Kubernetes Deployment: what happens when the host dies, and what the control loop costs in debugging.
-
A Single-Writer Rule for Configuration Held in Redis
SET NX PX lease plus a Lua script that checks the fencing token, bumps a version and publishes, so exactly one process writes a Redis config key.
-
Chaining Single-Purpose Redis Consumers into a Processing Pipeline
XREADGROUP, XACK and XAUTOCLAIM: splitting one Python consumer into single-purpose Redis Streams stages with at-least-once delivery and crash recovery.
-
Tracking Moving Objects with Redis Sorted Sets and an Atomic Lua Tick
ZINCRBY updates one member only: a Lua script via redis-cli --eval advances every sorted set score atomically and returns members past a threshold.
-
A Python CLI That Scaffolds a Project Structure You Actually Want
Python scaffolding CLI with only argparse and string.Template: generates src layout, pyproject.toml, Dockerfile and .gitignore, tested with tomllib.
-
A Feature-Module Layout for a FastAPI Application That Keeps Growing
FastAPI APIRouter per feature directory with its own router.py, schemas.py and service.py, replacing a shared routers.py, schemas.py and crud.py.