chore: Initial commit of Opencord base state

This commit is contained in:
Jannis Braun
2026-02-18 02:49:21 +01:00
commit 4fd17084a5
124 changed files with 17955 additions and 0 deletions
+143
View File
@@ -0,0 +1,143 @@
# Opencord
Open-source, self-hosted Discord alternative built with TypeScript.
## Features
- Real-time text messaging with WebSocket
- Servers, channels, and member management
- Voice and video chat via LiveKit
- Direct messages
- File uploads and image sharing
- Markdown message formatting
- Typing indicators and presence status
- Role-based permissions (owner, admin, member)
- Invite system with shareable codes
- Desktop app (Electron)
- Mobile-responsive web UI
- Docker deployment
## Tech Stack
| Layer | Technology |
|-------|-----------|
| Backend | Fastify + TypeScript |
| Database | SQLite (better-sqlite3) + Drizzle ORM |
| Auth | JWT + bcrypt |
| Real-time | WebSocket (ws) |
| Frontend | React 18 + Tailwind CSS + Zustand |
| Voice/Video | LiveKit |
| Desktop | Electron |
| Build | Vite + pnpm workspaces |
## Quick Start with Docker
```bash
# Clone the repository
git clone https://github.com/your-username/opencord.git
cd opencord
# Create environment file
cp .env.example .env
# Generate a JWT secret
echo "JWT_SECRET=$(openssl rand -hex 32)" >> .env
# Start Opencord
docker compose up -d
```
Open `http://localhost:3000` in your browser. A default server "Opencord" is created automatically.
**Default admin account:** `admin` / `admin123` (change this after first login).
## Development Setup
### Prerequisites
- Node.js 20+
- pnpm 8+
### Install
```bash
pnpm install
```
### Configure
```bash
cp .env.example .env
# Edit .env with your settings (generate a JWT_SECRET)
```
### Run
```bash
# Start both server and web dev server
pnpm dev
# Or start individually
pnpm dev:server # API server on :3000
pnpm dev:web # Vite dev server on :5173
```
### Build
```bash
pnpm build
```
This builds the shared types, server, and web frontend. The server serves the built frontend in production mode.
## Project Structure
```
Opencord/
├── packages/
│ ├── shared/ # Shared TypeScript types
│ ├── server/ # Fastify API + WebSocket server
│ ├── web/ # React frontend (Vite + Tailwind)
│ └── desktop/ # Electron desktop app
├── data/ # SQLite DB + uploads (created at runtime)
├── Dockerfile
├── docker-compose.yml
└── .env.example
```
## Voice & Video
Voice and video requires a [LiveKit](https://livekit.io/) server. Set these in your `.env`:
```
LIVEKIT_URL=wss://your-livekit-server
LIVEKIT_API_KEY=your-api-key
LIVEKIT_API_SECRET=your-api-secret
```
Without LiveKit configured, text chat works fully but voice/video channels will not connect.
## API
The server exposes a REST API and WebSocket endpoint:
- **REST API**: `http://localhost:3000/api/*`
- **WebSocket**: `ws://localhost:3000/ws`
- **Health check**: `GET /api/health`
See [CLAUDE.md](CLAUDE.md) for the full API reference.
## Desktop App
The Electron desktop app wraps the web UI and adds system tray, notifications, and native window controls.
```bash
cd packages/desktop
pnpm build:ts # Compile TypeScript
pnpm dev # Run in development
pnpm build # Package for distribution
```
## License
MIT