hobokenchicken 4a02d054cc
Release Desktop Apps / build-windows (push) Failing after 3h0m44s
Release Desktop Apps / build-linux (push) Has been cancelled
Release Desktop Apps / release (push) Has been cancelled
fix: release workflow for Gitea Actions (runner labels + gitea-release-action)
2026-07-07 14:19:22 -04:00
2026-07-02 14:56:58 -04:00
2026-06-28 17:00:37 -04:00

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
  • Inline markdown formatting toolbar (B/I/S/code/spoiler)
  • GIF picker and kaomoji in DMs
  • Restore last active channel on login

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
│   ├── dm/               # Direct messages (conversations)
│   ├── 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
VAPID_PUBLIC_KEY Web push public key No (generate with go run ./cmd/keygen)
VAPID_PRIVATE_KEY Web push private key No
VAPID_SUBJECT Contact for VAPID JWT (e.g. admin@your.domain) No

Push Notifications

Web push uses VAPID keys. Generate a keypair:

go run ./cmd/keygen

Copy the output into your .env. Set VAPID_SUBJECT to your email address without the mailto: prefix (the library adds it automatically).

Users are prompted to enable notifications on login. On iOS, the prompt requires a tap gesture, so a banner appears instead of a silent auto-subscribe. On Android, notifications deliver through FCM when Chrome is running (even in background). Ensure Chrome battery optimization is set to Unrestricted for reliable delivery when the PWA is closed.

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.2%
Go 36.6%
JavaScript 0.4%
HTML 0.4%
CSS 0.2%
Other 0.1%