AppForge: migrate off Supabase to external Postgres + Better Auth + local storage

- New Express + TypeScript backend (server/) with pg, Better Auth, local file storage
- De-Supabased Postgres schema (server/db) and TS reimplementations of DB functions
- Frontend data layer rewired to REST (rest-client + backend-client compat shim)
- Removed all Supabase references (code, config, deps, docs)
- New brand assets: gradient favicon/app icons + dark/white wordmark logos

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Leon Serfaty
2026-06-28 04:50:29 -04:00
co-authored by Claude Opus 4.8
commit 1a8b8ee5a0
271 changed files with 63734 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
# ============================================
# AppForge - Environment Variables
# Stack: External Postgres + Better Auth + Local Storage + Express backend
# Copy this file to .env and fill in your values. Never commit .env!
# ============================================
# ============================================
# Database (Required)
# ============================================
# Postgres connection string for your external database
DATABASE_URL=postgres://user:password@host:5432/postgres
# Set to true to allow self-signed / non-verified TLS on the DB connection
PGSSL_NO_VERIFY=true
# ============================================
# Backend Server (Required)
# ============================================
# Port the Express API server listens on
PORT=8787
# ============================================
# Better Auth (Required)
# ============================================
# Generate a strong random secret for production (e.g. `openssl rand -hex 32`)
BETTER_AUTH_SECRET=change-me-to-a-long-random-string
# Public origin the browser uses (dev: the Vite app origin)
BETTER_AUTH_URL=http://localhost:8080
# Optional Google OAuth (leave blank to disable Google sign-in)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# ============================================
# Local File Storage
# ============================================
# Directory where uploaded files are stored (relative to project root or absolute)
STORAGE_DIR=./server/storage
# Public URL prefix used to serve stored files
STORAGE_PUBLIC_PREFIX=/storage
# ============================================
# Self-Hosting / App Defaults
# ============================================
# Email that is auto-assigned the admin role on first signup (optional)
INITIAL_ADMIN_EMAIL=admin@example.com
NODE_ENV=development
# ============================================
# Frontend (Vite)
# ============================================
# Base URL the frontend uses to reach the backend. Empty = same origin (Vite proxy).
VITE_API_URL=
# Demo mode: true | false | empty (defer to database setting)
VITE_DEMO_MODE=false
# ============================================
# Optional Integrations (server-side; fill when needed)
# ============================================
# STRIPE_SECRET_KEY=
# STRIPE_WEBHOOK_SECRET=
# PAYPAL_CLIENT_ID=
# PAYPAL_CLIENT_SECRET=
# COINBASE_API_KEY=
# COINBASE_WEBHOOK_SECRET=
# CODEMAGIC_API_TOKEN=
# CODEMAGIC_APP_ID=
# RESEND_API_KEY=
# OPENAI_API_KEY=
# APPETIZE_API_KEY=