
TL;DR
How we ported 38 apps off Replit and onto Coolify in a single day, using parallel Claude Code subagents, gh, and neonctl. The honest stats: stubs, monorepos, false-empties, and ~120 PRs.
Read next
31 deployed apps. 7 down. Favicons missing on 20 of 24 reachable hosts. Sentry on zero. Here is how a single audit turned into 58 PRs in one afternoon - and what shipped, what didn't, and what the pattern was.
6 min readOne dev, one CLI, 24 subdomains, and a lot of parallel agents. The playbook for shipping an AI app portfolio.
9 min readA practical migration guide for developers switching from GitHub Copilot to Claude Code. What changes, what stays the same, and how to get productive fast.
7 min read38 apps. One day. Roughly 120 pull requests across the empire. By the time the dust settled, every Replit-hosted project under our org had a migrate/coolify-clerk PR sitting in review, pre-staged for one-click Coolify deploy.
This is the candid version. What worked, what was a stub that did not need migrating, and what the recipe actually looks like when you repeat it 38 times in a day.
Replit was a great place to scaffold something at 1am. It is not where you want production infra to sit long-term.
The reasons stacked up:
The decision was not "Replit bad." It was "one stack, one playbook, one bill."
Every migration followed the same shape, regardless of whether the app was Express or Next.js:
For Express + Vite + Drizzle apps:
.replit, replit.nix, runtime polyfills).coolify.json plus health check endpoint.For Next.js + Prisma apps:
/api/health.The single-container constraint was deliberate. Coolify is happiest when an app is one container with one port. No sidecars, no multi-service compose files unless the app genuinely needs them. Most did not.
Get the weekly deep dive
Tutorials on Claude Code, AI agents, and dev tools - delivered free every week.
From the archive
May 5, 2026 • 6 min read
May 5, 2026 • 9 min read
May 5, 2026 • 8 min read
May 5, 2026 • 8 min read
The 38-app number sounds impressive until you break it down:
migrate/ branch with the apps split into separate Coolify services.Total PRs opened across all categories: roughly 120. That includes the migration PRs, follow-up cleanup PRs (lockfile sync, env var fixes, health check tweaks), and a handful of chore: archive PRs for repos that should not have existed in the first place.
The fan-out was the interesting part.
The pipeline was three CLIs and one orchestrator:
gh CLI for everything GitHub. Listing org repos, cloning, branch creation, PR open, PR comment, tagging reviewers. Every agent used gh and only gh.neonctl for spinning up Neon Postgres branches per app. New project, new connection string, dump it into the env file, done./tmp/<slug>/ directory to avoid the in-place collision problem we have hit before with 5+ parallel agents on the same checkout.At peak, we had 8 to 10 subagents running concurrently. Each one followed the same replit-to-coolify skill: clone, audit, decide if migration is needed, apply the recipe or honest-skip, open a PR on a migrate/coolify-clerk branch, tag the reviewer, exit.
The honest-skip rule was load-bearing. Without permission to skip, an agent will hallucinate work to fill the silence. With it, the empty stubs and false-empties got flagged correctly instead of receiving fake migration PRs.
Every PR is sitting in review right now, tagged @devin-ai-integration for the automated review pass. The standing rule held across all 120 PRs: branch, PR, tag Devin, never direct-push to main.
Each migration PR is pre-staged for one-click Coolify deploy. The Dockerfile builds, the health check responds, the env vars are documented in the PR body. When Devin signs off and we merge, Coolify picks up the push and deploys.
We are merging in batches rather than all at once. Five to ten apps per evening, watch the Coolify queue, fix anything that breaks the build (usually a pnpm-lock.yaml sync issue, the recurring failure mode), move to the next batch.
Once everything is on Coolify:
/api/health shape, so the empire dashboard can poll one endpoint per app and get a real signal.replit-to-coolify skill into the standard scaffold. New apps should never touch Replit again. The skill is now part of the default scaffold path.The interesting part of the day was not the migration itself. The recipe is boring once you have it. The interesting part was that 38 apps moved in a day because the orchestration was tight, the skip rule was honored, and every agent had the same playbook.
That is the leverage. Not the agents. The playbook the agents share.
Technical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.
Track fast-moving AI tools, releases, pricing, and docs from one product intelligence dashboard.
View AppGenerate brand systems, launch copy, and reusable creative direction from one brief.
View AppGenerate avatar video scripts, hooks, and scene notes from one creator brief.
View AppA concrete step-by-step guide to moving your development workflow from Cursor to Claude Code - settings, rules, keybindings, and the habits that transfer.
Getting StartedContext-aware follow-up suggestions derived from git history.
Claude CodeA practical walk-through of how to design, write, and ship a Claude Code skill - from choosing when to trigger, through allowed-tools, to the steps the agent will actually follow.
Getting Started
Composio: Connect AI Agents to 1,000+ Apps via CLI (Gmail, Google Docs/Sheets, Hacker News Workflows) Check out Composio here: http://dashboard.composio.dev/?utm_source=Youtube&utm_channel=0426&utm_...

Check out Replit: https://replit.com/refer/DevelopersDiges The video demos Replit’s Agent 4, explaining how Replit evolved from a cloud IDE into a platform where users can build, deploy, and scale ap...

31 deployed apps. 7 down. Favicons missing on 20 of 24 reachable hosts. Sentry on zero. Here is how a single audit turne...

Claude Code does not have to call Anthropic's API. Here are five working patterns for running it through your own gatewa...

We ran the same Convex to Neon migration on four apps in a week. Here is what stayed identical, what differed per app, a...

One dev, one CLI, 24 subdomains, and a lot of parallel agents. The playbook for shipping an AI app portfolio.

A practical migration guide for developers switching from GitHub Copilot to Claude Code. What changes, what stays the sa...

Graphify is trending because coding agents keep hitting the same wall: they can edit files, but they still need a durabl...

New tutorials, open-source projects, and deep dives on coding agents - delivered weekly.