b22bdd8425a1f71c3699f2145b8aaa7c7821f37e
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>
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
Languages
TypeScript
98.6%
JavaScript
0.6%
Shell
0.4%
CSS
0.2%
Dockerfile
0.2%