3ef753ff69302bfd63c53b0d8808941cac705570
The token column was dropped in a previous migration step (ALTER TABLE webhooks DROP COLUMN IF EXISTS token), but the CREATE INDEX referencing it still ran, causing migration failure on databases where the column was already removed.
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%