A school discount with no code, because the discount is the email domain
We used to give schools a discount code. A teacher asked for one, we minted it, and then we maintained the parts that follow from a code existing: a…
Tech news from the best sources
We used to give schools a discount code. A teacher asked for one, we minted it, and then we maintained the parts that follow from a code existing: a…
Oct 30, 2026, Supabase is enforcing a breaking change for RLS grants in the public schema. Existing tables are unaffected; new tables created after…
Disclosure: I build Schemity , a desktop ERD tool - this post is from our blog and uses it for the examples. TL;DR: Use the pattern PostgreSQL alrea…
Milestone 4 of IncidentCopilot — an open-source, local-first AI DevOps Incident Copilot 📌 Introduction Logs are plentiful during outages — the chall…
problem statement in a typical microservice, each instance opens its own pg client pool. during a traffic spike the aggregate connection count can e…
Nakodo has 77 call sites that look like this: await audit ({ action : " campaign.launched " , userId , entityType : " campaign " , entityId : campai…
At 2 a.m. on a Tuesday, a client's reporting replica silently stopped applying changes. The publisher kept accepting writes. The replica kept answer…
Joins are one of those topics where everyone nods along when you explain them, then freezes up the moment they have to write one on the spot, in fro…
PostgreSQL 19 was supposed to ship in October. The release team now says general availability is November 19, with RC 2 on November 12 (postgresql.o…
I'm Duc. Since May 2025 I've been building Excalibase on nights and weekends, next to my day job. It started as a GraphQL engine for Postgres, becau…
Introduction: The Headline That Made My Stomach Drop Almost every week, we see another headline about a major tech company or hot startup suffering…
PostgreSQL EXPLAIN ANALYZE: What I Actually Look At in Query Plans Every slow query I have ever chased started the same way: someone guessing. "Prob…
Marketing wanted a list. Every customer who had never placed an order. The query was short and read like English. Select from customers where id is…
Yesterday I added an optional phone number to Nakodo. When a creator or a business says yes to a brand, the app introduces them by email, and the br…
The largest test file in PubTrivia is 543 lines, and it has no mocks in it. It calls the actual server actions a player's phone calls, and the actua…
Originally published on the Hubfly blog . TL;DR What you get: a 3-service Compose file (Postgres, a one-shot migration job, an API) where the API ca…
This is a submission for the MLH x DEV Writing Challenge What I Built Here is a bug that drove me crazy for three days straight. You ask an autonomo…
OpenSparrow v4.2 adds native Excel export, column masking for viewers, and record‑tooltips in drilldowns — plus a handful of UI polish and stability…
We hit a wall last month. Traffic was stable, CPU was idle, but p99 latency spiked to 2s. The PostgreSQL server looked healthy. The culprit wasn't t…
I like the Supabase JS client. .from('todos').select('id, task').eq('done', false) reads like what I mean, and { data, error } means I'm not wrappin…
Families manage money and responsibilities in ways that often resemble small organizations. They coordinate recurring contributions, fund shared pro…
Most database crashes in Node.js apps don’t happen because of heavy queries. They happen because of unmanaged connection pools. When your TypeScript…
Operator notes are time-series data. Each one has a timestamp, a site, a temperature, and a sentence about what happened. Searching them by meaning…
Put the user filter inside the vector search itself. If you search everything and remove other people’s chunks afterwards, those chunks still use up…
Why "just retry" creates duplicate payments, and a PostgreSQL-backed design for idempotency keys that survives double clicks, timeouts, crashes and…
Short answer: use a staged retrieval design with explicit collections, bounded queries, and traceable source context, then make index cost a schema…
Under CIP-1694, a Cardano governance vote can carry an anchor : a URL to a document that explains the vote, plus a blake2b-256 hash of that document…
Most backend bottlenecks don’t happen because of poor hardware. They happen because of unindexed database queries, sloppy async error handling, and…
Verification tokens are usually designed as if the only important event is a successful click. In a real REST API, the harder work happens around th…
A Nakodo campaign can run out. Every keyword it was given has been searched, the new angles it generated have had their turn, and the brand still wa…