No description
|
Thomas Boom
182ab5bf30
- 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 |
||
|---|---|---|
| .vscode | Init brief creation | |
| public | Init brief creation | |
| src | Bug fixes and stability improvements | |
| .cta.json | Init brief creation | |
| .env.example | Init brief creation | |
| .gitignore | Init brief creation | |
| AGENTS.md | Init brief creation | |
| package-lock.json | Init brief creation | |
| package.json | Init brief creation | |
| pnpm-lock.yaml | Init brief creation | |
| README.md | Init brief creation | |
| tsconfig.json | Init brief creation | |
| tsr.config.json | Init brief creation | |
| vite.config.ts | Init brief creation | |
Brief
A quiet, curated YouTube viewer. Only approved channels, no search, no counts.
Setup
- Get a YouTube Data API v3 key from the Google Cloud console.
- Copy
.env.exampleto.envand setYOUTUBE_API_KEY. - Edit
src/config/approved-channels.tsto set your channel list. - 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.