Dumpster

A chaotic, self-hosted Discord-like platform for ~12 degenerates.

Built for fun, maintained with pride, named with intent.

Quick Start

# 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

  • Registration + login (Argon2id)
  • Server + channel CRUD
  • Messaging with WebSocket real-time delivery
  • Cursor-based message pagination
  • User profiles (display name, bio, accent color, status, avatar/Gravatar)
  • File uploads (MinIO)
  • Giphy GIF search + trending
  • 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

License

AGPLv3

S
Description
A chaotic, self-hosted Discord-like platform for ~12 degenerates. Built for fun, maintained with pride, named with intent.
https://dumpster.dustin.coffee
Readme 202 MiB
2026-07-07 18:19:22 +00:00
Languages
TypeScript 62.3%
Go 36.5%
JavaScript 0.4%
HTML 0.4%
CSS 0.2%
Other 0.1%