andrew-codes_playnite-web/.gitattributes
Andrew Smith feb9f4af64
feat: migrate to GraphQL API with Postgres, multi-tenant architecture
BREAKING CHANGES:
  - Retired MQTT messaging in favor of GraphQL API with WebSocket subscriptions
    - MQTT messages are used solely to handle cover art
  - Requires Postgres database via DATABASE_URL environment variable
  - Requires SECRET environment variable for JWT-based authentication
  - Playnite plugin now uses GraphQL for all communication with web app

  Major Features:

  Database & Multi-Tenancy:
  - Implemented Prisma/Postgres relational schema with User, Library, Release, Platform, Feature, Tag, CompletionStatus, Playlist, Asset, SiteSettings, and UserSetting models
  - Enabled multi-tenant support allowing multiple users with multiple Playnite libraries per application instance
  - Added database migrations support for schema evolution

  GraphQL API & Real-time Subscriptions:
  - Replaced MQTT with GraphQL as primary programmatic interface
  - Implemented WebSocket-based GraphQL subscriptions for real-time updates
  - Playnite plugin now authenticates via GraphQL, publishes library updates, and subscribes to web app changes
  - Added mutations for remote control: start, restart, and stop releases

  Authentication & Authorization:
  - Implemented JWT-based authentication with secure cookie and header support
  - Added protected routes middleware for auth-gated pages
  - Improved sign-in/out flows with proper navigation handling
  - Added CSRF protection with Helmet CSP and configurable allowed origins
  - Site admin and user settings pages with role-based access

  UI/UX Improvements:
  - Restored and enhanced game filtering and navigation
  - Fixed layout issues including double scrollbars and grid sizing
  - Improved SSR error handling with better error UI components
  - Reduced layout shift and initial API calls for better performance
  - Updated help page styles and minor UI tweaks throughout
  - Automatic game cover art retrieval from IGN (requires matching game names)

  Library Sync & Real-time Updates:
  - Improved library sync reliability with proper ordering and conditional publishing
  - Immediate reflection of changes between Playnite desktop app and web interface
  - Better handling of entity collection changes and updates
  - Fixed game asset path resolution and image slug generation

  Testing & CI Infrastructure:
  - Comprehensive Cypress test suite updates (e2e, component, visual regression)
  - Added code coverage reporting with GitHub Actions integration
  - Dockerized e2e test flow with proper sharp/vips dependencies
  - Fixed flaky test timing and removed obsolete tests
  - Enabled SWC for faster builds and test execution
  - Added Lighthouse audits for performance monitoring

  Docker & Deployment:
  - Optimized multi-stage Dockerfile for web app with alpine base
  - Improved Docker build times for development
  - Packaged Prisma client with correct binary targets
  - Proper asset copying and environment variable handling

  Performance & SSR:
  - Fixed server-side rendering errors across multiple routes
  - Proper use of compression middleware
  - Optimized MUI component rendering and interaction timing
  - Reduced unnecessary data fetching on initial page load
  - Improved database connection management in development

  Developer Experience:
  - Updated Nx workspace configuration and cleanup
  - Better Prisma connection handling in dev environment
  - Fixed linting errors and removed dead code
  - Improved CI workflow reliability

  This release represents a fundamental architectural shift from MQTT-based messaging to a modern GraphQL API with PostgreSQL persistence, enabling multi-tenant support, improved real-time synchronization, and a more maintainable codebase.

Closes #715
Closes #765
Closes #772
Closes #761
Closes #768
Closes #763
Closes #762
Closes #760
Closes #769
Closes #716
Closes #766
Closes #764
Closes #767
Closes #770
Closes #775
Closes #776
Clsoes #682
Closes #588
Closes #682
Closes #709

BREAKING CHANGES
2025-10-07 12:16:26 -04:00

4 lines
62 B
Plaintext
Executable File

/.yarn/releases/* binary
/.yarn/plugins/**/* binary
text=auto