| name |
classification |
success_metric |
status |
created |
depends_on |
skip |
| migrate-neon-to-homelab |
infra |
Deck Hearth runs on CT 102 Postgres + MinIO + Redis, app on Dokploy (CT 112);
Neon and Vercel hosting decommissioned; Vercel AI Gateway retained.
|
in_progress |
2026-08-15 |
|
| ia |
| ui-design |
| ux |
| visual |
| a11y |
| design |
| flag |
|
Convoy: migrate-neon-to-homelab
Move Deck Hearth from Neon (free tier full ~490 MB) to CT 102 Postgres
on the axiom homelab. Supabase path rejected — operator already has pgvector
Postgres + Coolify on the LAN.
Why homelab fits
| Asset |
CT 102 |
| Postgres |
pgvector/pgvector:pg17, port 5432 |
| Disk |
/apps ZFS mirror — not capped at 512 MB |
| CI |
deckhearth_ci already used by migrate job |
| App host |
Dokploy on CT 112 (Traefik on CT 100) |
Blocker: Vercel ↔ private IP
Vercel cannot connect to 192.168.68.102. Production cutover requires
Dokploy deploy (deckhearth.stillwell.cloud) on CT 112.
Phases
| Phase |
Work |
Owner |
Status |
| 1 |
axiom-server: ct102/init/03-deckhearth.sql |
operator |
ready |
| 2 |
lib/sql.js + import swap off @vercel/postgres |
code |
done |
| 3 |
docs/HOMELAB_DATABASE.md runbook |
code |
done |
| 4 |
Operator: provision DB, npm run migrate up |
operator |
done |
| 5 |
MinIO + Redis wiring, Dockerfile, Dokploy docs |
code |
done |
| 6 |
npm run migrate-neon-to-homelab data copy |
operator |
pending |
| 7 |
Dokploy app + Traefik route |
operator |
in_progress |
| 8 |
Decommission Neon + Vercel |
operator |
pending |
Env contract
POSTGRES_URL=postgresql://deckhearth:…@192.168.68.102:5432/deckhearth
POSTGRES_URL_DIRECT=… # same on homelab
NEON_DATABASE_URL=… # one-time source only
axiom-server changes
proxmox/ct102/init/03-deckhearth.sql — deckhearth + pgvector + deckhearth_ci
.cursor/rules/ct102-databases.mdc — table row
tcg-vault changes
lib/sql.js, scripts/migrate-neon-to-homelab.js
docs/HOMELAB_DATABASE.md
Risks
| Risk |
Mitigation |
| LAN-only DB |
Deploy app on Coolify, not Vercel prod |
deckhearth_ci password drift |
Match HOMELAB_CI_POSTGRES_PASSWORD GitHub secret |
| Init SQL on live CT 102 |
Manual docker exec psql apply, not initdb.d replay |