Multi-persona group chat where AI personas with distinct personalities debate, brainstorm, and build on each other's ideas. Bring your own API key via OpenRouter, or run local models with Ollama.
- Frontend: Next.js 16, React 19, Tailwind CSS v4, shadcn/ui
- Database: Postgres with Prisma ORM
- Auth: AWS Cognito
- LLM: BYOK via OpenRouter + local models via Ollama
- Web search: Self-hosted SearXNG
- Containers: Podman + podman-compose
cp .env.example .env
# Fill in ENCRYPTION_KEY and Cognito values
# Start Postgres and SearXNG
podman-compose -p fray up db searxng -d
# Run migrations and seed
npx prisma migrate dev
npx prisma db seed
# Start dev server
npm run devApp runs at http://localhost:3000.
Fray runs on a single EC2 instance (Fedora) with Caddy for auto-SSL.
- Launch a Fedora EC2 instance with ports 22, 80, 443 open
- Point your domain's A record at the instance IP
- SSH in and run
setup.sh, then fill in.env - Build and start:
podman-compose -f podman-compose.prod.yml build
podman-compose -f podman-compose.prod.yml run --rm app npx prisma migrate deploy
podman-compose -f podman-compose.prod.yml run --rm app npx prisma db seed
podman-compose -f podman-compose.prod.yml up -d./deploy.sh -i ~/.ssh/fray.pem fedora@your-ec2-ipPulls latest code, rebuilds containers, runs migrations, and restarts.
See .env.example for the full list. Key variables:
| Variable | Purpose |
|---|---|
ENCRYPTION_KEY |
AES-256-GCM key for stored API keys |
NEXT_PUBLIC_COGNITO_USER_POOL_ID |
Cognito user pool |
NEXT_PUBLIC_COGNITO_CLIENT_ID |
Cognito app client |
DOMAIN |
Production domain for Caddy auto-SSL |
POSTGRES_USER / POSTGRES_PASSWORD |
Production DB credentials |