惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
罗磊的独立博客
IT之家
IT之家
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
博客园 - Franky
博客园 - 聂微东
博客园_首页
爱范儿
爱范儿
量子位
博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
Martin Fowler
Martin Fowler
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Y
Y Combinator Blog
Vercel News
Vercel News
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
Engineering at Meta
Engineering at Meta

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Moving a Replit AI MVP to Production: What to Check First
Alex Natskovich · 2026-06-17 · via DEV Community

Alex Natskovich

A Replit MVP can get you to a working demo fast.

The risky part starts when users, payments, private data, and background jobs enter the picture.

Before you migrate to Vercel, AWS, Render, Railway, or Supabase, audit the app like an engineer who will be paged at 2 a.m.

1. Get the app out of the workspace

Start with code ownership.

git remote -v
git status
git log --oneline -5

You want the source in a GitHub or GitLab repo owned by the company, not a shared Replit workspace or a freelancer account.
Add the boring files first:

.env.example
README.md
docker-compose.yml
.github/workflows/ci.yml

Your .env.example should expose every required variable without leaking secrets:

DATABASE_URL=
SESSION_SECRET=
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
OPENAI_API_KEY=
SENTRY_DSN=
APP_ENV=development

If the app only runs because secrets live inside Replit, you do not have a deployable app yet.

2. Replace Replit assumptions

Replit is convenient because hosting, secrets, preview, and runtime sit in one place. Leaving it means finding every hidden dependency.

Common migration traps:

  • file uploads written to local disk
  • Replit DB or bundled SQLite used as production storage
  • hardcoded preview URLs
  • one database shared across dev and prod
  • no process manager for workers or cron jobs
  • no CI job before deploy
  • no rollback path

Search for platform-specific assumptions:

grep -R "replit" .
grep -R "localhost" .
grep -R "0.0.0.0" .
grep -R "process.env" ./src

Also check whether the server binds to the platform port correctly:

const port = process.env.PORT || 3000;

app.listen(port, "0.0.0.0", () => {
  console.log(`Listening on ${port}`);
});

Tiny detail. Painful outage.

3. Split environments before touching features

Do this before adding another feature.

local -> local database
staging -> staging database
production -> production database

A minimal CI gate is enough to start:

name: ci

on:
  pull_request:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm run lint
      - run: npm test

Then add one smoke test around the path where money or data moves.

test("checkout requires an authenticated user", async ({ page }) => {
  await page.goto("/checkout");
  await expect(page).toHaveURL(/login/);
});

Ouch if this fails. Good that it failed before launch.

4. Put auth and data rules under pressure

AI-generated apps often make login look complete while access control stays thin.

Check the API layer, not only the UI.

if (invoice.userId !== session.user.id) {
  return res.status(403).json({ error: "Forbidden" });
}

Then test it directly:

curl -H "Authorization: Bearer USER_A_TOKEN" \
  https://api.example.com/invoices/USER_B_INVOICE_ID

Expected result: 403.

If you get 200, pause the migration and fix authorization first.

5. Add logs before users find the bugs

At minimum:

import * as Sentry from "@sentry/node";

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  environment: process.env.APP_ENV,
});

Track auth failures, payment webhooks, failed AI calls, and slow database queries.

For AI features, add cost controls early:

if (user.monthlyTokensUsed > user.monthlyTokenLimit) {
  throw new Error("AI usage limit reached");
}

No one wants to discover runaway token usage from the invoice.

6. Vendor options, ordered by technical fit

If you need outside help, choose based on the stack and failure mode.

MEV

Good fit when the app handles payments, health data, regulated workflows, or complex integrations. MEV is worth considering when you need an audit, migration plan, and production engineering rather than a quick patch.

WAYF Digital

Good fit when the app already uses Supabase and Next.js. Useful for fixing row-level security, auth policies, and backend structure without changing the foundation.

Slashdev.io

Good fit when you need senior engineers comfortable with Claude Code and agentic workflows. Better for fast hardening than broad product ownership.

Red Leg Dev

Good fit for a focused rescue where one senior engineer can inspect the app and fix the highest-risk paths.

Pragmatic Coders

Good fit for funded products that need a larger team across product, design, DevOps, and engineering.

Handoff checklist

Do not close the migration until you have:

  • company-owned repo
  • documented env setup
  • staging and production split
  • database migration process
  • payment webhook docs
  • monitoring access
  • rollback instructions
  • credentials moved to company-owned accounts

A deployed app without those pieces is fragile.

Start with the source, the secrets, the database, and the deploy path. Features can wait.

Full vendor breakdown: https://mev.com/blog/best-agencies-for-turning-your-vibe-coded-app-into-a-production-ready-product