Skip to content

Show live and recording counts on /channels - #107

Merged
ralyodio merged 1 commit into
masterfrom
worktree-channel-counts
Sep 22, 2026
Merged

ralyodio merged 1 commit into
masterfrom
worktree-channel-counts

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

What

Each card on https://pairux.com/channels now reads N subscribers · N live · N recordings, with the live figure in red when non-zero.

How

  • New migration redefines list_all_channels with live_count and recording_count. The return type changed, so it drops the old signature first.
  • live_count uses the exact filter the channel page's streams list uses (public session, host seen in the last 90 s).
  • recording_count uses the exact filter list_channel_recordings uses (status ready, playback URL present, public session).
  • apps/web/src/app/channels/page.tsx renders the two figures.

Prod

Migration already applied to project yuwjbjskkghlyrdkhexu as channel_directory_counts and verified: Mosh Coding returns 5 recordings.

Checks

  • tsc --noEmit in apps/web: clean
  • eslint + prettier on the changed page: clean

🤖 Generated with Claude Code

The channel directory showed subscribers and a pulsing dot, but nothing
about how much was on a channel. list_all_channels now returns live_count
(public sessions with a host seen in the last 90 s, same rows the channel
page lists as streams) and recording_count (finished, playable recordings
of public sessions, same rows list_channel_recordings returns), and each
card reads "6 subscribers · 0 live · 5 recordings".

The return type changed so the migration drops the old signature first.
Applied to prod (yuwjbjskkghlyrdkhexu) as channel_directory_counts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

34 finding(s)

HIGH/CRITICAL: 4 | MEDIUM: 26 | LOW: 4

Severity Rule Location
HIGH sh-eval-expansion .githooks/pre-commit:33
HIGH js-electron-node-integration apps/desktop/src/main/window.ts:49
HIGH sh-unquoted-expansion-destructive apps/installer/scripts/install.sh:715
HIGH sh-unquoted-expansion-destructive apps/installer/scripts/install.sh:910
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:691
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:813
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:815
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:1064
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:1066
MEDIUM sh-remote-script-execution apps/livekit/setup-livekit-server.sh:93
MEDIUM sh-remote-script-execution apps/turn/deploy-droplet.sh:62
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:48
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:73
MEDIUM js-unescaped-html-sink apps/web/src/app/c/[handle]/page.tsx:192
MEDIUM js-unescaped-html-sink apps/web/src/app/l/[joinCode]/page.tsx:129
MEDIUM js-unescaped-html-sink apps/web/src/app/l/[joinCode]/page.tsx:213
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:142
MEDIUM js-unescaped-html-sink apps/web/src/app/live/page.tsx:145
MEDIUM js-unescaped-html-sink apps/web/src/app/page.tsx:122
MEDIUM js-unescaped-html-sink apps/web/src/app/pricing/page.tsx:284
MEDIUM js-open-redirect apps/web/src/app/pricing/UpgradeButton.tsx:50
MEDIUM js-unescaped-html-sink apps/web/src/app/u/[username]/page.tsx:282
MEDIUM js-open-redirect apps/web/src/hooks/useDesktopHandoff.ts:24
MEDIUM redos-nested-quantifier apps/web/src/lib/deliverable.ts:11
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:124
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:393
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:396
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:405
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:608
MEDIUM sql-template-interpolation packages/ai-core/src/prompts.ts:36
LOW secret-generic-credential apps/livekit/fly.toml:12
LOW secret-generic-credential apps/turn/fly.toml:11
LOW secret-generic-credential docs/API.md:747
LOW secret-generic-credential docs/API.md:753

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit a99399d into master Sep 22, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant