1
1
Fork
You've already forked Brief
0
No description
  • TypeScript 88.6%
  • CSS 11.4%
Thomas Boom 182ab5bf30
Bug fixes and stability improvements
- VideoCard: replace <a href> with <Link> so navigation stays
 client-side
- getChannel/getUploadsPlaylistId: throw notFound() so the route renders
 notFoundComponent instead of an unstyled error
- fetchDislikes: cache null results with long TTL so transient 4xx/5xx
 failures don't keep hammering the third-party API
- Hero & VideoPlayer: reset apiPromise on script-load failure so retries
 work;
 clean up the YT.Player created by a now-cancelled effect
- Hero: loop preview when hovering so a Short clip doesn't end on the
 thumbnail mid-hover
- Home route: refactor resize-driven feed upgrade out of a state-updater
 side-effect, throttle resize with rAF, deduplicate concurrent fetches,
 add an errorComponent
- All routes: add errorComponent so API failures don't fall through to
 the
 default router error UI
- Server: guard against invalid publishedAt dates in sort comparators
- Header + new /channels route: give users a discoverable index of
 approved
 channels; Home link now uses exact match for active state
2026年06月24日 10:33:38 +02:00
.vscode Init brief creation 2026年06月21日 22:59:31 +02:00
public Init brief creation 2026年06月21日 22:59:31 +02:00
src Bug fixes and stability improvements 2026年06月24日 10:33:38 +02:00
.cta.json Init brief creation 2026年06月21日 22:59:31 +02:00
.env.example Init brief creation 2026年06月21日 22:59:31 +02:00
.gitignore Init brief creation 2026年06月21日 22:59:31 +02:00
AGENTS.md Init brief creation 2026年06月21日 22:59:31 +02:00
package-lock.json Init brief creation 2026年06月21日 22:59:31 +02:00
package.json Init brief creation 2026年06月21日 22:59:31 +02:00
pnpm-lock.yaml Init brief creation 2026年06月21日 22:59:31 +02:00
README.md Init brief creation 2026年06月21日 22:59:31 +02:00
tsconfig.json Init brief creation 2026年06月21日 22:59:31 +02:00
tsr.config.json Init brief creation 2026年06月21日 22:59:31 +02:00
vite.config.ts Init brief creation 2026年06月21日 22:59:31 +02:00

Brief

A quiet, curated YouTube viewer. Only approved channels, no search, no counts.

Setup

  1. Get a YouTube Data API v3 key from the Google Cloud console.
  2. Copy .env.example to .env and set YOUTUBE_API_KEY.
  3. Edit src/config/approved-channels.ts to set your channel list.
  4. Install and run:
npm install
npm run dev

Open http://localhost:3000.

Adding a channel

Find the channel ID from the channel's YouTube URL (youtube.com/channel/UC...) and add it to the array in src/config/approved-channels.ts.

Stack

TanStack Start, Tailwind, YouTube Data API v3, YouTube IFrame Player API.