sethserver.com

All Posts

Python

FastAPI + Pydantic + SQLAlchemy: The Modern Python Stack

Updated: September 17, 2026

If your FastAPI project currently looks like a junk drawer (and your database session handling feels like a haunted house), this post is for you. I'm walking through the minimum "actually works in production" stack: **FastAPI** for routes, **Pydantic** for clean input/output schemas, and **SQLAlchemy** for persistence-wired together with dependency injection so you don't end up debugging global state at 2am. You'll get a sane folder layout, a single correct way to create DB sessions, boring CRUD functions (the best kind), and a quick note on how to override the DB in tests without accidentally nuking your dev data. read on »

Python

FastAPI: A Flask Developer's Guide

Updated: September 17, 2026

If you've shipped real Flask apps, you already know the deal: it's friendly, flexible, and will happily let you copy-paste input validation until you die of boredom. FastAPI is different. It shows up with typed models, automatic request validation, and API docs that generate themselves while you're still looking for your Postman collection. In this guide, I'll walk through what actually changes when you switch from Flask to FastAPI, plus a tiny CRUD conversion that won't turn into a week-long "framework migration journey." read on »

Startups

The Technical Co-Founder Matching Problem

Updated: September 17, 2026

Finding a technical co-founder isn't a scavenger hunt for "an engineer." It's a high-stakes match of risk tolerance, work style, and shared reality. In this post, I break down why most founder pairings implode (hint: "just build the app" is not a plan), how the MVP fight usually starts, and the four questions I make co-founders answer before anyone starts arguing about equity at 11pm. -Sethers read on »

Programming

Insanely Rapid AI-Assisted Development with Replit

Updated: September 17, 2026

Replit is my go-to antidote for the "environment setup ate my entire day" problem. Open a browser, write code, run it, and let the built-in AI handle the boring parts so you can ship something real. It's perfect for MVPs and internal tools, a little spicy for serious production, and a great way for startups to move fast before the market moves on without them. read on »

Programming

The Five Deadly Sins of Deployments

Updated: September 17, 2026

Deployments rarely kill startups. But sloppy deployments will quietly eat your runway while you argue about tools, chase ghost bugs, and "fix forward" through outages. In this post, I break down five common deployment sins-staging drift, leaked secrets, fake staging tests, backups you never restore, and rollbacks that don't exist-and how to avoid wasting weeks on problems you can prevent in a day. Also: remember the ants. Two words: fire ants. read on »

Python

How to Build a Simple RAG Pipeline in Python

Updated: September 17, 2026

RAG is just a fancy way to say: stop making the model guess when you can hand it the right notes. In this post, I walk through a simple, one-file RAG pipeline in Python-ingest, chunk, embed+index (FAISS), then retrieve+answer with citations. It's the version most teams should build first: boring, readable, and easy to debug before you start buying "enterprise" problems. read on »

AI

LLVM Creates "Human-in-the-loop" AI Policy

Updated: September 17, 2026

LLVM just published a new AI Tool Use Policy, and it's refreshingly boring in the best way: use whatever tools you want, but if you submit it, you own it. Read the output, understand it, test it, and be able to explain it in review. Label substantial AI help, don't let autonomous agents run wild in LLVM spaces, and don't "contribute" by dumping unvetted AI sludge onto maintainers. HITL isn't anti-AI. It's pro-not-wasting-everyone's-time. read on »

PostgreSQL

Free Postgres Password Generator With CREATE ROLE SQL

Updated: September 17, 2026

Storing passwords in Postgres sounds simple until you inherit a "clever" system that can be reversed and suddenly your weekend has plans. In this post, we'll do the boring basics the right way: use `pgcrypto` + bcrypt for slow, salted hashes, and generate temporary passwords with real randomness (`gen_random_bytes`) that humans can still copy/paste without crying. A little SQL now saves a lot of incident-response later. read on »

AI

Replit to Production: How I've Shipped 100+ Apps Without Losing My Mind

Updated: September 17, 2026

Replit is great for building fast. It's also great at reminding you that containers are temporary and your data is not. In this post, I walk through my boring (and therefore reliable) path from Replit to production: keep your database in AWS, wire Replit to GitHub, and deploy using date-based Git tags so you can answer "what's in prod?" without performing a ritual. It's simple, repeatable, and doesn't require the CEO to learn YAML. read on »

Programming

SQLite Is Probably Enough

Updated: September 17, 2026

Most startups pick Postgres "for scale" the way people buy a tour bus for a commute: it feels responsible, right up until you're paying for problems you don't have. SQLite is boring, fast, and removes a whole category of database drama. The real catch is write contention (one writer at a time), but with WAL mode, short transactions, and sane access patterns, it'll carry you further than your architecture diagrams suggest. Use SQLite now, design for a clean swap later, and let production-not vibes-tell you when it's time to upgrade. read on »

Programming

Sending Push Notifications from Replit with Firebase

Updated: September 17, 2026

Background jobs finish on their own schedule, which means your users either spam refresh like it's 2004... or you tell them when the work is done. In this post, I'll show you how to send Firebase Cloud Messaging (FCM) push notifications from a Replit backend using either TypeScript (Node) or Python-plus the real-world gotchas around service account JSON, Replit Secrets, IAM permissions, and device tokens that expire purely out of spite. read on »

Programming

I'm renaming vibe-coding, sorry not sorry.

Updated: September 17, 2026

"Vibe-coding" is trying to sound like a new craft, but most of the time it's just a shortcut with better branding. I'm renaming it: vibe-coding is when you delegate both the code and the judgment to an AI, then ship it without understanding, testing, or ownership. Using AI to draft code is fine. Shipping unverified output because it "felt right" is how you end up with a very efficient failure-and a very long conversation with your CEO. read on »

Programming

When to write an MCP and When to Write a Tool

Updated: January 15, 2026

If you're building with LLMs, you'll hit the "MCP server or tool?" fork in the road. Tools are fast, local, and easy to test. MCP servers are for shared capabilities, centralized auth/policy, and anything that touches "scary data." Pick wrong and nothing explodes-but your codebase will slowly turn into a museum of regrettable decisions. read on »

Programming

Connect Replit to GCP Cloud SQL MySQL: Public IP vs Auth Proxy Setup Guide

Updated: March 22, 2026

Replit moved onto GCP in December 2025, and that makes database tutorials a lot less fake. In this guide, you'll connect a Replit Python app to a real GCP Cloud SQL MySQL instance, with two clear paths: Public IP + Authorized Networks (fast, annoying) or Cloud SQL Auth Proxy (cleaner, more secure). You'll also set up Replit Secrets, test with `pymysql`, and fix the usual "can't connect" and "why is this slow" problems without turning your app into a security incident. read on »

Programming

How to Connect Replit to Supabase Postgres Database (Node.js & Python Guide)

Updated: September 17, 2026

Supabase isn't a mysterious new database. It's Postgres with helpful extras. This post shows how to connect a Replit app to Supabase the clean way: grab the right connection string, put it in Replit Secrets (not your repo), and verify SSL instead of turning it off. Includes working Node (pg) and Python (psycopg v3) examples, plus the gotchas that waste the most time. read on »

Startups

It's Not about Crushing Success, It's about Recovering from Catastrophic Failure

Updated: September 17, 2026

Most teams can handle a normal rush. The real test is when everything is already on fire and then the lunch crowd shows up anyway. In restaurants, the pros don't panic or rewrite the process mid-service-they fix the next thing and keep the line moving. Startups are the same: "crushing it" is mostly a myth, but recovery is a skill you can build. This post is about designing teams and systems that can take a hit, get up fast, and keep shipping. read on »

AI

AI Writes a Little Too Well, but Somehow Not Well Enough: The Linguistic Uncanny Valley of LLMs

Updated: September 17, 2026

LLMs write like a customer success email that's trying not to admit anything: clean grammar, tidy structure, a joke that feels like it was approved by Legal. And yet your brain still goes, "Something's off." This post digs into the linguistic uncanny valley-why model writing often sounds correct instead of true, why it avoids the sharp edges that make humans feel alive, and how the same instincts you use to spot fake "AI" and fake competence apply to text, too. read on »

Programming

Replit + Cloudflare Workers: Deploy Python to the Edge

Updated: September 17, 2026

Cloudflare Workers can now run Python (beta), which means you can ship a real Python endpoint to "the edge" without adopting Kubernetes as a lifestyle. The workflow is simple: prototype fast in Replit, move the working code into a Worker, and deploy globally with Wrangler. The big gotcha is cold starts-Python will happily import half the internet before serving one byte-so keep dependencies lean and avoid heavy work at import time. Use Workers for the fast front door (auth, routing, lightweight APIs), and keep the heavy lifting on traditional servers where it belongs. read on »

Startups

Startup Red Flags: A Checklist for Job Seekers and Early Employees

Updated: September 17, 2026

Startups don't usually fail because founders are dumb. They fail because everyone is moving fast, running on hope, and nobody wants to ask the "are we about to explode?" question. This post is a practical checklist of red flags to watch for in interviews-financials, leadership, culture, product, and compensation-plus the exact questions to ask so you can figure out what kind of mess you're walking into (and whether it's the kind you can live with). read on »

Newsletter

One email, once a week.

Notes on databases, systems, and the occasional strong opinion about Python. No spam, unsubscribe anytime.