Streaming upgrade: provider runtime, aggregate API, optimized artwork proxy, and cinematic UI redesign - #16
Merged
Merged
Conversation
… proxy Streaming engine: - Move the node:vm provider runtime out of lib into src/providers with a registry (config, manifest, modules), sandbox, errors, fan-out module loader, and shared fetch layer. Add src/media entry points (catalog, episodes, search, stream) that resolve provider modules at runtime. - Aggregate search and the home feed server-side; route handlers now execute provider modules in-process (api/catalog, featured, media, media/episodes, providers, proxy, search, stream). The play/transcode endpoints are removed along with ffmpeg-static and hls.js deps. - Add an SSRF-guarded, same-origin artwork proxy (api/image) so every poster/backdrop/logo loads as an optimized next/image; drop the CDN preconnect allowlist from the root layout and enable image optimization (avif/webp, 24h TTL) in next.config. - Rename lib/api/providers to lib/state/providers and delete the unused useMseStream hook.
…List - Dock: replace Header/MobileNav with a floating glassy dock (FloatingMenu) with lucide icons, tooltips, and a spring-driven active state. - Hero: restyle layout and add a shimmer sweep for loading states; carousel rails get consistent motion, typography, and poster hover interactions. - Player: rework PlayerStage with an episode picker, audio/subtitle settings tabs, and refined controls; DetailModal and PlayerModal adopt the new visual language and vidstack base styles. - Search: glassy command-bar with focus glow, loading spinner, clear button, kbd hint, and pill-style history chips. - Settings: sticky category nav with scroll-spy, icon-tile section headers, visual theme preview cards, segmented speed control with sliding pill, spring toggle, and live provider status. - My List: filter/sort segmented controls with animated pill, progress bars on cards, richer empty states, and fieldset/legend semantics. - Adopt Tailwind v4 utility names (outline-hidden, shadow-xs, rounded-xs) across all components.
- Add a GitHub Actions workflow (pnpm, Node 22) running typecheck, lint, and build on push to main and on every pull request. - Add vercel.json with pnpm build/install commands and the Next.js framework preset. - Migrate tooling to pnpm: packageManager field, pnpm-workspace.yaml onlyBuiltDependencies, justfile defaults to pnpm, and .gitignore entries for .turbo and .vercel. - Document provider runtime environment requirements in .env.example and add docs/ARCHITECTURE.md describing the streaming architecture. - Enable next/image optimization (avif/webp, 24h minimum TTL) now that all artwork flows through the same-origin proxy; remove the ffmpeg-static serverExternalPackages entry with the transcode stack. - Fix biome.json ignore pattern for next-env.d.ts across all files.
- Add the ui-ux-pro-max design skill with its searchable data catalog (colors, typography, icons, stacks, UX guidelines) and Python search scripts. - Remove unused skills (caveman, find-skills, hono, next-cache-*, vercel-react-view-transitions) and update skills-lock.json and AGENTS.md accordingly.
Remove the old provider runtime that lived under src/lib/providers; its role is fully superseded by the src/providers package (registry, sandbox, runtime) introduced in the backend commit.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
pnpm v11 removed onlyBuiltDependencies in favor of allowBuilds, so the msw approval was silently ignored and fresh CI installs failed with ERR_PNPM_IGNORED_BUILDS. Switch pnpm-workspace.yaml to the allowBuilds map and note the version requirement. Verified with a clean `pnpm install --frozen-lockfile` in a temp dir.
Let users remove a title from Continue watching one at a time.
- Render an X chip at each poster's top-right, as a sibling of the resume
button so clicks can never trigger playback.
- Reveal on card hover / keyboard focus for fine pointers and always for
coarse (touch) pointers — the action is never hover-only.
- 44px hit target with a smaller scrim chip so it stays legible over any
poster; each button gets a unique aria-label ("Remove <title> from
continue watching").
- Uses the existing clear(link, episode) from useProgress and animates the
card out via AnimatePresence; the section disappears when the last card
is cleared.
Scrolling the app on Android felt low-FPS / freeze-prone. Two compounding causes, both fixed: - body used background-attachment: fixed with two large gradients. Fixed backgrounds make Chrome/Android re-rasterize the entire page background on every scroll frame. The gradient now scrolls with the content as a normal composited layer (zero per-frame repaint) — visually identical at the top of the page. - backdrop-filter on large, persistent surfaces pinned over scrolling content (fixed dock, sticky settings nav, search bar) forced a re-blur every frame. Each now uses a near-opaque background instead: - FloatingMenu dock: bg-card/85 + backdrop-blur-xl -> bg-card/95 - SettingsView sticky nav: bg-background/85 + backdrop-blur-md -> bg-background/95 - SearchBar: bg-background/70 + backdrop-blur-xl -> bg-background/90 Small chip blurs (hero pills, history pills, card badges) are kept — tiny areas with negligible cost that preserve the glassy aesthetic.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Large upgrade to harustream, split across five logically-grouped commits:
ui-ux-pro-maxskill, remove unused skillslib/providersmoduleBackend
node:vmprovider runtime intosrc/providerswith a registry (config, manifest, modules), sandbox, error types, fan-out loader, and shared fetch layer; addssrc/mediaentry points (catalog, episodes, search, stream) that resolve provider modules at runtime./api/catalog,/api/featured,/api/media,/api/media/episodes,/api/providers,/api/proxy,/api/search,/api/stream). The/api/playand transcode stack (ffmpeg-static,hls.js) are removed./api/image/[...encoded]) so every poster/backdrop/logo loads as an optimizednext/image(avif/webp, 24h TTL). The CDN preconnect allowlist is dropped from the root layout.lib/api/providers→lib/state/providers; deletes the unuseduseMseStreamhook and the oldlib/providersmodule.UI/UX
Header/MobileNavreplaced by a floating glassy dock (FloatingMenu) with lucide icons, tooltips, and spring-driven active state.PlayerStagereworked with an episode picker, audio/subtitle settings tabs, and refined controls;DetailModal/PlayerModalmatch the new visual language; vidstack base styles imported.fieldset/legendsemantics.outline-hidden,shadow-xs,rounded-xs) across components.Infra & tooling
typecheck,lint,buildon push to main and every PR.vercel.jsonwith pnpm build/install commands.packageManager,onlyBuiltDependencies, justfile defaults,.gitignorefor.turbo/.vercel).docs/ARCHITECTURE.mdand provider-runtime env documentation in.env.example.Verification
pnpm typecheck,pnpm lint,pnpm buildall pass on the branch.Notes