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)
  • Online presence (online/idle/dnd/offline)
  • Typing indicators
  • Message reactions (emoji picker, counts)
  • Message replies/threads
  • PWA with service worker
  • Invite link system
  • @mention autocomplete
  • Dark/light mode toggle
  • Mobile-responsive layout (bottom nav, drawer)
  • Push notifications (backend VAPID keys needed)
  • Roles + permissions (Phase 4)
  • WebAuthn passkeys (future)
  • 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
│   ├── voice/            # LiveKit voice/video integration
│   ├── reaction/         # Message reactions
│   └── invite/           # Server invite links
├── web/                  # React frontend (PWA)
│   ├── src/
│   │   ├── components/   # Layout, ChatArea, LoginForm, UserSettings, GiphyPicker, VoiceChannel, VoicePanel, VoiceControls, TypingIndicator, ReactionBar, EmojiPicker, ReplyBar, MentionPopup, InviteModal, JoinServer, MobileNav, MobileDrawer, ThemeToggle, InstallPrompt
│   │   ├── stores/       # Zustand (auth, server, channel, message, ws, voice, presence, typing, push)
│   │   └── 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%