LoanPilot

Deployment

How LoanPilot is built and shipped.

Deployment

LoanPilot runs on your own server as a Docker stack — a FastAPI app plus Caddy for TLS — behind app.ippo.one.

The stack

  • App — FastAPI (async SQLAlchemy, SQLite by default), the bank-statement parser and the credit engine, plus the built web / admin / landing front-ends served as static assets.
  • Caddy — automatic HTTPS and reverse proxy.

Zero-downtime deploys

The deploy script builds the new image while the current one keeps serving, backs up the database, then swaps containers — requests are held, not dropped. Each deploy:

  1. Backs up the database (kept under the data volume).
  2. Builds the image (front-ends compiled, back-end packaged).
  3. Waits for running analyses to finish, then swaps.
  4. Health-checks the app and verifies HTTPS.

Idempotent migrations

Schema changes are additive, idempotent column migrations that run on startup — a successful health check confirms they applied. Rule changes roll out without a migration: new default rules are surfaced to existing teams on load.

Database

SQLite on the data volume by default (single server). Backups are taken before every deploy; the most recent few are retained.

On this page