Skip to content
The TAI Labs community is now on Skool
TAI Labs
All articles

26 June 2026 · 5 min read

From AI Demo to Deployed App in One Day

Follow the fastest path from a working Claude Code prototype to a deployed production app: choose a deployment target, wire environment variables, add basic auth, and ship.

By Aki Wijesundara, PhD, TAI Labs

From the archive. Originally published 2026-06-26. Tool details, examples and offers reflect that publication date. See our current guides for newer material.

The Gap Between Demo and Production

Every developer has been here: a Claude Code prototype that works perfectly on localhost, but sits for days because "deploying it properly" feels like a separate project. The gap between a working demo and a shipped app is real, but it is much smaller than it feels. This post covers the fastest path from local to live.

The rule is: do not optimize before you ship. Get it running on a real URL first, then improve it. A demo no one can access is not a product.

Choosing Your Deployment Target

For most Claude Code prototypes, one of three platforms will work. Vercel is the fastest option for Next.js or React apps. Render handles Python, Flask, and FastAPI backends cleanly. Railway works for any Dockerized app or anything that needs a persistent database. The decision rule: frontend or Next.js app goes to Vercel; Python backend goes to Render; database-backed service or long-running process goes to Railway.

# Vercel (from Next.js project root)
npx vercel --prod

# Render: connect your GitHub repo in the Render dashboard
# It auto-detects Python and runs:
#   pip install -r requirements.txt
#   python app.py

# Railway (any project)
railway login
railway init
railway up

A simple Python FastAPI app will be live on a public URL in under 10 minutes from first commit to Railway or Render.

Wiring Environment Variables and Adding Basic Auth

Production apps need secrets out of the code. Every platform has an environment variable or secrets UI. Tell Claude Code to refactor your hardcoded values before you deploy.

Prompt

"Audit my app for any hardcoded API keys, passwords, or tokens. Move them to os.environ calls with clear variable names and create a .env.example file listing all required variables with placeholder values."

Then add basic auth to protect the app while it is in beta. For a FastAPI app, this takes less than 20 lines.

import os, secrets
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import HTTPBasic, HTTPBasicCredentials

app = FastAPI()
security = HTTPBasic()

def verify_credentials(credentials: HTTPBasicCredentials = Depends(security)):
    correct_user = secrets.compare_digest(
        credentials.username, os.environ["BASIC_AUTH_USER"]
    )
    correct_pass = secrets.compare_digest(
        credentials.password, os.environ["BASIC_AUTH_PASS"]
    )
    if not (correct_user and correct_pass):
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            headers={"WWW-Authenticate": "Basic"}
        )

@app.get("/", dependencies=[Depends(verify_credentials)])
def root():
    return {"message": "Hello from production"}

Set BASIC_AUTH_USER and BASIC_AUTH_PASS in your platform's environment variable UI, push to git, and your app is live with basic protection. You can replace this with proper auth later, but this gets you to a shareable URL today.

Want to build this live with Aki?

Join a Lightning Lesson and go deeper on this topic. Browse upcoming sessions →