b8ae43e2506e8c72372c026c8f3fc5c43a40b044
Dumpster
A chaotic, self-hosted Discord-like platform for ~12 degenerates.
Built for fun, maintained with pride, named with intent.
Quick Start
git clone ssh://git@git.dustin.coffee:2222/hobokenchicken/dumpsterChat.git
cd dumpsterChat
docker compose -f docker/compose.yml up
That's it. Visit http://localhost to register and start chatting.
For optional features, copy .env.example to .env and set Giphy, MinIO, LiveKit, or VAPID keys.
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 |
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
- Threads (reply chains)
- Forum channels (threaded topics)
- Calendar (events, RSVPs)
- Docs (wiki with markdown sidebar)
- Lists (kanban todo/in_progress/done)
- Scheduling / availability (per-server slots)
- Audit log (event tracking)
- Blocks (user-level blocking)
- Dark/light mode toggle
- Mobile-responsive layout (bottom nav, drawer)
- Bot framework (token auth, CRUD, WebSocket gateway)
- Slash commands (registration, autocomplete)
- Incoming webhooks (create, execute)
- Example bots (modbot, welcome bot)
- TUI client (Bubbletea, vim-style, voice support)
- Roles & permissions system
- Push notification backend (VAPID)
- Push notification frontend (subscribe toggle in settings)
- WebAuthn passkey scaffolding
- WebAuthn frontend (register/login buttons)
- WebAuthn backend (full begin/finish flow)
- REST API documentation (Swagger UI at /docs)
- Push notification mention parsing and dispatch
Project Structure
dumpsterChat/
├── cmd/
│ ├── server/ # Main API + WebSocket gateway
│ ├── migrate/ # Database migration CLI
│ └── tui/ # Terminal client (Bubbletea)
├── 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
│ ├── bot/ # Bot framework, auth, commands
│ ├── webhook/ # Incoming webhooks
│ ├── push/ # Push notification sender (VAPID)
│ ├── permissions/ # Permission bitflags and checker
│ ├── moderation/ # Mute, ban, kick, slowmode, audit log
│ ├── thread/ # Threaded conversations
│ ├── forum/ # Forum channel topics
│ ├── calendar/ # Events + RSVPs
│ ├── docs/ # Wiki documents
│ ├── lists/ # List kanban items
│ ├── availability/ # Scheduling/availability
│ └── block/ # User blocking
├── examples/ # Example bots
│ ├── modbot/ # Moderation bot
│ └── welcome/ # Welcome message bot
├── 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, BotManager, CommandManager, SlashCommandPopup
│ │ ├── stores/ # Zustand (auth, server, channel, message, ws, voice, presence, typing, push, bot)
│ │ └── 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 | No (auto-generated in Docker) |
POSTGRES_* |
Database connection | No (defaults in compose) |
LIVEKIT_* |
Voice/video server | No |
GIPHY_API_KEY |
Giphy API key for GIF search | No |
MINIO_* |
File upload storage | No |
Wiki
Full documentation: dumpsterChat wiki
License
AGPLv3
Description
A chaotic, self-hosted Discord-like platform for ~12 degenerates.
Built for fun, maintained with pride, named with intent.
https://dumpster.dustin.coffee
Releases
1
v0.2.0 — Desktop App
Latest
Languages
TypeScript
62.3%
Go
36.5%
JavaScript
0.4%
HTML
0.4%
CSS
0.2%
Other
0.1%