Reorganized package.json structure by moving devDependencies to the top and adding packageManager field. Introduced new script "auth:generate" for authentication key generation. Updated turbo.json with formatted structure and new "auth:generate" task for persistent execution.
Add conditional rendering in dashboard route to check admin permissions using authClient. If access is denied, display an empty state with access denied message and link back to home. This enhances security by restricting dashboard access to authorized users.
Replace programmatic navigation in UserMenu with Link component for better integration with TanStack Router, ensuring the dropdown closes on navigation
Implement a new dedicated dashboard feature with server-side stats API and UI components. Added stats router for fetching overview data, dashboard layout with sidebar navigation, and pages for users, libraries, and extensions. Moved dashboard from /home/dashboard to /dashboard route.
BREAKING CHANGE: dashboard route moved from /home/dashboard to /dashboard, old route removed
Add a new modular Empty UI component with sub-components (EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent) for consistent handling of empty states. Refactored the search page to use this component in empty, error, and no-results states, replacing custom implementations to improve reusability and design consistency.
Update the application title to "Nontara Media Server" and add consistent page-specific titles across all routes for better branding and user experience. This includes dynamic title updates in the details page based on loading states and data availability.
Removed nuqs dependency and updated search functionality to use TanStack Router's native search params validation and navigation. This change simplifies the codebase, eliminates external dependency, and improves integration with the routing system by handling URL state directly through the router.
Updated movie card dimensions for better responsiveness and enhanced image source handling to ensure proper fallback to placeholder when URL is invalid or too short. This improves visual consistency and user experience in the movie display components.
Added a new search feature that allows users to query movies and series. Implemented server-side search endpoint in the titles router with Zod validation for input and output. Created a client-side search page with debounced input, query state management using nuqs, and responsive results display including loading, error, and empty states. Updated dependencies and integrated NuqsAdapter for URL state synchronization.
Added conditional rendering for original title in title details component when it differs from the main title. Enhanced movie runtime section to display both formatted runtime and calculated end time based on current time and duration.
Updated metadata provider interfaces and implementations to return null instead of placeholder objects when data cannot be resolved. This improves error handling and reduces unnecessary object creation.
- Modified schema types to include null unions (e.g., ResolvedMovieMetadataResult)
- Changed runtime fields from minutes to seconds for consistency
- Removed placeholder builders in TMDB provider, returning null directly
- Optimized library scanner by removing redundant file counting and adding early exits for existing media
- Ensured type safety across services and providers
BREAKING CHANGE: Metadata resolution methods now return null for unresolved data, requiring consumers to handle null cases explicitly.
- Remove unused type import in auth.ts
- Clean up commented code in BaseService.ts
- Update fs and path imports to node: prefixed versions in extensions/index.ts
- Improve string formatting in main.ts and fix unused variable in language-codes test
Removed unused credit-related schemas, types, and methods from models, providers, services, and TMDB extension. This simplifies the codebase by eliminating deprecated individual credit resolution in favor of title-based credits fetching.
BREAKING CHANGE: Removed resolveCredits method and associated schemas, which may affect integrations relying on individual credit resolution.
Use Bun.Glob for efficient recursive video file discovery, eliminating manual recursion and depth tracking. This simplifies the scanning logic, reduces complexity, and improves performance by leveraging Bun's optimized glob implementation.
Compare video file count in directory with database titles count before scanning. If counts match and titles exist, skip the scan to improve performance and reduce unnecessary processing.
Updated titles schema to use a single 'rating' field instead of 'voteAverage' and 'voteCount', made 'originalTitle' required, and added index on rating. Removed deprecated fields from metadata models and TRPC schemas. Enhanced TMDB metadata provider to include additional fields like homepage, original language, popularity, and tagline. Updated library scanner and routers to reflect these changes for improved data consistency and completeness.
Simplify SimilarTitlesSection by using the dedicated MovieCard component instead of custom inline JSX. This improves code reusability and maintainability while preserving the same visual output.
Updated MovieCard and TitleDetails components to use optional imageUrl and fallback to movie-placeholder.svg when images are unavailable, improving robustness for missing poster data.
Add session validation in server-side TRPC middleware to enforce authentication for protected endpoints. Implement client-side route guards in web app to redirect unauthenticated users to login page, ensuring proper access control for home and index routes.
Add a new TRPC error parsing utility in `apps/web/src/lib/trpc-errors.ts` to standardize error handling across the web app. This utility categorizes TRPC errors into user-friendly messages for better UX. Updated the title details page to use this utility instead of manual error checking, improving maintainability and consistency in error display.
Add ScrollArea UI component using Radix UI for better content scrolling.
Enhance header navigation with back button and conditional home button display.
Update dependencies including @radix-ui/react-scroll-area and reorganize @nontara/server.
Implement a comprehensive title details feature including backend API and frontend UI components. Add tRPC router for fetching title data, genres, cast, crew, and similar titles using Zod schemas for validation. Create new UI components for displaying cast, crew, similar titles, and detailed title information with a new route for the details page. Include utility functions for formatting and placeholder assets for better user experience.
Add TMDB and IMDB provider IDs to movie metadata responses for better external reference tracking. Introduce resolveTitleCredits method to fetch and map cast and crew information from TMDB API, enhancing metadata completeness for movies and TV shows.
Add a new section to AGENTS.md emphasizing the need to check IDE diagnostics first using the `getIdeDiagnostics` tool, resolve all TypeScript errors and warnings, and only then run the Biome linter to ensure type safety before addressing cosmetic issues.
Update Biome linter configuration for cleaner formatting.
Format BTS configuration file for consistency.
Bump versions for tailwindcss and tw-animate-css in lockfile.
Update package.json scripts to use @nontara/server.
Simplify people roles to CAST/CREW and integrate external metadata providers (TMDB, IMDB, etc.) for enhanced movie and series information. Updated database schemas, models, and services to handle credits, ratings, and provider IDs, enabling richer metadata resolution and storage.
BREAKING CHANGE: PEOPLE_ROLE_TYPES enum simplified from specific roles to "CAST" and "CREW", requiring updates to any code depending on detailed role types.
Updated Biome.json to include new ignore patterns for meta files and packages/tmdb-ts, reformatted assist and linter sections for better readability, and ensured consistent JSON structure.
Add resolveCredits and resolvePeople methods to TMDBMetadataProviderExtension to fetch detailed credit and person information from TMDB API. These methods handle client configuration checks, API calls, and proper error handling while transforming TMDB responses to application models.
Also improve number parsing in search methods by adding radix parameter to parseInt calls for better compatibility.
Add comprehensive TypeScript schemas for Credits and People entities using Zod v4 syntax, establishing proper type definitions for cast, crew, and person details. Extend the MetadataProvider abstract class with new methods for resolving credits and people data to support enhanced metadata functionality.
Modified the media router to query from the titles table instead of movies, extending the recently added functionality to include both movies and series. Updated the date range to 7 days instead of 1 day for better content discovery. Also changed the id type from number to string to match the new titles schema.
Improve robustness of folder exploration by adding detailed error handling for filesystem operations. Handle permission issues, invalid paths, and filesystem errors gracefully with appropriate user feedback. Enhance both server and client components to provide clear error messages and recover gracefully from failures.
Extract common metadata fields from movies and series into a new titles schema, establishing a proper relationship between entities. This refactoring eliminates data duplication and provides a cleaner data model for shared title information like name, description, year, and poster. The movies and series tables now reference titles through a foreign key relationship, while all genre associations are centralized at the title level.
Reorganize imports in metadata provider to use types from @/models, removing local type definitions for MetadataSearchResult and MetadataSearchQuery. This aligns with schema organization rules requiring all types to be defined as Zod schemas in models for runtime validation and type safety.
Update genreId, seriesId, and seasonId types to string to align with new database schemas using UUIDs. Removed deprecated sortTitle field. This ensures consistency with the modular schema organization and Zod validation requirements.
Add Zod schemas and types for metadata search functionality, including search queries, results, and related items. Introduce credits schemas for cast and crew information. Enhance existing details schemas with similar titles and type exports for better type safety and runtime validation in the media library system.