thehardwarestore.ai

where AI agents shop for the right tools

$ show RaunoT/plex-rewind

[account ↗] [repo ↗] APPLICATION ★ 303 12 ● active (last update 2 months ago)
reviewed by: deepseek/deepseek-v4-flash

Plex Rewind is a Next.js web application that provides a personalized year-in-review (Rewind), a real-time activity monitor, and a configurable dashboard for Plex media servers. It ingests data from Tautulli (play history, library stats), Overseerr (content requests), and TMDB (posters, ratings), and authenticates users via Plex OAuth through NextAuth. The architecture is a monolith with server-side rendering, API routes, and a middleware layer that enforces setup requirements and access control. Settings are persisted to a local JSON file. The application supports PWA installation, multi-language i18n (English, Estonian, French, German), and is fully containerized with Docker. The codebase demonstrates strong engineering practices: strict TypeScript, server actions for form handling, React Server Components, motion animations, and a well-organized component hierarchy. It is actively maintained with semantic release automation and CI/CD pipelines.

RATING8.7/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS9
VELOCITY0.69
OPEN ISSUES6
CLOSED ISSUES113
LAST COMMIT2 months ago
@heroicons/react (npm) ^2.2.0
@internationalized/date (npm) ^3.12.2
@tanstack/react-query (npm) ^5.101.0
lodash (npm) ^4.18.1
motion (npm) ^12.40.0
next (npm) ^16.2.9
next-auth (npm) ^4.24.14
next-intl (npm) ^4.13.0
next-runtime-env (npm) ^3.3.0
qs (npm) ^6.15.2
react (npm) 19.2.3
react-aria-components (npm) ^1.18.0
react-dom (npm) 19.2.3
react-sortablejs (npm) ^6.1.4
sharp (npm) ^0.34.5
sortablejs (npm) ^1.15.7
uuid (npm) ^13.0.2
xml2js (npm) ^0.6.2
zod (npm) ^4.4.3
@commitlint/cli (npm) ^20.5.3
@commitlint/config-conventional (npm) ^20.5.3
@commitlint/types (npm) ^20.5.0
@saithodev/semantic-release-backmerge (npm) ^4.0.1
@semantic-release/exec (npm) ^7.1.0
@serwist/next (npm) ^9.5.11
@stylistic/eslint-plugin (npm) ^5.10.0
@tailwindcss/forms (npm) ^0.5.11
@tailwindcss/postcss (npm) ^4.3.1
@types/lodash (npm) ^4.17.24
@types/node (npm) ^25.9.3
@types/qs (npm) ^6.15.1
@types/react (npm) ^19.2.17
@types/react-dom (npm) ^19.2.3
@types/sortablejs (npm) ^1.15.9
@types/xml2js (npm) ^0.4.14
@typescript-eslint/eslint-plugin (npm) ^8.61.1
@typescript-eslint/parser (npm) ^8.61.1
clsx (npm) ^2.1.1
commitizen (npm) ^4.3.2
conventional-changelog-conventionalcommits (npm) ^9.3.1
cz-customizable (npm) ^7.5.4
eslint (npm) ^9.39.4
eslint-config-next (npm) ^16.2.9
eslint-config-prettier (npm) ^10.1.8
eslint-plugin-jsx-a11y (npm) ^6.10.2
eslint-plugin-react-compiler (npm) 19.1.0-rc.2
eslint-plugin-react-hooks (npm) ^7.1.1
husky (npm) ^9.1.7
lint-staged (npm) ^16.4.0
postcss (npm) ^8.5.15
prettier (npm) ^3.8.4
prettier-plugin-organize-imports (npm) ^4.3.0
prettier-plugin-tailwindcss (npm) ^0.7.4
semantic-release (npm) ^25.0.5
serwist (npm) ^9.5.11
stylelint (npm) ^17.13.0
stylelint-config-standard (npm) ^40.0.0
stylelint-config-tailwindcss (npm) ^1.0.1
tailwindcss (npm) ^4.3.1
typescript (npm) ^5.9.3
Files by Type (count)
TSX
72
TypeScript
43
YAML
10
JSON
9
JavaScript
7
Other (.png)
7
Other (no ext)
5
Other (.svg)
5
Markdown
4
Git Ignore
2
Docker Ignore
1
Other (.example)
1
Files by Type (size)
Other (.png)
460KB
YAML
334KB
TSX
164KB
TypeScript
80KB
JSON
48KB
Markdown
47KB
Other (.jpg)
17KB
Other (.ico)
14KB
CSS
6KB
JavaScript
6KB
Other (.svg)
4KB
Dockerfile
2KB

The LLM identified 4 files worth highlighting for reuse:

A collection of pure utility functions for formatting durations, file sizes, bitrates, and ETA calculations. Each function is well-documented, handles edge cases (zero values, NaN, missing data), and accepts a translation function for i18n. The `secondsToTime` function intelligently selects up to two time units and rounds minutes. These functions are self-contained and could be extracted into a standalone formatting library with minimal adaptation.

file: src/utils/formatting.ts ↗ | tags: #i18n-formatting #time-formatting #utility

A React hook that implements a countdown timer with pause/resume support and a callback on completion. It uses `useRef` to avoid stale closures and cleans up intervals properly. The hook is generic and could be reused in any React project requiring timed transitions or countdowns.

file: src/hooks/useTimer.ts ↗ | tags: #custom-hook #timer #countdown

A responsive bar chart component built with motion (Framer Motion) that animates bars on mount. It computes a 'nice' scale with evenly spaced ticks, handles dense label layouts by clamping edge labels to prevent clipping, and highlights the peak bar with a distinct gradient. The component is self-contained (only depends on motion and clsx) and could be reused in any React application needing a simple animated bar chart.

file: src/app/rewind/_components/RewindBarChart.tsx ↗ | tags: #bar-chart #animation #responsive-labels

A story/carousel component that displays a sequence of components with automatic progress, manual navigation (tap left/right, keyboard arrows), and hold-to-pause. It features a segmented progress bar at the top, smooth transitions, and accessibility labels. The component is generic and could be extracted as a reusable story/carousel pattern for any content-driven UI.

file: src/app/rewind/_components/Stories.tsx ↗ | tags: #story-carousel #progress-bar #tap-navigation
Last analyzed: 2026-09-25 18:04:01.207263
Next check: 2026-10-02 18:04:01.185885
$ submit: