Migrate authentication from cookie-based to Bearer token-based approach.
Update axios HTTP client to include Authorization header with session token.
Modify auth client to use Bearer token in fetch options and handle token storage in localStorage.
- Add MovieCard component for displaying movie posters and details
- Add RecentlyAddedSections component with horizontal scrolling for recently added movies
- Add HorizontalScrollList layout component for smooth horizontal scrolling
- Update SignInForm to auto-navigate authenticated users to home
- Update home layout to redirect unauthenticated users to login
- Update auth configuration to use bearer plugin
- Update media API model to default limit to 10
- Replace ky with axios in package.json and update API client implementation
- Update all HTTP requests in client components to use axios syntax
- Adjust model imports in server files to relative paths
- Fix library type labels in onboard setup (Movies -> Movie, Series -> Serie)
Add admin middleware to enforce authentication and permission checks for dashboard access.
Implement API models and routes for library CRUD operations, including listing, getting, creating, updating, and deleting libraries with validation and error handling.
Add Zod schemas for playback inputs/outputs including codecs, resolutions, and status enums.
Implement Hono router endpoints for creating, stopping, seeking, listing, and getting status of playback sessions.
- Add MediaRouter and LibraryRouter imports and routes in main.ts
- Fix parameter validation from "param" to "query" in library and media routes
- Ensure proper query parameter handling for titles, recently added, and tracks endpoints
- Add new API models for title details and seasons in `models/api/title.ts`
- Create common, movie, and series metadata schemas in `models/internals/metadata/`
- Implement title router with endpoints for details and season episodes in `routes/title.ts`
- Update main.ts to include the new title routes
This introduces functionality to fetch detailed information about movies and series, including cast, crew, genres, and episode data for series.
- Add Zod schemas for recently added media and media tracks inputs/outputs
- Add internal schemas for media items and track types (video, audio, subtitle)
- Implement GET /recentlyAdded endpoint to fetch titles added in last 7 days
- Implement GET /tracks endpoint to retrieve media tracks for movies or episodes
- Include filtering logic to exclude image streams from video tracks
Move authentication logic from inline middleware in library routes to a dedicated
authenticated middleware file for better reusability and maintainability. This
includes creating a new middleware that handles session validation and error
handling, and updating the library router to use the imported middleware.
- Implement Header component with responsive navigation sheet, back/home buttons, and search link
- Add ThemeModeSwitcher for dark/light mode toggle
- Create UserMenu with avatar, dropdown, and logout functionality
- Add UI components: Avatar, Sheet, and Skeleton
- Update Providers to remove TRPC integration and configure QueryClient
- Add home layout and index routes with Header wrapper
- Update dependencies including @radix-ui/react-avatar
- Add Zod schemas for library titles and all libraries in models/api/library.ts
- Create new library router with /all and /titles endpoints
- Update onboard router to use namespaced API imports
- Export API models as namespace in models/index.ts
- Implement SignInForm and SignUpForm components using TanStack Form and Zod validation
- Add auth client configuration with better-auth and access control
- Create login and signup routes with navigation
- Update preloader logic to hide on non-root paths and improve accessibility
- Add better-auth and zod dependencies, update eslint-plugin-react-hooks version
- Migrate main.ts to use createFactory for better app composition
- Refactor onboard router to chained method calls for cleaner structure
- Add OnboardFolderInput and OnboardFolderOutput schemas for folder browsing API
- Define METADATA_PROVIDER_TYPES and LIBRARY_TYPES locally in respective model files to reduce dependencies
- Implement full client application using React, TypeScript, and Vite
- Add onboarding wizard with account creation, library setup, and language preferences
- Include UI components, routing, and state management for setup process
- Configure build tools, linting, and styling with Tailwind CSS and shadcn/ui
- Add folder explorer component for media library configuration
- Integrate with server APIs for onboarding completion
BREAKING CHANGE: Introduces new client application requiring server API endpoints for onboarding
Add new onboarding functionality to the server, including API endpoints for checking onboarding status, browsing directories, and completing the onboarding process. Introduces Zod schemas for request/response validation, error handling utilities, and Hono router integration. Includes dependency on @hono/zod-validator for validation.
Add language_servers configuration for TypeScript and TSX to use biome and typescript-language-server, excluding vtsls. This improves code formatting and type checking in the editor.
- Implement new HLSPlayer component using media-chrome and react-player
- Refactor PlaybackSession to support multiple FFmpeg processes for AV and subtitle streams
- Add master playlist generation with subtitle renditions
- Update playback service to handle subtitle tracks and burn-in options
- Modify server routes to use Bun.serve with dynamic playback endpoints
- Add codec detection utilities and player state components
- Update web routes to pass track selections via search params
BREAKING CHANGE: Playback API routes have been restructured, requiring client updates for session-based streaming.
- Add tRPC endpoint to fetch video/audio/subtitle tracks
- Implement MediaTracksSelector component with auto-selection
- Filter out image streams from track listings
- Integrate track selector into movie detail page
- Support querying tracks by titleId or episodeId
- Add responsive breakpoints for backdrop height and container padding
- Make title text scale appropriately across device sizes
- Stack action buttons vertically on mobile
- Adjust spacing, gaps, and font sizes for better mobile UX
- Make buttons full-width on mobile, auto-width on larger screens
- Add library tRPC router with getAll and getTitles endpoints
- Implement paginated title fetching with library validation
- Update header to dynamically display libraries from database
- Add library detail page route (/home/library/$id)
- Replace static media library list with dynamic rendering based on
library type
- Apply tab indentation across all TypeScript files
- Reformat biome.json, tsconfig.json, and turbo.json
- Update component and schema files for consistency
Update ID generation in metadata schema tables (credits, genres, movies,
series, titles) to use Bun.randomUUIDv7() for standardized UUIDs instead
of custom prefixed random numbers, improving uniqueness and consistency.
- Split monolithic metadata.ts into focused modules
- Create metadata/ directory with movie, series, search, and provider
models
- Maintain same functionality with improved organization
Enhance series handling with episode-level metadata, credits resolution, and UI components for displaying episodes. Includes updates to models, scanners, providers, and new TRPC endpoints for fetching season episodes.
Added chalk dependency and refactored the logger reporter to a class-based implementation with color support for development environments. This improves console output readability without affecting production logging.
This change adds a polyfill for the CompressionStream API to resolve a compatibility issue where Drizzle Studio throws a ReferenceError due to Bun's lack of native CompressionStream support. The polyfill uses Node.js zlib streams to provide deflate, deflate-raw, and gzip compression formats, ensuring Drizzle Kit can function properly in the Bun runtime environment.
Implement TV series metadata resolution in TMDB provider with multi-page search, language matching, and translation support. Add caching and batch operations in SeriesLibraryScanner for improved performance. Optimize genre and provider ID insertions in BaseLibraryScanner. Fix path handling for Linux in onboard router.
- Add resolve method in TMDBSeriesProvider to search and fetch detailed TV show, season, and episode metadata
- Introduce series cache in SeriesLibraryScanner to reduce database queries and handle duplicate episodes
- Refactor insertGenres and insertProviderIds to use batch operations for efficiency
- Ensure absolute paths on Linux by prepending '/' in onboard path joining
Updated metadata schemas and related code to properly handle nullable poster and backdrop URLs across server models, library scanner, web components, and TMDB provider. This improves type safety and prevents potential null reference errors by making URLs nullable in Zod schemas, defaulting to null in scanners, conditionally rendering in UI, and using conditional checks in providers.
Add getDataDirectory utility to handle DATA_DIRECTORY environment variable, ensuring the directory exists and is used for database file paths in drizzle config and database setup. This improves environment flexibility and prevents hardcoded paths.
Move database setup logic from index.ts to a dedicated database.ts file for better modularity. Update index.ts to re-export from the new file and adjust import in migrations.ts accordingly.
Moved the formatBytes function from main.ts to a new utils/formatter.ts file for better code organization. Replaced console.log statements in signal handlers with a proper logger for consistent logging. Updated server initialization to use Bun.serve directly instead of exporting the app, enhancing modularity and startup efficiency.
Remove tmdb_id and imdb_id columns along with associated indexes and unique constraints from the people table to simplify the schema and eliminate external API syncing dependencies.
BREAKING CHANGE: tmdb_id and imdb_id fields are no longer available in the people table, which may affect any code relying on these external identifiers.