hobokenchicken 2a6b3830d5 Phase 5: TUI client (Bubbletea)
- cmd/tui/main.go: entry point with --server, --token, --version flags
- cmd/tui/config.go: config from ~/.config/dumpster/config.yaml or env vars
- cmd/tui/auth.go: login flow, session cookie management
- cmd/tui/api.go: HTTP client for servers, channels, messages, voice
- cmd/tui/model.go: root bubbletea model with state management
- cmd/tui/theme.go: Gruvbox dark lipgloss styles
- cmd/tui/servers.go: server bar with [D] style initials
- cmd/tui/channels.go: channel list with #text and 🔊 voice
- cmd/tui/chat.go: IRC-style message viewport with colored usernames
- cmd/tui/input.go: message input with > _ prompt
- cmd/tui/members.go: member list with ●/◐/○ status
- cmd/tui/ws.go: WebSocket client for real-time events
- cmd/tui/voice.go: voice state tracking and mute toggle
- cmd/tui/keys.go: vim-style keybindings (j/k, g/G, Tab, /, etc)
- cmd/tui/views.go: multi-pane layout rendering
- Makefile: added build-tui and run-tui targets
- go.mod/go.sum: added charmbracelet dependencies
2026-06-28 17:46:19 -04:00
2026-06-28 17:46:19 -04:00
2026-06-28 17:00:37 -04:00
2026-06-28 17:00:37 -04:00
2026-06-28 17:00:37 -04:00
2026-06-28 17:46:19 -04:00
2026-06-28 17:46:19 -04:00
2026-06-28 17:46:19 -04:00

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 deferred)

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)
  • Bot framework (token auth, CRUD, WebSocket gateway)
  • Slash commands (registration, autocomplete)
  • Incoming webhooks (create, execute)
  • Example bots (modbot, welcome bot)
  • Push notifications (backend VAPID keys needed)
  • Roles & permissions system
  • REST API documentation (OpenAPI/Swagger)
  • 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
│   ├── bot/              # Bot framework, auth, commands
│   └── webhook/          # Incoming webhooks
├── 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 Yes
POSTGRES_* Database connection Yes
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

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%