How ozencb/couchtube works
CouchTube serves a browser-based, scheduled YouTube channel experience and an optional channel editor. The main playback path loads channels, requests the video scheduled for the current time, and plays its configured section; editor and custom-list flows manage the same channel data. The graph follows the sampled route wiring and service/repository calls. README-described capabilities are retained where implementation excerpts are incomplete; those documentation-based links are labeled accordingly.
Main entry points: main.go HTTP server · script.js Playback UI · services/media.go Playback and lists · handlers/media.go Media API
Components 19
Server runtime
- HTTP server
cmd/main.go - Media API
handlers/media.go - Config endpoint
handlers/config.go - Channel JSON models
models/json/media.go
Channel playback
- Playback UI
static/script.js - YouTube player
- Playback and lists
services/media.go
Channel editor
- Editor API
handlers/editor.go - Editor UI
static/editor/editor.js - Editor operations
services/editor.go - Playlist importer
services/editor.go - Editor access guard
middleware/editor-guard.go
Persistence
- Channel repository
repositories/channel_repository.go - Video repository
repositories/video_repository.go - SQLite connector
db/connector.go - SQLite database
- Database models
models/db/channel.go
Other components
- Viewer
- Custom JSON source
Connections 31
- Viewer → Playback UI: uses
README.md - Playback UI → YouTube player: plays video
static/script.js - Playback UI → HTTP server: requests channels
static/script.js - Playback UI → HTTP server: requests current video
static/script.js - HTTP server → Media API: routes requests
cmd/main.go - HTTP server → Editor API: routes editor
cmd/main.go - HTTP server → Config endpoint: routes config
cmd/main.go - HTTP server → Editor access guard: guards editor routes
cmd/main.go - HTTP server → SQLite connector: opens database
cmd/main.go - HTTP server → Editor UI: serves editor
cmd/main.go - Media API → Playback and lists: delegates requests
handlers/media.go - Editor API → Editor operations: delegates operations
handlers/editor.go - Editor UI → HTTP server: calls editor API
- Playback and lists → Channel repository: fetches channels
services/media.go - Playback and lists → Video repository: fetches scheduled video
services/media.go - Editor operations → Channel repository: manages channels
services/editor.go - Editor operations → Video repository: manages videos
services/editor.go - Playback and lists → SQLite database: replaces list data
services/media.go - Editor operations → SQLite database: loads defaults
- Channel repository → SQLite database: queries channels
repositories/channel_repository.go - Video repository → SQLite database: queries videos
repositories/video_repository.go - SQLite connector → SQLite database: opens file
db/connector.go - Channel repository → Database models: scans records
repositories/channel_repository.go - Video repository → Database models: scans records
repositories/video_repository.go - Media API → Channel JSON models: decodes list request
handlers/media.go - Editor API → Channel JSON models: decodes import
handlers/editor.go - Custom JSON source → Media API: submits JSON URL
README.md - Playback and lists → Custom JSON source: fetches JSON list
services/media.go - Editor API → Playlist importer: imports playlist
handlers/editor.go - Playlist importer → YouTube player: fetches playlist page
services/editor.go - Playback UI → Media API: invalidates unavailable video