Caddy as Your Only Reverse Proxy: Automatic HTTPS Without Nginx
Caddy provisions TLS certificates automatically via ACME, needs zero cert renewal cron jobs, and fits a multi-service stack in twelve readable lines.
Sorted newest first.
Caddy provisions TLS certificates automatically via ACME, needs zero cert renewal cron jobs, and fits a multi-service stack in twelve readable lines.
Most indie apps start on SQLite and stay there too long. Here's exactly when to migrate to Postgres, how to do it with FastAPI, and what Stripe integration looks like at each stage.
Why SQLite outperforms Postgres for most solo projects, and how FastAPI makes it stupidly easy to ship a data-backed product in under an hour.
A step-by-step guide to building a real production API with FastAPI, PostgreSQL, async SQLAlchemy, Alembic migrations, and Docker Compose — the stack indie builders actually ship with.
Long-running operations return a job ID instead of a result. Customers poll the status endpoint until the job is complete. The shape of that endpoint determines how much customer code is needed to handle the workflow correctly.
ClickHouse merges old partitions in the background to keep query performance from degrading. When the server hits its memory limit during a merge, the whole process exits and the cgroup restart loop begins.
After a Postgres restart, the buffer cache is empty and every query that touches a previously-hot table pays cold-cache latency. pg_prewarm lets you push specific tables and indexes into shared_buffers before traffic arrives, with autoprewarm preserving the cache across restarts.
Most APIs ship with one account type: a single user, a single API key, a single billing relationship. That model breaks when customers want shared resources, multiple seats, or centralized billing. The trick is adding a hierarchy layer in a way that does not break every existing endpoint.
Autovacuum handles most Postgres maintenance correctly, but a small set of cases benefits from manual VACUUM ANALYZE: large bulk loads, post-migration backfills, statistics drift after schema changes. The trick is knowing which case you are in before you run anything.
Customer filtering needs are usually narrower than they look. A small grammar of field-equals-value plus a handful of comparison operators handles 80-90 percent of B2B SaaS list endpoint use, while still keeping the implementation indexable and the query language documentable in a single page.
The webhook subscription dashboard exposes what events a customer can subscribe to. The right interface depends on event taxonomy, the wrong one produces support tickets. The patterns that work cover three job categories and avoid four anti-patterns.
GIN and GiST are the two Postgres index access methods that handle the queries B-tree cannot: containment, overlap, full-text search, JSON path. They have different cost profiles. Picking wrong produces orders-of-magnitude difference in workload behavior.