# GroupChat2 GroupChat2 is a full-stack group chat application with live rooms, invite flows, profile management, image uploads, and an AI participant that can respond in-room using OpenRouter plus web tools. The project is split into two main apps: - [Client README](./client/README.md) - [Server README](./server/README.md) ## What It Does - Real-time group chat over WebSockets - Account registration and login with JWT auth - Optional Nostr-based authentication - Room creation, membership, invite links, and Nostr invites - AI-assisted rooms with configurable model, prompt, and assistant name - Streaming AI responses with tool usage indicators - Chat image uploads and user avatar uploads - Message permalinks backed by stored message hashes - SQLite persistence with automatic startup backups ## Project Layout ```text GroupChat2/ |- client/ Riot.js + Vite single-page app |- server/ Rust + Axum API, WebSocket server, SQLite storage |- dev.ps1 Windows dev runner |- dev.sh macOS/Linux dev runner |- prod.sh Production build/run script ``` ## Stack - Frontend: Riot.js, Vite, vanilla JS, markdown-it, highlight.js - Backend: Rust, Axum, Tokio, SQLx, SQLite - AI: OpenRouter with optional Tavily or Brave search - Auth: JWT, Argon2 passwords, Nostr challenge/verify flow ## Quick Start 1. Copy `server/.env.example` to `server/.env`. 2. Fill in at least `OPENROUTER_API_KEY` and the search provider keys required by `SEARCH_PROVIDER`. 3. Start the app with one of the repo scripts: ```powershell ./dev.ps1 ``` ```bash ./dev.sh ``` If you prefer running each side manually: ```bash cd server cargo run ``` ```bash cd client npm install npm run dev ``` Default local ports: - Windows dev script: client `http://localhost:3000`, server `http://localhost:3001` - macOS/Linux dev script: client `http://localhost:3003`, server `http://localhost:3002` - Manual defaults: client `http://localhost:3000`, server `http://localhost:3001` ## Development Notes - The client proxies `/api`, `/ws`, and `/uploads` to the server during local development. - The server serves `client/dist` directly in production. - Database migrations are executed at server startup. - Before opening the SQLite database, the server creates a timestamped backup and retains the 10 most recent copies. ## Where To Read Next - [Client README](./client/README.md) for UI structure, frontend commands, and browser behavior - [Server README](./server/README.md) for env vars, endpoints, storage, and backend architecture