How aalejandrofer/grubdrops works
GrubDrops is a self-hosted Twitch and Kick drops miner. Admins configure accounts and game whitelists in the web console; the runtime discovers eligible campaigns, watches streams to accrue progress, claims rewards, and exposes status/history. The README documents platform-specific login and watch paths, including Kick’s WebSocket-to-Chrome fallback, plus notifications and SSO. The map uses documented capabilities where implementation excerpts are absent; links for those subsystems are limited to supported paths and avoid implying unverified calls.
Main entry points: db.go SQLite Store · watcher.go Drop Watcher · server.go Web Console · scheduler.go Account Scheduler
Components 24
Admin Console
- Web Console
internal/api/server.go - Accounts and Games
internal/api/handlers_accounts.go - Drops Catalog
internal/api/handlers_drops.go - Dashboard and History
internal/api/handlers_dashboard.go - Runtime Settings
internal/api/handlers_settings.go
Mining Runtime
- Account Scheduler
internal/scheduler/scheduler.go - Drop Watcher
internal/watcher/watcher.go - Campaign Discovery
internal/discovery/discovery.go - Accrual Canary
internal/canary/canary.go
Platform Access
- Twitch Backend
internal/platform/twitch/backend.go - Kick Backend
internal/platform/kick/backend.go - Browser RPC Client
internal/auth/browser/client.go - Browser Sidecar
internal/auth/browser/sidecar/server.go
Identity and Alerts
- Platform Login
internal/api/handlers_login_twitch.go - SSO
internal/auth/oidc/oidc.go - Session Health
internal/authcheck/authcheck.go - Discord Alerts
internal/notify/router.go - Update Checks
internal/update/checker.go
Persistence
- SQLite Store
internal/store/db.go - Encrypted Sessions
internal/store/sessions.go - Campaign Persistence
internal/store/campaign_persister.go - Claim History
internal/store/claim_recorder.go
Other components
- Administrator
- Twitch and Kick
Connections 36
- Administrator → Web Console: uses console
- Web Console → Accounts and Games: routes requests
- Web Console → Drops Catalog: routes requests
- Web Console → Dashboard and History: routes requests
- Web Console → Runtime Settings: routes requests
- Accounts and Games → SQLite Store: reads and writes
- Accounts and Games → Account Scheduler: reloads accounts
- Drops Catalog → SQLite Store: reads and writes
- Dashboard and History → SQLite Store: reads status
- Runtime Settings → SQLite Store: reads and writes
- Runtime Settings → Discord Alerts: tests alerts
- Account Scheduler → SQLite Store: loads account state
- Account Scheduler → Encrypted Sessions: loads sessions
- Account Scheduler → Drop Watcher: runs accounts
- Drop Watcher → Campaign Discovery: uses campaigns
- Campaign Discovery → Campaign Persistence: persists campaigns
- Drop Watcher → Twitch Backend: watches and claims
- Drop Watcher → Kick Backend: watches and claims
- Twitch Backend → Twitch and Kick: calls Twitch API
- Kick Backend → Twitch and Kick: calls Kick API
- Kick Backend → Browser RPC Client: uses fallback
- Browser RPC Client → Browser Sidecar: calls gRPC
- Browser Sidecar → Twitch and Kick: drives browser
- Drop Watcher → Claim History: records claims
- Drop Watcher → Discord Alerts: emits events
- Platform Login → Encrypted Sessions: persists sessions
- Platform Login → Twitch and Kick: authenticates
- SSO → Twitch and Kick: federates identity
- Session Health → Encrypted Sessions: checks sessions
- Session Health → Discord Alerts: reports auth state
- Accrual Canary → Twitch Backend: probes accrual
- Accrual Canary → Kick Backend: probes accrual
- Update Checks → Twitch and Kick: checks releases
- Encrypted Sessions → SQLite Store: encrypted storage
- Campaign Persistence → SQLite Store: writes campaigns
- Claim History → SQLite Store: writes history