b8f4427f907f9265d8aa41ef9d5a0e4d32f37478
All checks were successful
Deploy to VPS / deploy (push) Successful in 40s
The 0004_add_openrouter_provider.sql migration existed but was never registered in _journal.json, so the 'openrouter' value was missing from the api_key_provider PostgreSQL enum. Inserting an OpenRouter key threw a DB error that was unhandled, causing Next.js to return an HTML 500; the frontend's res.json() then threw, showing "Netzwerkfehler". Fixes: - Add 0004_add_openrouter_provider to _journal.json (idx 7) so the migration runs on next deploy and registers 'openrouter' in the enum - Fix null-label duplicate check: use isNull() instead of passing undefined to and(), which incorrectly matched all provider keys - Wrap DB insert in try/catch to return a proper JSON error instead of crashing with an unhandled exception 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%