Blog
Notes on hosting, honestly.
Scheduled Jobs for Web Apps: Cron Patterns and the Pitfalls That Bite
How to run cron-style scheduled jobs for a web app: why calling an HTTP endpoint on a schedule works well, how to make jobs safe to run twice, and the timezone, overlap and timeout mistakes to avoid.
Build Logs vs Runtime Logs: A Practical Guide to Debugging a Failed Deploy
Every failed deploy leaves its answer in one of two logs. Learn which log to read for which symptom, how to read each one, and the handful of failures that cause most broken deploys.
Custom Domains and HTTPS: The One DNS Record, Explained
How a custom domain actually reaches your app: CNAME vs A records, why an apex domain is different, how automatic HTTPS certificates get issued, and why a new domain sits at pending.
Monorepos on a git-push Host: Serving Frontend and API Under One Domain
How to deploy a monorepo with a frontend and an API so both live under one domain: root directories, private app-to-app URLs, a same-origin /api proxy, and the mistakes that break it.
Deploying a Laravel App from a Git Repo: The Production Checklist
What to check before you push a Laravel app to a git-based host: APP_KEY, debug mode, the database connection, PORT, storage, logs, migrations, queues, the scheduler and HTTPS behind a proxy.
Deploying a Ruby on Rails App from git: What to Check First
Before you push a Rails app to a git-based host, check these first: lockfile platforms, the production secret, Puma on PORT, database.yml and DATABASE_URL, assets, migrations, logs and background jobs.
Deploying a Go Web Service: A Minimal Production Checklist
A short, practical checklist for shipping a Go HTTP service from git: listen on PORT and 0.0.0.0, add timeouts, shut down gracefully, log to stdout, read config from the environment and connect to Postgres safely.
How to Deploy a Django App from git: Settings, Static Files and Migrations
A practical guide to deploying Django from a git repo: production settings from environment variables, ALLOWED_HOSTS, static files with WhiteNoise, gunicorn on the PORT variable, and running migrations on startup.
How to Deploy a FastAPI + Postgres App with git push
A practical guide to deploying FastAPI with Postgres from a git repo: the right start command, the PORT and 0.0.0.0 rule, the psycopg 3 URL scheme, and running Alembic migrations on startup.
How to Run Database Migrations on Deploy Safely: The Expand/Contract Pattern
Running migrations when your app starts is simple, but during a rollout the old and new versions share one database. Here's how expand/contract keeps both working, with a startup script you can copy.
Shipping AI Agent Work Safely: The Human Tag and the Rollback Window (Fleet Ledger, Part 1)
Where releases fit when coding agents write most of your changes: a person decides what goes live, and nothing counts as finished until production has had time to prove it.
Why Your App Works Locally but Fails After Deploy: The $PORT and 0.0.0.0 Fix
Your build passed, the logs look fine, and the URL still won't answer. Here's why hard-coded ports and localhost binding break deploys, and the two-line fix in Node, Python, Go, Ruby and PHP.
Environment Variables at Build Time vs Runtime, Explained
Why a changed env var sometimes does nothing, why frontend secrets leak, and how to tell build-time configuration from runtime configuration before your next deploy.
How to Deploy a Node + Postgres App with git push: A Practical Checklist
A pre-flight checklist for shipping a Node.js app with a Postgres database from a git push: ports, env vars, connection strings, migrations, logs and rollbacks.
We Moved Our Production App Off Vercel. What Broke.
Migrating a real SPA-plus-API app from Vercel to Candor Deploy — the silent failures we found in our own platform, and what we built to fix them.