CTO (LegalAI) b22bdd8425 fix: API key save network error — add ENCRYPTION_KEY env and auto-migrate
The "Netzwerkfehler beim Speichern des Schlüssels" was caused by two issues:
1. ENCRYPTION_KEY env var was not passed to the Docker container, so
   AES-256-GCM encrypt() threw at runtime on every POST/PATCH.
2. The 0003_tenant_api_keys migration was not in the drizzle journal
   and no migration runner existed in the Docker image.

Changes:
- docker-compose.yml: pass ENCRYPTION_KEY to app container
- .env.example: document ENCRYPTION_KEY with generation command
- .gitignore: allow .env.example to be tracked
- Dockerfile: include drizzle/ migrations and entrypoint script
- entrypoint.sh: run migrations before starting the app
- migrate.mjs: runtime migration script using drizzle-orm migrator
- drizzle journal: register 0003_tenant_api_keys migration

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 14:28:19 +00:00

StageAI

WebApp for stage law attorneys (Bühnenrecht). Built with Next.js, PostgreSQL, Meilisearch, and AI-powered contract analysis.

Prerequisites

  • Docker & Docker Compose
  • Node.js 20+ (for local development)
  • Git

Quick Start (Docker)

# Clone the repo
git clone https://mgit.msbls.de/Remmer/StageAI.git
cd StageAI

# Set up environment
cp .env.example .env
# Edit .env with your API keys and secrets

# Start all services
docker compose up -d

# Run database migrations
docker compose exec app npx drizzle-kit push

The app will be available at http://localhost:3000.

Environment Variables

Variable Description Required
DATABASE_URL PostgreSQL connection string Yes
NEXTAUTH_URL App URL for authentication Yes
NEXTAUTH_SECRET Random secret for session encryption Yes
AI_PROVIDER anthropic or openai Yes
ANTHROPIC_API_KEY Anthropic API key If using Anthropic
OPENAI_API_KEY OpenAI API key If using OpenAI
MEILISEARCH_URL Meilisearch URL Yes
MEILISEARCH_API_KEY Meilisearch master key Yes

Local Development

npm install
npm run dev

Database Migrations

Migrations are in the drizzle/ directory, managed by Drizzle Kit.

# Generate a new migration after schema changes
npx drizzle-kit generate

# Apply migrations
npx drizzle-kit push

Deployment (VPS)

A deployment script is included for the production VPS:

# On the VPS (remmer@100.81.230.53):
cd /home/remmer/StageAI
./deploy.sh

This pulls the latest code from Gitea and rebuilds the app container. PostgreSQL and Meilisearch containers are kept running.

Services

Service Port Description
App (Next.js) 3000 Main application
PostgreSQL 5432 Database
Meilisearch 7700 Full-text search engine

Repository

Source code: https://mgit.msbls.de/Remmer/StageAI

Description
LegalAI / StageAI - WebApp für Bühnenrecht-Anwälte
Readme 408 KiB
Languages
TypeScript 98.6%
JavaScript 0.6%
Shell 0.4%
CSS 0.2%
Dockerfile 0.2%