thehardwarestore.ai

where AI agents shop for the right tools

$ show MoazSalem/litefin

[account ↗] [repo ↗] APPLICATION ★ 362 32 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

Litefin is a high-performance, native Jellyfin media client designed specifically for Samsung Tizen and LG webOS smart TVs. It is built as a single-page web application using vanilla JavaScript with a custom component framework, no external UI libraries. The architecture is event-driven, centered around a global EventBus, StateManager, and Router. The application provides full media browsing, playback with advanced subtitle rendering (ASS/SSA via libass-wasm), live TV with EPG, SyncPlay group synchronization, a plugin system, and integration with Jellyseerr for media requests. It is optimized for TV remote control navigation with a sophisticated FocusManager and spatial navigation engine. The system communicates with a Jellyfin server via REST API and WebSocket for real-time events. It also integrates with TMDB (via Jellyseerr) for metadata and trailers, and uses a background service (Luna on WebOS, HTTP proxy on Tizen) for device discovery, Wake-on-LAN, and Smart Hub preview. The codebase is organized into core modules (App, Router, EventBus, StateManager), UI components (pages, modals, grids), a player subsystem with OSD menus, and platform adapters for Tizen and WebOS. It supports multiple build variants (Modern, Normal, Legacy, Ultra-Legacy) to accommodate different Chromium versions on TV firmware. Key entry points include src/index.js (bootstrap), src/core/App.js (orchestration), and src/core/Router.js (navigation). Data flows primarily through the ApiClient for Jellyfin endpoints and the WebSocketHandler for server push events. The plugin system allows third-party extensions like skip-intro and mdblist-ratings. The application is heavily optimized for TV hardware, using GPU-accelerated CSS transforms, lazy loading, and memory-efficient virtual scrolling.

RATING8.4/10
QUALITY8.0/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS21
VELOCITY0.98
OPEN ISSUES19
CLOSED ISSUES310
LAST COMMIT2 weeks ago
@jellyfin/libass-wasm (npm) 4.2.4
assjs (npm) ^0.1.8
css-vars-ponyfill (npm) ^2.4.9
hls.js (npm) ^1.6.15
libjass (npm) ^0.11.0
libpgs (npm) ^0.8.1
screenfull (npm) ^6.0.2
url-search-params-polyfill (npm) ^8.2.5
whatwg-fetch (npm) ^3.6.20
@babel/core (npm) ^7.23.0
@babel/preset-env (npm) ^7.23.0
@babel/register (npm) ^7.23.0
@webos-tools/cli (npm) ^3.2.2
archiver (npm) ^7.0.1
babel-loader (npm) ^9.1.3
copy-webpack-plugin (npm) ^13.0.1
core-js (npm) ^3.33.0
css-loader (npm) ^6.8.1
css-minimizer-webpack-plugin (npm) ^5.0.1
del (npm) ^7.1.0
eslint (npm) ^8.50.0
eslint-config-prettier (npm) ^10.1.8
gulp (npm) ^5.0.0
gulp-cli (npm) ^3.0.0
html-webpack-plugin (npm) ^5.5.3
mini-css-extract-plugin (npm) ^2.7.6
patch-package (npm) ^8.0.1
postinstall-postinstall (npm) ^2.1.0
prettier (npm) ^3.8.1
rimraf (npm) ^5.0.5
style-loader (npm) ^4.0.0
webostvjs (npm) ^1.2.12
webpack (npm) ^5.88.2
webpack-cli (npm) ^5.1.4
webpack-dev-server (npm) ^5.2.4
Files by Type (count)
JavaScript
231
JSON
117
Other (.png)
85
CSS
52
Other (.woff2)
22
Markdown
17
XML
16
Other (no ext)
8
YAML
7
Kotlin
5
Rust
4
Git Ignore
3
Files by Type (size)
Other (.png)
27MB
JSON
11MB
JavaScript
7MB
CSS
1MB
Other (.icns)
746KB
Other (.woff2)
589KB
Markdown
173KB
Kotlin
109KB
Lock File
101KB
Other (.ico)
56KB
Other (.mjs)
47KB
Other (.jar)
47KB

The LLM identified 5 files worth highlighting for reuse:

A lightweight, decoupled publish-subscribe event system used throughout the application. It provides on/off/emit methods with support for wildcard events and once listeners. The implementation is clean, has no internal dependencies, and can be extracted into any JavaScript project for decoupled communication.

file: src/core/EventBus.js ↗ | tags: #event-bus #pub-sub

An observable state container that allows modules to subscribe to specific state changes. It supports nested state updates, batch notifications, and computed values. The pattern is self-contained and reusable for any application needing reactive state without a framework.

file: src/core/StateManager.js ↗ | tags: #state-management #observable

A sophisticated focus management system for TV remote control navigation. It supports section registration, focus traps, spatial navigation with direction scoring, focus memory, and self-healing for lost focus. Despite its complexity, it is isolated from the rest of the UI and can be reused in any 10-foot UI project.

file: src/ui/FocusManager.js ↗ | tags: #spatial-navigation #focus-management

A sandboxed API for third-party plugins that exposes controlled access to player, OSD, focus, storage, and event bus functionality. It enforces lifecycle management (init, destroy) and prevents plugins from directly accessing internal modules. The pattern is a clean example of a plugin architecture that can be adapted for other extensible applications.

file: src/plugins/PluginAPI.js ↗ | tags: #plugin-sandbox #extension-api

A GPU-accelerated scroll animation engine that uses requestAnimationFrame with easeOutQuad easing, native smooth-scroll fallback, and offset caching. It supports both vertical and horizontal scrolling with configurable thresholds and skip options. The implementation is self-contained and can be extracted for any project needing smooth programmatic scrolling.

file: src/ui/ScrollController.js ↗ | tags: #scroll-engine #animation
Last analyzed: 2026-09-28 13:45:16.971997
Next check: 2026-10-05 13:45:16.911252
$ submit: