zwitschi
c2f9f9ed62
perf(playout): parallelize playlist validation with dedup and worker pool
CI / test (push) Successful in 1m52s
CI / docker (push) Successful in 55s
2026-08-16 10:30:15 +02:00
zwitschi
4fe09a0a3d
fix(auth): set SameSite=None for viewer session cookie over HTTPS and update docs
2026-08-16 09:45:58 +02:00
zwitschi
5585a6ecc3
fix(frontend): prefix auth API requests with VITE_PUBLIC_APP_URL for cross-origin Workers hosting
CI / test (push) Successful in 1m32s
CI / docker (push) Successful in 54s
2026-08-16 09:26:35 +02:00
zwitschi
6950bba85d
feat(playout): replace time-based R2 retention with run-count and size caps
CI / test (push) Successful in 1m33s
CI / docker (push) Successful in 51s
2026-08-15 18:59:26 +02:00
zwitschi
cef002862e
feat(chat): add transient presence flash and 5s reconnect grace period
CI / test (push) Successful in 1m33s
CI / docker (push) Successful in 2m10s
2026-08-13 20:45:52 +02:00
zwitschi
70a5159f81
fix(backend): serialize SQLite test connections and await async normalize
CI / test (push) Successful in 1m44s
CI / docker (push) Successful in 2m45s
2026-08-13 13:40:03 +02:00
zwitschi
121fdbacdc
feat: runtime config, Matomo analytics, chat accounts, DM history/search, and Prometheus retention
2026-08-13 13:12:35 +02:00
zwitschi
06ab5b4655
feat: add automatic media normalization, R2 retention cleanup, and seamless playout loops
2026-08-13 11:59:46 +02:00
zwitschi
e15d89edfe
fix(playout): differentiate FFmpeg crashes from clean exits and enrich health metrics
CI / test (push) Successful in 1m44s
CI / docker (push) Successful in 56s
2026-08-12 14:26:18 +02:00
zwitschi
926d70dc3c
fix: rename R2 object key prefix from live/ to hls/ for consistency
CI / test (push) Successful in 1m37s
CI / docker (push) Successful in 48s
2026-08-11 17:21:53 +02:00
zwitschi
2a718e4652
fix: guard all R2 operations behind nil client checks for local dev support
2026-08-11 14:46:50 +02:00
zwitschi
377dc69859
chore: fix Cloudflare project name to linearvoid-frontend in deploy workflow
CI / test (push) Successful in 1m42s
CI / docker (push) Successful in 51s
2026-08-10 19:50:16 +02:00
zwitschi
55a128dc3a
fix: flat local HLS paths for nginx compat + edge cache validation script
...
CI / test (push) Failing after 11s
CI / docker (push) Skipped
- Revert local HLS to flat /app/hls/seg-{seq}.m4s (nginx serves from this dir)
- runID only used in R2 keys (live/{runID}/seg-{seq}.m4s)
- This fixes 404 on linearvoid.tv/hls/playlist.m3u8 caused by r-{runID} subdir
- Added scripts/validate-edge-cache.sh: MISS→HIT, immutable headers, manifest freshness
- Phase 4 marked complete. Cleaned up LEGACY streaming gaps in TODO.md
2026-08-10 18:01:55 +02:00
zwitschi
9178b7b295
fix: TypeScript errors + workflow pipeline ordering
...
CI / test (push) Successful in 1m28s
CI / docker (push) Successful in 1m0s
- Fix hls! null assertions in error handler (TS18047)
- Fix test mock type errors: remove unused errorCall, use (as any) cast
- Pipeline ordering: CD + Pages deploy now run after CI completes (workflow_run: [CI])
- Add GOFLAGS=-mod=mod to playout Docker build for new fsnotify dep
2026-08-10 17:29:46 +02:00
zwitschi
18459a9811
feat: close STREAMING.md production readiness gaps
...
CI / test (push) Failing after 9s
CI / docker (push) Skipped
Deploy to Cloudflare Pages / deploy (push) Failing after 10s
CD / deploy (push) Successful in 47s
- Added run ID + unique segment naming (r-{ISOTIME}/seg-{seq}.m4s)
- Added fsnotify watcher for real-time R2 segment upload (~7s)
- Added atomic manifest publication (temp key → CopyObject)
- Fixed manifest Cache-Control: public, max-age=1, s-maxage=2, must-revalidate
- Added hls.js error recovery: bounded retries (5x), exponential backoff, reconnecting UI
- Enriched /health endpoint: run_id, active_item, last_segment_seq, last_r2_pub, consecutive_failures, unhealthy detection
- Updated tests: HealthHandler (new fields + unhealthy), player error recovery test
- Updated TODO.md, BACKLOG.md, DONE.md, MEMORY.md
2026-08-10 17:20:54 +02:00
zwitschi
f73928103a
fix: linting and go test
CD / deploy (push) Successful in 55s
CI / test (push) Successful in 1m32s
CI / docker (push) Successful in 2m51s
Release / release (push) Successful in 37s
2026-08-10 09:30:29 +02:00
zwitschi
f9aba11b90
feat: add metrics, observability, test fixtures, and scaling playbook artifacts
CD / deploy (push) Successful in 57s
CI / test (push) Failing after 1m29s
CI / docker (push) Skipped
2026-08-10 00:23:50 +02:00
zwitschi
914a518f20
fix: downgrade Go version to 1.25.0 in playout go.mod
CD / deploy (push) Successful in 45s
CI / test (push) Successful in 1m42s
CI / docker (push) Successful in 1m39s
2026-08-07 17:31:58 +02:00
zwitschi
8064e459f2
fix: playout Dockerfile use existing go.mod instead of init
CI / test (push) Successful in 1m43s
CI / docker (push) Failing after 24s
CD / deploy (push) Successful in 1m1s
2026-08-07 16:24:21 +02:00
zwitschi
587561f9fc
fix: data race in PushChatHistory WebSocket writes
CD / deploy (push) Successful in 57s
CI / test (push) Successful in 1m34s
CI / docker (push) Failing after 25s
2026-08-07 16:20:14 +02:00
zwitschi
e8a43b8a79
test(chat,playout): enable test suite, coverage gate, switch to pure-Go SQLite driver
2026-08-07 14:06:30 +02:00
zwitschi
b3a10ba3ef
refactor: modularize chat backend, update docs for .m4s segments
2026-08-07 13:16:44 +02:00
zwitschi
7244c1d658
feat: enhance chat service with Redis pub/sub for multi-instance message handling, add instance ID for deduplication
2026-08-06 20:44:29 +02:00
zwitschi
0f81a81029
feat: monitoring exporters, alerting, rate limiting, backups, incident runbook
...
CI / test (push) Successful in 58s
CI / docker (push) Successful in 2m22s
CI / release (push) Skipped
- Add 4 Prometheus exporters: nginx (9113), redis (9121), postgres (9187), node (9100)
- Create 8 alerting rules in monitoring/prometheus/alerts.yml
- Update prometheus.yml with all scrape targets + rule_files
- WS connection rate limiting: max 5/IP/60s (Redis INCR)
- Admin login rate limiting: max 5/IP/5min (Redis INCR)
- 3 backup scripts: daily to R2 (14d), weekly full (8w), verify with restore test
- docs/incident-runbook.md with 5-tier triage + escalation
- Update CD workflow: full prometheus config + alerts seeding
2026-08-06 19:31:40 +02:00
zwitschi
b5710548b1
fix: botched edit
CI / test (push) Successful in 2m21s
CI / docker (push) Successful in 3m2s
CI / release (push) Skipped
Release / release (push) Successful in 26s
2026-08-06 18:08:23 +02:00
zwitschi
d2e5b64ece
fix: chat build syntax errors, disable GitHub cache on Gitea runner
...
CI / test (push) Failing after 57s
CI / docker (push) Skipped
CI / release (push) Skipped
- Fix 3 orphaned function bodies in main.go (handleAdminSchedule,
handleAdminSystemSummary, probeMediaDurationSeconds) caused by
insertions that split function headers from bodies
- Remove cache: true from setup-go and cache: npm from setup-node
(Gitea runner times out 135s trying to reach GitHub cache API)
- Add go vet ./... step replacing placeholder echo
- Remove || echo fallback from lint (tsc --noEmit is working)
2026-08-06 18:01:34 +02:00
zwitschi
5b5cdc4cd8
chore: release v1.0.7
...
CI / test (push) Successful in 9m11s
CI / docker (push) Failing after 2m39s
CI / release (push) Skipped
Release / release (push) Canceled after 2m11s
Playout: slate fallback, strict ffprobe validation, Prometheus metrics
Chat: history on join, DM offline delivery, env-config rate limits,
Redis auto-reconnect, heartbeat, ban/mute enforcement, DM metrics
Viewer: presence indicators, schedule overlay, public /api/schedule
Admin: playlist drag-reorder, schedule overrides CRUD, user actions,
inline mod buttons, CSV export, config editor, restart buttons,
upload normalization gate, analytics time range
nginx: CORS preflight, JSON health, stub_status
Docs: test-lab vs production distinction across all configs/docs
Infra: Redis maxmemory, CD health IP-agnostic, slate volume mount
2026-08-06 17:41:52 +02:00
zwitschi
69df0e51b8
release version 1.0.6
CI / test (push) Successful in 9m23s
CI / docker (push) Successful in 3m14s
CI / release (push) Skipped
2026-08-05 17:09:03 +02:00
zwitschi
74133ec589
feat: add chat log admin management and refactor admin panel to lazy-load tab content
2026-08-05 11:29:11 +02:00
zwitschi
2c06265d11
feat: implement resumable chunked media upload with progress indicators in admin UI
CI / test (push) Successful in 1m38s
CI / docker (push) Successful in 3m11s
CI / release (push) Skipped
2026-08-04 20:21:53 +02:00
zwitschi
ab3fab3e68
fix: minor optimization of build
2026-08-04 19:49:07 +02:00
zwitschi
7cfddfc7ef
feat: enhance media management with CRUD operations and runtime tracking in admin UI
CI / test (push) Successful in 1m39s
CI / docker (push) Successful in 3m9s
CI / release (push) Skipped
2026-08-04 19:28:23 +02:00
zwitschi
c6f28ff7af
fix: rearrange steps again
CI / test (push) Successful in 1m35s
CI / docker (push) Failing after 30s
CI / release (push) Skipped
2026-08-04 13:00:23 +02:00
zwitschi
072a91961f
fix: rearrange steps again
CI / test (push) Successful in 6m3s
CI / docker (push) Failing after 28s
CI / release (push) Skipped
2026-08-04 12:51:34 +02:00
zwitschi
7184240dd4
fix: move copy step up
CI / test (push) Successful in 1m34s
CI / docker (push) Failing after 15s
CI / release (push) Skipped
2026-08-04 12:46:47 +02:00
zwitschi
9cd0419c0c
fix: only one media folder
CI / test (push) Successful in 6m5s
CI / docker (push) Failing after 1m52s
CI / release (push) Skipped
2026-08-04 12:37:11 +02:00
zwitschi
d3266f8feb
fix: reorder copy steps
CI / test (push) Successful in 1m36s
CI / docker (push) Failing after 29s
CI / release (push) Skipped
2026-08-04 12:33:05 +02:00
zwitschi
b532507374
fix: adjust copy
CI / test (push) Successful in 1m32s
CI / docker (push) Failing after 15s
CI / release (push) Skipped
2026-08-04 12:27:44 +02:00
zwitschi
5c1a8cbe4f
reorder copy steps
CI / test (push) Successful in 1m40s
CI / docker (push) Failing after 24s
CI / release (push) Skipped
2026-08-04 12:19:17 +02:00
zwitschi
502fefff33
fix: move demodata into playout build context, revert root media changes
CI / test (push) Successful in 1m30s
CI / docker (push) Failing after 30s
CI / release (push) Skipped
2026-08-04 12:10:38 +02:00
zwitschi
1af9e59a56
rename data directory for initial demo data
CI / test (push) Failing after 2m26s
CI / docker (push) Skipped
CI / release (push) Skipped
2026-08-04 11:54:44 +02:00
zwitschi
fc799da000
copy full folder instead of playlist.txt
CI / test (push) Failing after 2m25s
CI / docker (push) Skipped
CI / release (push) Skipped
2026-08-04 11:46:21 +02:00
zwitschi
2b091adce8
move demo-data to its own folder
CI / test (push) Failing after 2m24s
CI / docker (push) Skipped
CI / release (push) Skipped
2026-08-04 11:40:22 +02:00
zwitschi
c54210434e
feat: bundle demo media and playlist in playout image for out-of-the-box HLS
CI / test (push) Failing after 2m30s
CI / docker (push) Skipped
CI / release (push) Skipped
2026-08-04 11:34:20 +02:00
zwitschi
cdecdd2d4a
fix: add curl to chat runtime image for healthcheck
2026-08-04 11:00:00 +02:00
zwitschi
6b494a34fe
feat: add admin login page and authentication API
...
CD / deploy (push) Failing after 27s
CI / test (push) Successful in 1m54s
CI / docker (push) Canceled after 0s
CI / release (push) Canceled after 0s
- Created a new login page for admin access at frontend/admin/login/index.html.
- Implemented form submission with error handling for login credentials.
- Updated frontend/index.html to mute the video player and removed unnecessary Alpine.js data binding.
- Enhanced manifest URL resolution in frontend/src/main.ts to include cache-busting parameters.
- Modified vite.config.ts to include the new admin login page in the build process.
- Updated nginx.conf to handle admin login routing, authentication, and API proxying for admin actions.
2026-08-03 17:19:05 +02:00
zwitschi
1ae0ad121b
update environment configuration for local development, enhance database initialization, and improve Nginx routing for admin access
2026-08-03 14:26:11 +02:00
zwitschi
2e061dff28
update environment configuration, enhance setup guide, and align documentation with new domain structure
2026-08-03 14:09:51 +02:00
zwitschi
15a2aaa1a1
Add complete playout service, chat backend, frontend with HLS player and live chat, Docker integration with health checks, updated CHANGELOG and architecture docs
2026-08-02 16:43:12 +02:00
zwitschi
0785260689
Add Docker setup, .env.example, updated .gitignore/CHANGELOG and ADRs 004-007 + arc42 template
2026-08-02 16:05:18 +02:00