Files
dumpsterChat/README.md
T

113 lines
3.5 KiB
Markdown

# Dumpster
A chaotic, self-hosted Discord-like platform for ~12 degenerates.
Built for fun, maintained with pride, named with intent.
## Quick Start
```bash
# Clone
git clone ssh://git@git.dustin.coffee:2222/hobokenchicken/dumpsterChat.git
cd dumpsterChat
# Copy and edit environment variables
cp .env.example .env
$EDITOR .env
# Start backing services
docker compose -f docker/compose.yml up -d
# Run migrations
go run ./cmd/migrate
# Start the server
go run ./cmd/server
# In another terminal, start the web dev server
cd web
npm install
npm run dev
```
## Tech Stack
| Layer | Technology |
|-------|-----------|
| Backend | Go, Chi router, pgx, gorilla/websocket |
| Frontend | React 18, TypeScript, Vite, Tailwind CSS, Zustand |
| Database | PostgreSQL 16 |
| Cache | Valkey (Redis-compatible) |
| File storage | MinIO (S3-compatible) |
| Voice/video | LiveKit |
| TURN | coturn |
| Reverse proxy | Caddy |
| Auth | Argon2id + WebAuthn passkeys (Phase 3) |
## Features
- [x] Registration + login (Argon2id)
- [x] Server + channel CRUD
- [x] Messaging with WebSocket real-time delivery
- [x] Cursor-based message pagination
- [x] User profiles (display name, bio, accent color, status, avatar/Gravatar)
- [x] File uploads (MinIO)
- [x] Giphy GIF search + trending
- [x] Terminal/Gruvbox dark aesthetic
- [ ] Voice/video rooms (LiveKit, Phase 2)
- [ ] Roles + permissions (Phase 3)
- [ ] PWA push notifications (Phase 3)
- [ ] WebAuthn passkeys (Phase 3)
- [ ] TUI client (Phase 5)
## Project Structure
```
dumpsterChat/
├── cmd/
│ ├── server/ # Main API + WebSocket gateway
│ ├── migrate/ # Database migration CLI
│ └── tui/ # Terminal client (Phase 5)
├── internal/
│ ├── auth/ # Registration, login, sessions, profiles
│ ├── channel/ # Channel CRUD handlers
│ ├── config/ # Environment-based config
│ ├── db/ # PostgreSQL connection + schema migrations
│ ├── gateway/ # WebSocket hub + client fanout
│ ├── giphy/ # Giphy API client (search + trending)
│ ├── message/ # Message CRUD + WS broadcast
│ ├── middleware/ # Session auth middleware
│ ├── server/ # Server CRUD + membership
│ └── upload/ # MinIO file upload + serve
├── web/ # React frontend (PWA)
│ ├── src/
│ │ ├── components/ # Layout, ChatArea, LoginForm, UserSettings, GiphyPicker, etc.
│ │ ├── stores/ # Zustand (auth, server, channel, message, ws)
│ │ └── lib/ # API client, WebSocket client
│ └── tailwind.config.js
├── docker/ # Docker Compose, Dockerfile, Caddyfile, LiveKit config
├── Makefile # Build targets
└── .env.example # Environment template
```
## Environment Variables
See `.env.example` for the full list. Key variables:
| Variable | Description | Required |
|----------|------------|----------|
| `DUMPSTER_HOST` | Server bind address | No (default: localhost) |
| `DUMPSTER_PORT` | Server port | No (default: 8080) |
| `DUMPSTER_SECRET` | Session signing secret | Yes |
| `POSTGRES_*` | Database connection | Yes |
| `GIPHY_API_KEY` | Giphy API key for GIF search | No |
| `MINIO_*` | File upload storage | No |
## Wiki
Full documentation: [dumpsterChat wiki](ssh://git@git.dustin.coffee:2222/hobokenchicken/dumpsterChat.wiki.git)
## License
AGPLv3