diff --git a/README.md b/README.md index 6a0e001..7d8395b 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@ Built for fun, maintained with pride, named with intent. ## Quick Start ```bash +# 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 @@ -26,31 +30,83 @@ 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 + +- [x] Registration + login (Argon2id) +- [x] Server + channel CRUD +- [x] Messaging with WebSocket real-time delivery +- [x] Cursor-based message pagination +- [x] User profiles (display name, bio, accent color, status, avatar/Gravatar) +- [x] File uploads (MinIO) +- [x] Giphy GIF search + trending +- [x] Terminal/Gruvbox dark aesthetic +- [ ] Voice/video rooms (LiveKit, Phase 2) +- [ ] Roles + permissions (Phase 3) +- [ ] PWA push notifications (Phase 3) +- [ ] WebAuthn passkeys (Phase 3) +- [ ] TUI client (Phase 5) + ## Project Structure ``` -dumpster/ +dumpsterChat/ ├── cmd/ │ ├── server/ # Main API + WebSocket gateway -│ ├── tui/ # Terminal client (Phase 5) -│ └── migrate/ # Database migrations CLI +│ ├── migrate/ # Database migration CLI +│ └── tui/ # Terminal client (Phase 5) ├── internal/ -│ ├── auth/ # Auth logic +│ ├── 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 -│ ├── channel/ # Channel CRUD -│ ├── message/ # Message CRUD -│ ├── voice/ # LiveKit integration -│ ├── role/ # Roles + permissions -│ ├── gateway/ # WebSocket gateway -│ ├── upload/ # File upload (minio) -│ └── middleware/ # Auth, rate limiting, CORS -├── migrations/ # SQL migrations +│ └── upload/ # MinIO file upload + serve ├── web/ # React frontend (PWA) -├── docker/ # Docker Compose + Caddyfile -├── scripts/ # Helper scripts -└── docs/ # Documentation +│ ├── src/ +│ │ ├── components/ # Layout, ChatArea, LoginForm, UserSettings, GiphyPicker, etc. +│ │ ├── stores/ # Zustand (auth, server, channel, message, ws) +│ │ └── 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](ssh://git@git.dustin.coffee:2222/hobokenchicken/dumpsterChat.wiki.git) + ## License AGPLv3