commit c28e6dd81109237a2a7cb3932842716d2320d64b Author: Dorian Date: Mon Mar 2 14:15:39 2026 +0000 feat: initialize AIUI monorepo with project rules and core types Foundation for the next-generation AI content surface UI: - 16 Cursor rules files covering philosophy, Vue conventions, design system, content surfaces, plugin system, AI integration, renderers, security, Bitcoin-only policy, dev/prod modes, accessibility, performance, animation, mobile UX, and git workflow - pnpm workspaces + Turborepo monorepo (@aiui/core, @aiui/app) - Vue 3 + Vite + TypeScript + Tailwind CSS 4 - Core type system: plugins, renderers, messages, content blocks - Plugin registry with renderer registration - 50 mock film fixtures with search/filter utilities - App shell with chat page layout - Environment config templates Made-with: Cursor diff --git a/.cursor/rules/00-master-philosophy.mdc b/.cursor/rules/00-master-philosophy.mdc new file mode 100644 index 00000000..d28a46c3 --- /dev/null +++ b/.cursor/rules/00-master-philosophy.mdc @@ -0,0 +1,65 @@ +--- +description: Core development philosophy for AIUI - the foundational rules that govern all code and design decisions +globs: "**/*" +alwaysApply: true +--- + +# Master Philosophy + +## Mission +Build the next-generation AI content surface UI — a paradigm where AI responses are rendered as rich, interactive content, not plain text. Delivered as a reusable component library (@aiui/core) and a reference application (AIUI App). + +## Philosophical Pillars + +### 1. Open Source Only +Every dependency must be OSS (MIT, Apache-2.0, GPL-compatible). No proprietary SDKs, no vendor-locked services. Before adding any dependency, verify its license. + +### 2. Decentralized-First +No hard dependency on any centralized service. AI backends, messaging protocols, storage, search — all connect through pluggable adapter interfaces. Users choose their own providers. + +### 3. Bitcoin Only +Bitcoin is the only monetary unit. On-chain, Lightning, ecash (Cashu, Fedimint/Fedi). No fiat payment rails, no altcoins, no stablecoins — anywhere in the UI or codebase. AIUI is never a wallet and never handles funds directly. See `10-bitcoin-only.mdc` for full rules. + +### 4. Cryptography for Everything Sensitive +E2E encryption for messages, encrypted local storage, proper key management. Privacy is not a feature — it is a requirement. + +### 5. Mobile-First, Everywhere-Perfect +Every component works flawlessly on mobile, tablet, and desktop. Mobile is the foundation, not an afterthought. Touch targets, viewport management, and safe areas are first-class citizens. + +### 6. Consistency is Sacred +Mobile and desktop versions show identical content and functionality unless explicitly designed otherwise. Design tokens ensure visual consistency across all breakpoints. + +### 7. Theme-First Architecture +Theming is a core architectural decision from day one. Themes are CSS-based with reactive state management. Dark mode and light mode are equals. + +### 8. Utility-First, Component-Second +Tailwind CSS utilities in templates for maximum flexibility. Component classes only for truly reusable patterns. Extract components when you repeat, not before. + +### 9. Performance as a Feature +Initial load < 250KB gzipped. Lazy load everything that isn't immediately visible. CSS transforms for GPU acceleration. SVG over raster images. Code splitting by default. + +### 10. Plugin-Everything +Every external integration connects through a typed plugin interface. AI providers, media sources, messaging protocols, wallets, social embeds — all pluggable. + +### 11. Accessibility is Not Optional +WCAG AA compliance minimum. Keyboard navigation everywhere. Screen reader friendly. Color contrast tested and validated. + +### 12. MCP-Native +First-class Model Context Protocol support for AI tool interoperability. + +## Anti-Patterns to Avoid + +- Desktop-first thinking +- Hardcoded values (use design tokens) +- Premature abstraction (build three times before abstracting) +- Magic numbers without comments +- Invisible state (user should always know what's happening) +- Handling funds or private keys +- Loading third-party tracking scripts +- Proprietary dependencies + +## The Ultimate Goal + +When someone uses AIUI, they should think: "This feels incredibly polished", "Everything just works", "My data is safe", "I control my own setup." + +When a developer reads the code: "This is well organized", "I understand exactly what's happening", "Adding a new renderer is straightforward." diff --git a/.cursor/rules/01-vue-conventions.mdc b/.cursor/rules/01-vue-conventions.mdc new file mode 100644 index 00000000..7806b7da --- /dev/null +++ b/.cursor/rules/01-vue-conventions.mdc @@ -0,0 +1,84 @@ +--- +description: Vue 3 Composition API conventions and best practices for AIUI +globs: "**/*.vue,**/*.ts" +alwaysApply: false +--- + +# Vue 3 Conventions + +## Composition API with ` + + diff --git a/packages/app/package.json b/packages/app/package.json new file mode 100644 index 00000000..2ce6c5f3 --- /dev/null +++ b/packages/app/package.json @@ -0,0 +1,33 @@ +{ + "name": "@aiui/app", + "version": "0.1.0", + "private": true, + "description": "AIUI reference application", + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview", + "test": "vitest run", + "lint": "eslint src/", + "typecheck": "vue-tsc --noEmit", + "clean": "rm -rf dist" + }, + "dependencies": { + "@aiui/core": "workspace:*", + "vue": "latest", + "vue-router": "latest", + "pinia": "latest" + }, + "devDependencies": { + "@vitejs/plugin-vue": "latest", + "vite": "latest", + "vue-tsc": "latest", + "vitest": "latest", + "eslint": "latest", + "typescript": "~5.8.0", + "tailwindcss": "latest", + "@tailwindcss/vite": "latest" + } +} diff --git a/packages/app/src/App.vue b/packages/app/src/App.vue new file mode 100644 index 00000000..5267439f --- /dev/null +++ b/packages/app/src/App.vue @@ -0,0 +1,9 @@ + + + diff --git a/packages/app/src/env.d.ts b/packages/app/src/env.d.ts new file mode 100644 index 00000000..9cfd7483 --- /dev/null +++ b/packages/app/src/env.d.ts @@ -0,0 +1,19 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent + export default component +} + +interface ImportMetaEnv { + readonly VITE_OPENROUTER_API_KEY: string + readonly VITE_TMDB_API_KEY: string + readonly VITE_DEV_MODE: string + readonly VITE_MOCK_MEDIA_SOURCES: string + readonly VITE_DISABLE_CRYPTO: string +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/packages/app/src/main.ts b/packages/app/src/main.ts new file mode 100644 index 00000000..009879e4 --- /dev/null +++ b/packages/app/src/main.ts @@ -0,0 +1,21 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import { createRouter, createWebHistory } from 'vue-router' +import App from './App.vue' +import './styles/main.css' + +const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/', + name: 'chat', + component: () => import('./pages/ChatPage.vue'), + }, + ], +}) + +const app = createApp(App) +app.use(createPinia()) +app.use(router) +app.mount('#app') diff --git a/packages/app/src/mocks/films.ts b/packages/app/src/mocks/films.ts new file mode 100644 index 00000000..db861182 --- /dev/null +++ b/packages/app/src/mocks/films.ts @@ -0,0 +1,862 @@ +import type { Film } from '@aiui/core/types/content' + +const TMDB_IMG = 'https://image.tmdb.org/t/p' +const POSTER = `${TMDB_IMG}/w342` +const BACKDROP = `${TMDB_IMG}/w780` + +export const mockFilms: Film[] = [ + { + id: 'f1', + title: 'Blade Runner 2049', + year: 2017, + posterUrl: `${POSTER}/gajva2L0rPYkEWjzgFlBXCAVBE5.jpg`, + backdropUrl: `${BACKDROP}/sAtoMqDVhNDQBc3QJL3RF6hlhGq.jpg`, + synopsis: 'A young blade runner discovers a long-buried secret that leads him to track down former blade runner Rick Deckard, who has been missing for thirty years.', + genres: ['Sci-Fi', 'Drama', 'Thriller'], + rating: 7.5, + runtime: 164, + director: 'Denis Villeneuve', + cast: ['Ryan Gosling', 'Harrison Ford', 'Ana de Armas'], + trailerUrl: 'https://www.youtube.com/watch?v=gCcx85e8rTo', + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12345', quality: '4K', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Rental', url: 'https://www.youtube.com/watch?v=gCcx85e8rTo', quality: 'HD', icon: 'youtube' }, + ], + }, + { + id: 'f2', + title: 'Arrival', + year: 2016, + posterUrl: `${POSTER}/x2FJsf1ElAgr63Y3LNUTq7KZPno.jpg`, + backdropUrl: `${BACKDROP}/yIZ1xendHwnlqSEIFg5MpkOQ1qk.jpg`, + synopsis: 'A linguist works with the military to communicate with alien lifeforms after twelve mysterious spacecraft appear around the world.', + genres: ['Sci-Fi', 'Drama'], + rating: 7.9, + runtime: 116, + director: 'Denis Villeneuve', + cast: ['Amy Adams', 'Jeremy Renner', 'Forest Whitaker'], + trailerUrl: 'https://www.youtube.com/watch?v=tFMo3UJ4B4g', + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12346', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f3', + title: 'Dune', + year: 2021, + posterUrl: `${POSTER}/d5NXSklXo0qyIYkgV94XAgMIckC.jpg`, + backdropUrl: `${BACKDROP}/jYEW5xZkZk2WTrdbMGAPFuBqbDc.jpg`, + synopsis: 'Paul Atreides, a brilliant and gifted young man born into a great destiny beyond his understanding, must travel to the most dangerous planet in the universe.', + genres: ['Sci-Fi', 'Adventure', 'Drama'], + rating: 7.8, + runtime: 155, + director: 'Denis Villeneuve', + cast: ['Timothée Chalamet', 'Rebecca Ferguson', 'Zendaya'], + trailerUrl: 'https://www.youtube.com/watch?v=n9xhJrPXop4', + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12347', quality: '4K HDR', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Purchase', url: 'https://www.youtube.com/watch?v=n9xhJrPXop4', quality: '4K', icon: 'youtube' }, + ], + }, + { + id: 'f4', + title: 'Interstellar', + year: 2014, + posterUrl: `${POSTER}/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg`, + backdropUrl: `${BACKDROP}/xJHokMbljvjADYdit5fK1DDtAoB.jpg`, + synopsis: 'A team of explorers travel through a wormhole in space in an attempt to ensure humanity\'s survival.', + genres: ['Sci-Fi', 'Adventure', 'Drama'], + rating: 8.6, + runtime: 169, + director: 'Christopher Nolan', + cast: ['Matthew McConaughey', 'Anne Hathaway', 'Jessica Chastain'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12348', quality: '4K IMAX', icon: 'plex' }, + { type: 'nextcloud', name: 'Nextcloud Files', url: 'https://cloud.example.com/s/abc123', quality: '1080p', icon: 'nextcloud' }, + ], + }, + { + id: 'f5', + title: 'The Matrix', + year: 1999, + posterUrl: `${POSTER}/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg`, + backdropUrl: `${BACKDROP}/fNG7i7RqMErkcqhohV2a6cV1Ehy.jpg`, + synopsis: 'A computer programmer discovers that reality as he knows it is a simulation created by machines, and joins a rebellion to break free.', + genres: ['Sci-Fi', 'Action'], + rating: 8.7, + runtime: 136, + director: 'Lana Wachowski', + cast: ['Keanu Reeves', 'Laurence Fishburne', 'Carrie-Anne Moss'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12349', quality: '4K', icon: 'plex' }, + { type: 'free-web', name: 'Archive.org', url: 'https://archive.org/details/thematrix', quality: 'SD', icon: 'archive' }, + ], + }, + { + id: 'f6', + title: 'Parasite', + year: 2019, + posterUrl: `${POSTER}/7IiTTgloJzvGI1TAYymCfbfl3vT.jpg`, + backdropUrl: `${BACKDROP}/TU9NIjwzjoKPwQHoHshkFcQUCG.jpg`, + synopsis: 'Greed and class discrimination threaten the newly formed symbiotic relationship between the wealthy Park family and the destitute Kim clan.', + genres: ['Drama', 'Thriller', 'Comedy'], + rating: 8.5, + runtime: 132, + director: 'Bong Joon-ho', + cast: ['Song Kang-ho', 'Lee Sun-kyun', 'Cho Yeo-jeong'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12350', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f7', + title: 'Mad Max: Fury Road', + year: 2015, + posterUrl: `${POSTER}/8tZYtuWezp8JbcsvHYO0O46tFBO.jpg`, + backdropUrl: `${BACKDROP}/phszHPFVhPHhMZgo0fWTKBDQsJA.jpg`, + synopsis: 'In a post-apocalyptic wasteland, a woman rebels against a tyrannical ruler in search for her homeland with the aid of a drifter.', + genres: ['Action', 'Adventure', 'Sci-Fi'], + rating: 8.1, + runtime: 120, + director: 'George Miller', + cast: ['Tom Hardy', 'Charlize Theron', 'Nicholas Hoult'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12351', quality: '4K HDR', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Rental', url: 'https://www.youtube.com/watch?v=hEJnMQG9ev8', quality: 'HD', icon: 'youtube' }, + ], + }, + { + id: 'f8', + title: 'Ex Machina', + year: 2014, + posterUrl: `${POSTER}/btbRB7BrD887pKiSfMXtCCHvyOo.jpg`, + backdropUrl: `${BACKDROP}/4uOaYtBvAYXOPSHuWLpFOS17SO.jpg`, + synopsis: 'A young programmer is selected to participate in a groundbreaking experiment in synthetic intelligence by evaluating the human qualities of a highly advanced humanoid AI.', + genres: ['Sci-Fi', 'Drama', 'Thriller'], + rating: 7.7, + runtime: 108, + director: 'Alex Garland', + cast: ['Alicia Vikander', 'Domhnall Gleeson', 'Oscar Isaac'], + sources: [ + { type: 'nextcloud', name: 'Nextcloud Files', url: 'https://cloud.example.com/s/def456', quality: '1080p', icon: 'nextcloud' }, + ], + }, + { + id: 'f9', + title: 'The Grand Budapest Hotel', + year: 2014, + posterUrl: `${POSTER}/eWDyJQ3yz8mvHj7pKfRPs0h2CAl.jpg`, + backdropUrl: `${BACKDROP}/nX5XotM9yprCKarRH4fzOq1WZ5y.jpg`, + synopsis: 'A writer encounters the owner of an aging high-class hotel, who tells him of his early years serving as a lobby boy in the hotel\'s glorious years.', + genres: ['Comedy', 'Drama', 'Adventure'], + rating: 8.1, + runtime: 99, + director: 'Wes Anderson', + cast: ['Ralph Fiennes', 'F. Murray Abraham', 'Mathieu Amalric'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12352', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f10', + title: 'Whiplash', + year: 2014, + posterUrl: `${POSTER}/7fn624j5lj3xTme2SgiLCeuedmO.jpg`, + backdropUrl: `${BACKDROP}/fRGxZuo7jJUWQsVg9PREb98Aclp.jpg`, + synopsis: 'A promising young drummer enrolls at a cut-throat music conservatory where his dreams of greatness are mentored by an instructor who will stop at nothing.', + genres: ['Drama', 'Music'], + rating: 8.5, + runtime: 107, + director: 'Damien Chazelle', + cast: ['Miles Teller', 'J.K. Simmons', 'Melissa Benoist'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12353', quality: '1080p', icon: 'plex' }, + { type: 'free-web', name: 'Tubi', url: 'https://tubitv.com/movies/whiplash', quality: 'HD', icon: 'tubi' }, + ], + }, + { + id: 'f11', + title: 'Drive', + year: 2011, + posterUrl: `${POSTER}/602vevIURmpDfzbnv5Ubi6wIkQm.jpg`, + backdropUrl: `${BACKDROP}/wMELEDyvaJsAykFP1cDasWKlXKv.jpg`, + synopsis: 'A mysterious Hollywood stuntman and mechanic moonlights as a getaway driver and finds himself in trouble when he helps out his neighbor.', + genres: ['Drama', 'Crime', 'Action'], + rating: 7.8, + runtime: 100, + director: 'Nicolas Winding Refn', + cast: ['Ryan Gosling', 'Carey Mulligan', 'Bryan Cranston'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12354', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f12', + title: 'Spirited Away', + year: 2001, + posterUrl: `${POSTER}/39wmItIWsg5sZMyRUHLkWBcuVCM.jpg`, + backdropUrl: `${BACKDROP}/Ab8mkHmkYADjU7wQiOkia9BzGvS.jpg`, + synopsis: 'During her family\'s move to the suburbs, a sullen 10-year-old girl wanders into a world ruled by gods, witches, and spirits.', + genres: ['Animation', 'Fantasy', 'Adventure'], + rating: 8.6, + runtime: 125, + director: 'Hayao Miyazaki', + cast: ['Rumi Hiiragi', 'Miyu Irino', 'Mari Natsuki'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12355', quality: '1080p', icon: 'plex' }, + { type: 'nextcloud', name: 'Nextcloud Files', url: 'https://cloud.example.com/s/ghi789', quality: '1080p', icon: 'nextcloud' }, + ], + }, + { + id: 'f13', + title: 'The Social Network', + year: 2010, + posterUrl: `${POSTER}/n0ybibhJtQ5icDqTp8eRytcIHJx.jpg`, + backdropUrl: `${BACKDROP}/yyMQLz9pMzB7LbLNz4l8Y1KLLBZ.jpg`, + synopsis: 'As Harvard student Mark Zuckerberg creates the social networking site that would become known as Facebook, he is sued by the twins who claimed he stole their idea.', + genres: ['Drama', 'Biography'], + rating: 7.7, + runtime: 120, + director: 'David Fincher', + cast: ['Jesse Eisenberg', 'Andrew Garfield', 'Justin Timberlake'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12356', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f14', + title: 'Her', + year: 2013, + posterUrl: `${POSTER}/eCOtqtfvn7mxGl6nfmq4b1exJRc.jpg`, + backdropUrl: `${BACKDROP}/bbS05YfasBhMsQqY1A7gKjETJNu.jpg`, + synopsis: 'In a near future, a lonely writer develops an unlikely relationship with an operating system designed to meet his every need.', + genres: ['Sci-Fi', 'Drama', 'Romance'], + rating: 8.0, + runtime: 126, + director: 'Spike Jonze', + cast: ['Joaquin Phoenix', 'Scarlett Johansson', 'Amy Adams'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12357', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f15', + title: 'Moonlight', + year: 2016, + posterUrl: `${POSTER}/4911T5FbJ9eD2Faz5Z8cT3SUhU3.jpg`, + backdropUrl: `${BACKDROP}/A52Lnk3UkxF4Lg3LkkmGNBCnEQ.jpg`, + synopsis: 'A young African-American man grapples with his identity and sexuality while experiencing the everyday struggles of childhood, adolescence, and burgeoning adulthood.', + genres: ['Drama'], + rating: 7.4, + runtime: 111, + director: 'Barry Jenkins', + cast: ['Mahershala Ali', 'Naomie Harris', 'Trevante Rhodes'], + sources: [ + { type: 'free-web', name: 'Tubi', url: 'https://tubitv.com/movies/moonlight', quality: 'HD', icon: 'tubi' }, + ], + }, + { + id: 'f16', + title: 'No Country for Old Men', + year: 2007, + posterUrl: `${POSTER}/bj1v6YKF8yHqA489GFfPC8oKjAz.jpg`, + backdropUrl: `${BACKDROP}/AoJn0YDsrjUHqBLqmJmqDTz8k6y.jpg`, + synopsis: 'Violence and mayhem ensue after a hunter stumbles upon a drug deal gone wrong and more than two million dollars in cash near the Rio Grande.', + genres: ['Crime', 'Drama', 'Thriller'], + rating: 8.1, + runtime: 122, + director: 'Joel Coen', + cast: ['Tommy Lee Jones', 'Javier Bardem', 'Josh Brolin'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12358', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f17', + title: 'Everything Everywhere All at Once', + year: 2022, + posterUrl: `${POSTER}/w3LxiVYdWWRvEVdn5RYq6jIqkb1.jpg`, + backdropUrl: `${BACKDROP}/wY1HZjM2GvHH4aSyrDvEfVEEW4A.jpg`, + synopsis: 'An aging Chinese immigrant is swept up in an insane adventure, where she alone can save what\'s important to her by connecting with the lives she could have led.', + genres: ['Action', 'Adventure', 'Comedy'], + rating: 7.8, + runtime: 139, + director: 'Daniel Kwan', + cast: ['Michelle Yeoh', 'Ke Huy Quan', 'Stephanie Hsu'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12359', quality: '4K', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Purchase', url: 'https://www.youtube.com/watch?v=wxN1T1qdQ', quality: '4K', icon: 'youtube' }, + ], + }, + { + id: 'f18', + title: 'The Shawshank Redemption', + year: 1994, + posterUrl: `${POSTER}/q6y0Go1tsGEsmtFryDOJo3dEmqu.jpg`, + backdropUrl: `${BACKDROP}/kXfqcdQKsToO0OUXHcrrNCHDBzO.jpg`, + synopsis: 'Over the course of several years, two convicts form a friendship, seeking consolation and, eventually, redemption through basic compassion.', + genres: ['Drama'], + rating: 9.3, + runtime: 142, + director: 'Frank Darabont', + cast: ['Tim Robbins', 'Morgan Freeman', 'Bob Gunton'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12360', quality: '4K', icon: 'plex' }, + { type: 'free-web', name: 'Archive.org', url: 'https://archive.org/details/shawshank', quality: 'SD', icon: 'archive' }, + ], + }, + { + id: 'f19', + title: 'Sicario', + year: 2015, + posterUrl: `${POSTER}/z8sJM6ijaEmVDB8Uo3NJNOoXNqV.jpg`, + backdropUrl: `${BACKDROP}/bLxkraPUhKlE7JQBfaWbWg2U70b.jpg`, + synopsis: 'An idealistic FBI agent is enlisted by a government task force to aid in the escalating war against drugs at the border area between the U.S. and Mexico.', + genres: ['Action', 'Crime', 'Drama'], + rating: 7.6, + runtime: 121, + director: 'Denis Villeneuve', + cast: ['Emily Blunt', 'Josh Brolin', 'Benicio del Toro'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12361', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f20', + title: 'The Dark Knight', + year: 2008, + posterUrl: `${POSTER}/qJ2tW6WMUDux911kpWYrhaCj5l8.jpg`, + backdropUrl: `${BACKDROP}/nMKdUUepR0i5zn0y1T4CsSB5ez.jpg`, + synopsis: 'When the menace known as the Joker wreaks havoc and chaos on the people of Gotham, Batman must accept one of the greatest psychological and physical tests of his ability to fight injustice.', + genres: ['Action', 'Crime', 'Drama'], + rating: 9.0, + runtime: 152, + director: 'Christopher Nolan', + cast: ['Christian Bale', 'Heath Ledger', 'Aaron Eckhart'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12362', quality: '4K IMAX', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Rental', url: 'https://www.youtube.com/watch?v=EXeTwQWrcwY', quality: 'HD', icon: 'youtube' }, + ], + }, + { + id: 'f21', + title: 'Inception', + year: 2010, + posterUrl: `${POSTER}/edv5CZvWj09upOsy2Y6IwDhK8bt.jpg`, + backdropUrl: `${BACKDROP}/s3TBrRGB1iav7gFOCNx3H31MoES.jpg`, + synopsis: 'A thief who steals corporate secrets through dream-sharing technology is given the inverse task of planting an idea into the mind of a C.E.O.', + genres: ['Sci-Fi', 'Action', 'Thriller'], + rating: 8.8, + runtime: 148, + director: 'Christopher Nolan', + cast: ['Leonardo DiCaprio', 'Joseph Gordon-Levitt', 'Elliot Page'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12363', quality: '4K', icon: 'plex' }, + ], + }, + { + id: 'f22', + title: 'Hereditary', + year: 2018, + posterUrl: `${POSTER}/p9fmuz2Oj3FtMGSbVMBCabd06VO.jpg`, + backdropUrl: `${BACKDROP}/5GbkXg1e3i4X2Gfyg4c8JdwVYmt.jpg`, + synopsis: 'A grieving family is haunted by tragic and disturbing occurrences after the death of their secretive grandmother.', + genres: ['Horror', 'Drama', 'Mystery'], + rating: 7.3, + runtime: 127, + director: 'Ari Aster', + cast: ['Toni Collette', 'Milly Shapiro', 'Gabriel Byrne'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12364', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f23', + title: 'The Lighthouse', + year: 2019, + posterUrl: `${POSTER}/3nBrkqpG4Mzp7BnsLWDaiXH3VJZ.jpg`, + backdropUrl: `${BACKDROP}/5BkSkNbcABByJ6MFIxQxKiuN7UI.jpg`, + synopsis: 'Two lighthouse keepers try to maintain their sanity while living on a remote and mysterious New England island in the 1890s.', + genres: ['Drama', 'Fantasy', 'Horror'], + rating: 7.5, + runtime: 109, + director: 'Robert Eggers', + cast: ['Willem Dafoe', 'Robert Pattinson'], + sources: [ + { type: 'nextcloud', name: 'Nextcloud Files', url: 'https://cloud.example.com/s/jkl012', quality: '1080p', icon: 'nextcloud' }, + ], + }, + { + id: 'f24', + title: 'Akira', + year: 1988, + posterUrl: `${POSTER}/neZ0ykEsPqxamsX6o5QNUFILQpa.jpg`, + backdropUrl: `${BACKDROP}/qeyColorZbMBevU5uMZDMXGxiB7.jpg`, + synopsis: 'A secret military project endangers Neo-Tokyo when it turns a biker gang member into a rampaging psychic psychopath.', + genres: ['Animation', 'Sci-Fi', 'Action'], + rating: 8.0, + runtime: 124, + director: 'Katsuhiro Otomo', + cast: ['Mitsuo Iwata', 'Nozomu Sasaki', 'Mami Koyama'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12365', quality: '4K', icon: 'plex' }, + { type: 'free-web', name: 'Archive.org', url: 'https://archive.org/details/akira', quality: 'SD', icon: 'archive' }, + ], + }, + { + id: 'f25', + title: 'There Will Be Blood', + year: 2007, + posterUrl: `${POSTER}/fa0RDkAlCec0STeMNAhPaF89q6U.jpg`, + backdropUrl: `${BACKDROP}/y6lFCjxEGJ4TpQRa5VHRuA6K0M.jpg`, + synopsis: 'A story of family, religion, hatred, oil and madness, focusing on a turn-of-the-century prospector in the early days of the business.', + genres: ['Drama'], + rating: 8.2, + runtime: 158, + director: 'Paul Thomas Anderson', + cast: ['Daniel Day-Lewis', 'Paul Dano', 'Ciarán Hinds'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12366', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f26', + title: 'Oldboy', + year: 2003, + posterUrl: `${POSTER}/pWDtjs568ZfOTMbURQBYuT4Qxka.jpg`, + backdropUrl: `${BACKDROP}/4CnTFELRf0VN1jp59iFmFpYc1S.jpg`, + synopsis: 'After being kidnapped and imprisoned for fifteen years, Oh Dae-Su is released, only to find that he must find his captor in five days.', + genres: ['Action', 'Drama', 'Mystery'], + rating: 8.4, + runtime: 120, + director: 'Park Chan-wook', + cast: ['Choi Min-sik', 'Yoo Ji-tae', 'Kang Hye-jung'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12367', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f27', + title: 'Stalker', + year: 1979, + posterUrl: `${POSTER}/iPbNAc2GnqZgKpAAbEE0Uy9V1Db.jpg`, + backdropUrl: `${BACKDROP}/sBPkb2gPXJrBWa60fAdh8vj4M3I.jpg`, + synopsis: 'A guide leads two men through an area known as the Zone to find a room that grants wishes.', + genres: ['Sci-Fi', 'Drama'], + rating: 8.2, + runtime: 163, + director: 'Andrei Tarkovsky', + cast: ['Aleksandr Kaydanovskiy', 'Anatoliy Solonitsyn', 'Nikolay Grinko'], + sources: [ + { type: 'free-web', name: 'Archive.org', url: 'https://archive.org/details/stalker-1979', quality: 'HD Restored', icon: 'archive' }, + ], + }, + { + id: 'f28', + title: 'Amélie', + year: 2001, + posterUrl: `${POSTER}/nSxDa3M9aMvs3DqxMkNizqRKvEa.jpg`, + backdropUrl: `${BACKDROP}/6eJMISgddTe8i4MH4CnPaFcM3hM.jpg`, + synopsis: 'Amélie is an innocent and naive girl in Paris with her own sense of justice. She decides to help those around her and, along the way, discovers love.', + genres: ['Comedy', 'Romance'], + rating: 8.3, + runtime: 122, + director: 'Jean-Pierre Jeunet', + cast: ['Audrey Tautou', 'Mathieu Kassovitz', 'Rufus'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12368', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f29', + title: 'In the Mood for Love', + year: 2000, + posterUrl: `${POSTER}/iYypPT4bhqXfq1b6sFnVVR4FySt.jpg`, + backdropUrl: `${BACKDROP}/ArbbMEiGPbV4g3a6ahCfrR8pF6a.jpg`, + synopsis: 'Two neighbors form a strong bond after both suspect extramarital activities of their spouses. However, they agree to keep their relationship platonic.', + genres: ['Drama', 'Romance'], + rating: 8.1, + runtime: 98, + director: 'Wong Kar-wai', + cast: ['Tony Leung Chiu-wai', 'Maggie Cheung', 'Ping Lam Siu'], + sources: [ + { type: 'nextcloud', name: 'Nextcloud Files', url: 'https://cloud.example.com/s/mno345', quality: '4K Restored', icon: 'nextcloud' }, + ], + }, + { + id: 'f30', + title: 'The Godfather', + year: 1972, + posterUrl: `${POSTER}/3bhkrj58Vtu7enYsRolD1fZdja1.jpg`, + backdropUrl: `${BACKDROP}/tmU7GeKVybMWFButWEGl2M4GeiP.jpg`, + synopsis: 'The aging patriarch of an organized crime dynasty in postwar New York City transfers control of his clandestine empire to his reluctant youngest son.', + genres: ['Crime', 'Drama'], + rating: 9.2, + runtime: 175, + director: 'Francis Ford Coppola', + cast: ['Marlon Brando', 'Al Pacino', 'James Caan'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12369', quality: '4K Restored', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Purchase', url: 'https://www.youtube.com/watch?v=UaVTIH8mujA', quality: '4K', icon: 'youtube' }, + ], + }, + { + id: 'f31', + title: '2001: A Space Odyssey', + year: 1968, + posterUrl: `${POSTER}/ve72VzNqjgM69Ml8om3OyoEQpFe.jpg`, + backdropUrl: `${BACKDROP}/hxl1y0AFBbzLXFHMDFcqSMsq3qz.jpg`, + synopsis: 'After uncovering a mysterious artifact buried beneath the lunar surface, a spacecraft is sent to Jupiter to find its origins.', + genres: ['Sci-Fi', 'Adventure'], + rating: 8.3, + runtime: 149, + director: 'Stanley Kubrick', + cast: ['Keir Dullea', 'Gary Lockwood', 'William Sylvester'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12370', quality: '4K IMAX', icon: 'plex' }, + ], + }, + { + id: 'f32', + title: 'Pulp Fiction', + year: 1994, + posterUrl: `${POSTER}/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg`, + backdropUrl: `${BACKDROP}/suaEOtk1N1sgg2MTM7oZd2cfVp3.jpg`, + synopsis: 'The lives of two mob hitmen, a boxer, a gangster and his wife, and a pair of diner bandits intertwine in four tales of violence and redemption.', + genres: ['Crime', 'Drama', 'Thriller'], + rating: 8.9, + runtime: 154, + director: 'Quentin Tarantino', + cast: ['John Travolta', 'Samuel L. Jackson', 'Uma Thurman'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12371', quality: '4K', icon: 'plex' }, + { type: 'free-web', name: 'Tubi', url: 'https://tubitv.com/movies/pulp-fiction', quality: 'HD', icon: 'tubi' }, + ], + }, + { + id: 'f33', + title: 'Annihilation', + year: 2018, + posterUrl: `${POSTER}/d3qcpfNwbAMCNqWDHzPQsUoj7ig.jpg`, + backdropUrl: `${BACKDROP}/1Y2YzOmVhCQ4c0TjlCqfJBl8Ykz.jpg`, + synopsis: 'A biologist signs up for a dangerous, secret expedition into a mysterious zone where the laws of nature don\'t apply.', + genres: ['Sci-Fi', 'Horror', 'Adventure'], + rating: 6.8, + runtime: 115, + director: 'Alex Garland', + cast: ['Natalie Portman', 'Jennifer Jason Leigh', 'Tessa Thompson'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12372', quality: '4K', icon: 'plex' }, + ], + }, + { + id: 'f34', + title: 'Children of Men', + year: 2006, + posterUrl: `${POSTER}/uONhGnVGieGqjw74vRIh5DLaZbr.jpg`, + backdropUrl: `${BACKDROP}/cM7wqMsIEjMZ0qsIXRoYZqfk0s.jpg`, + synopsis: 'In 2027, in a chaotic world in which women have somehow become infertile, a former activist agrees to help transport a miraculously pregnant woman to a sanctuary at sea.', + genres: ['Sci-Fi', 'Drama', 'Thriller'], + rating: 7.9, + runtime: 109, + director: 'Alfonso Cuarón', + cast: ['Clive Owen', 'Julianne Moore', 'Michael Caine'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12373', quality: '1080p', icon: 'plex' }, + { type: 'nextcloud', name: 'Nextcloud Files', url: 'https://cloud.example.com/s/pqr678', quality: '1080p', icon: 'nextcloud' }, + ], + }, + { + id: 'f35', + title: 'Pan\'s Labyrinth', + year: 2006, + posterUrl: `${POSTER}/s2Ih5jSFCJwMqEIVsBYyNn0Tyx5.jpg`, + backdropUrl: `${BACKDROP}/4qfadVQIJm7R3LzqObDtBGN1OXi.jpg`, + synopsis: 'In the Falangist Spain of 1944, the bookish young stepdaughter of a sadistic army officer escapes into an eerie but captivating fantasy world.', + genres: ['Drama', 'Fantasy', 'War'], + rating: 8.2, + runtime: 118, + director: 'Guillermo del Toro', + cast: ['Ivana Baquero', 'Ariadna Gil', 'Sergi López'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12374', quality: '4K', icon: 'plex' }, + ], + }, + { + id: 'f36', + title: 'Eternal Sunshine of the Spotless Mind', + year: 2004, + posterUrl: `${POSTER}/5MwkWH9tYHv3mV9OdYTMR5qreIz.jpg`, + backdropUrl: `${BACKDROP}/6f1a2p19dOLF0USwPgHx3TXbD8U.jpg`, + synopsis: 'When their relationship turns sour, a couple undergoes a medical procedure to have each other erased from their memories.', + genres: ['Drama', 'Romance', 'Sci-Fi'], + rating: 8.3, + runtime: 108, + director: 'Michel Gondry', + cast: ['Jim Carrey', 'Kate Winslet', 'Tom Wilkinson'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12375', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f37', + title: 'Taxi Driver', + year: 1976, + posterUrl: `${POSTER}/ekstpH614fwDX8DUln1a2Opz0N8.jpg`, + backdropUrl: `${BACKDROP}/ghbSODMHaSDNkGg2yF6R4Rq2FM.jpg`, + synopsis: 'A mentally unstable veteran works as a nighttime taxi driver in New York City, where the perceived decadence and sleaze fuels his urge for violent action.', + genres: ['Crime', 'Drama'], + rating: 8.2, + runtime: 114, + director: 'Martin Scorsese', + cast: ['Robert De Niro', 'Jodie Foster', 'Cybill Shepherd'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12376', quality: '4K Restored', icon: 'plex' }, + ], + }, + { + id: 'f38', + title: 'Mulholland Drive', + year: 2001, + posterUrl: `${POSTER}/tVxGt7uffLVhIIcwuldXjy4JvMH.jpg`, + backdropUrl: `${BACKDROP}/bV8PLdElQVafeXvOnnFiFZNrFPM.jpg`, + synopsis: 'After a car wreck on the winding Mulholland Drive renders a woman amnesiac, she and a perky Hollywood-hopeful search for clues and answers.', + genres: ['Drama', 'Mystery', 'Thriller'], + rating: 7.9, + runtime: 147, + director: 'David Lynch', + cast: ['Naomi Watts', 'Laura Harring', 'Justin Theroux'], + sources: [ + { type: 'nextcloud', name: 'Nextcloud Files', url: 'https://cloud.example.com/s/stu901', quality: '4K Restored', icon: 'nextcloud' }, + ], + }, + { + id: 'f39', + title: 'The Departed', + year: 2006, + posterUrl: `${POSTER}/nT97ifVT2J1yMQmeq20Dqv28.jpg`, + backdropUrl: `${BACKDROP}/8Id2Z4LB12BMLMoJnFHMFht4bXP.jpg`, + synopsis: 'An undercover cop and a mole in the police attempt to identify each other while infiltrating an Irish gang in South Boston.', + genres: ['Crime', 'Drama', 'Thriller'], + rating: 8.5, + runtime: 151, + director: 'Martin Scorsese', + cast: ['Leonardo DiCaprio', 'Matt Damon', 'Jack Nicholson'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12377', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f40', + title: 'Prisoners', + year: 2013, + posterUrl: `${POSTER}/uhBqwitKfOP0FBPblUBqxgce6hg.jpg`, + backdropUrl: `${BACKDROP}/2E0PFGHgJBMSJ4GpjBmCnaBqCmz.jpg`, + synopsis: 'When Keller Dover\'s daughter and her friend go missing, he takes matters into his own hands as the police pursue multiple leads.', + genres: ['Crime', 'Drama', 'Mystery'], + rating: 8.1, + runtime: 153, + director: 'Denis Villeneuve', + cast: ['Hugh Jackman', 'Jake Gyllenhaal', 'Viola Davis'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12378', quality: '1080p', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Rental', url: 'https://www.youtube.com/watch?v=bLv3JM2x2bc', quality: 'HD', icon: 'youtube' }, + ], + }, + { + id: 'f41', + title: 'Goodfellas', + year: 1990, + posterUrl: `${POSTER}/aKuFiU82s5ISJpGZp7YkIr3kCUd.jpg`, + backdropUrl: `${BACKDROP}/sw7mordbZxgITU877yTpZCud90M.jpg`, + synopsis: 'The story of Henry Hill and his life in the mob, covering his relationship with his wife Karen Hill and his mob partners.', + genres: ['Crime', 'Drama', 'Biography'], + rating: 8.7, + runtime: 146, + director: 'Martin Scorsese', + cast: ['Robert De Niro', 'Ray Liotta', 'Joe Pesci'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12379', quality: '4K', icon: 'plex' }, + ], + }, + { + id: 'f42', + title: 'Ghost in the Shell', + year: 1995, + posterUrl: `${POSTER}/9gC88zYUBbuGRzgyNcE1xj0QRZL.jpg`, + backdropUrl: `${BACKDROP}/t7Gy2V5tGGWsRCsH7m6hI1OXm06.jpg`, + synopsis: 'A cyborg policewoman and her partner hunt a mysterious and powerful hacker called the Puppet Master.', + genres: ['Animation', 'Sci-Fi', 'Action'], + rating: 8.0, + runtime: 83, + director: 'Mamoru Oshii', + cast: ['Atsuko Tanaka', 'Akio Ōtsuka', 'Iemasa Kayumi'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12380', quality: '4K', icon: 'plex' }, + { type: 'free-web', name: 'Archive.org', url: 'https://archive.org/details/gits1995', quality: 'SD', icon: 'archive' }, + ], + }, + { + id: 'f43', + title: 'The Prestige', + year: 2006, + posterUrl: `${POSTER}/tRNlZbgNCNOpLpbPEz5L8G8A0JN.jpg`, + backdropUrl: `${BACKDROP}/s0EfkKJONLVCT9Q3UrPW0q07rT1.jpg`, + synopsis: 'After a tragic accident, two stage magicians in 1890s London engage in a battle to create the ultimate illusion while sacrificing everything they have.', + genres: ['Drama', 'Mystery', 'Sci-Fi'], + rating: 8.5, + runtime: 130, + director: 'Christopher Nolan', + cast: ['Christian Bale', 'Hugh Jackman', 'Scarlett Johansson'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12381', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f44', + title: 'Solaris', + year: 1972, + posterUrl: `${POSTER}/2sF5EfIwZMY0eT0U0iH5A43OLK2.jpg`, + backdropUrl: `${BACKDROP}/ixjQv30AYFXxGE7RaReGJn0YnQJ.jpg`, + synopsis: 'A psychologist is sent to a station orbiting a distant planet in order to discover what has caused the crew to go insane.', + genres: ['Sci-Fi', 'Drama', 'Mystery'], + rating: 8.1, + runtime: 167, + director: 'Andrei Tarkovsky', + cast: ['Natalya Bondarchuk', 'Donatas Banionis', 'Jüri Järvet'], + sources: [ + { type: 'free-web', name: 'Archive.org', url: 'https://archive.org/details/solaris-1972', quality: 'HD Restored', icon: 'archive' }, + ], + }, + { + id: 'f45', + title: 'City of God', + year: 2002, + posterUrl: `${POSTER}/k7eYdWvhYQyRQoU2TB2A2Xu2TIM.jpg`, + backdropUrl: `${BACKDROP}/efnAMhQJMH4EvEZqPEB5SRXWihi.jpg`, + synopsis: 'In the slums of Rio, two kids\' paths diverge as one struggles to become a photographer and the other a kingpin.', + genres: ['Crime', 'Drama'], + rating: 8.6, + runtime: 130, + director: 'Fernando Meirelles', + cast: ['Alexandre Rodrigues', 'Leandro Firmino', 'Matheus Nachtergaele'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12382', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f46', + title: 'The Truman Show', + year: 1998, + posterUrl: `${POSTER}/vuza0WqY239yBXOadKlGwJsZJFE.jpg`, + backdropUrl: `${BACKDROP}/Al5GPz9U2mB2OPktKEIiHK7v97E.jpg`, + synopsis: 'An insurance salesman discovers his whole life is actually a reality TV show.', + genres: ['Comedy', 'Drama', 'Sci-Fi'], + rating: 8.2, + runtime: 103, + director: 'Peter Weir', + cast: ['Jim Carrey', 'Ed Harris', 'Laura Linney'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12383', quality: '1080p', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Rental', url: 'https://www.youtube.com/watch?v=dlnmQbPGuls', quality: 'HD', icon: 'youtube' }, + ], + }, + { + id: 'f47', + title: 'Gattaca', + year: 1997, + posterUrl: `${POSTER}/rkgZpFhI4xGSWljCxPWkb1XMoB2.jpg`, + backdropUrl: `${BACKDROP}/3oTf3cfrTJbVW3fnSQNaJZBL2NQ.jpg`, + synopsis: 'A genetically inferior man assumes the identity of a superior one in order to pursue his lifelong dream of space travel.', + genres: ['Sci-Fi', 'Drama', 'Thriller'], + rating: 7.8, + runtime: 106, + director: 'Andrew Niccol', + cast: ['Ethan Hawke', 'Uma Thurman', 'Jude Law'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12384', quality: '1080p', icon: 'plex' }, + ], + }, + { + id: 'f48', + title: 'Memento', + year: 2000, + posterUrl: `${POSTER}/yuNs09hvpHVU1cBTCAk9zxsL2oW.jpg`, + backdropUrl: `${BACKDROP}/rpMn6Rl6IrvnyXcLPLEXaJPFvK8.jpg`, + synopsis: 'A man with short-term memory loss attempts to track down his wife\'s murderer using tattoos and notes.', + genres: ['Mystery', 'Thriller'], + rating: 8.4, + runtime: 113, + director: 'Christopher Nolan', + cast: ['Guy Pearce', 'Carrie-Anne Moss', 'Joe Pantoliano'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12385', quality: '1080p', icon: 'plex' }, + { type: 'free-web', name: 'Tubi', url: 'https://tubitv.com/movies/memento', quality: 'HD', icon: 'tubi' }, + ], + }, + { + id: 'f49', + title: 'The Thing', + year: 1982, + posterUrl: `${POSTER}/tzGY49kseSE9QAKk47uuDGwnSCu.jpg`, + backdropUrl: `${BACKDROP}/hILmnSocNhXYn7mPGvn1ICeu5nq.jpg`, + synopsis: 'A research team in Antarctica is hunted by a shape-shifting alien that assumes the appearance of its victims.', + genres: ['Horror', 'Sci-Fi', 'Mystery'], + rating: 8.2, + runtime: 109, + director: 'John Carpenter', + cast: ['Kurt Russell', 'Wilford Brimley', 'Keith David'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12386', quality: '4K', icon: 'plex' }, + ], + }, + { + id: 'f50', + title: 'Dune: Part Two', + year: 2024, + posterUrl: `${POSTER}/8b8R8l88Qje9dn9OE8PY05Nxl1X.jpg`, + backdropUrl: `${BACKDROP}/xOMo8BRK7PfcJv9JCnx7s5hj0PX.jpg`, + synopsis: 'Paul Atreides unites with Chani and the Fremen while on a warpath of revenge against the conspirators who destroyed his family.', + genres: ['Sci-Fi', 'Adventure', 'Drama'], + rating: 8.3, + runtime: 166, + director: 'Denis Villeneuve', + cast: ['Timothée Chalamet', 'Zendaya', 'Austin Butler'], + sources: [ + { type: 'plex', name: 'Plex Library', url: 'plex://play?key=/library/metadata/12387', quality: '4K IMAX', icon: 'plex' }, + { type: 'youtube', name: 'YouTube Purchase', url: 'https://www.youtube.com/watch?v=Way9Dexny3w', quality: '4K', icon: 'youtube' }, + ], + }, +] + +export const allGenres = [...new Set(mockFilms.flatMap((f) => f.genres))].sort() + +export const allSources = [...new Set(mockFilms.flatMap((f) => f.sources.map((s) => s.type)))] + +export function searchFilms(query: string): Film[] { + const q = query.toLowerCase() + return mockFilms.filter( + (f) => + f.title.toLowerCase().includes(q) || + f.director.toLowerCase().includes(q) || + f.genres.some((g) => g.toLowerCase().includes(q)) || + f.cast.some((c) => c.toLowerCase().includes(q)) + ) +} + +export function filterFilms(options: { + genres?: string[] + minRating?: number + sources?: string[] + yearRange?: [number, number] +}): Film[] { + return mockFilms.filter((f) => { + if (options.genres?.length && !options.genres.some((g) => f.genres.includes(g))) return false + if (options.minRating && f.rating < options.minRating) return false + if (options.sources?.length && !options.sources.some((s) => f.sources.some((fs) => fs.type === s))) return false + if (options.yearRange) { + if (f.year < options.yearRange[0] || f.year > options.yearRange[1]) return false + } + return true + }) +} diff --git a/packages/app/src/pages/ChatPage.vue b/packages/app/src/pages/ChatPage.vue new file mode 100644 index 00000000..35de3ae3 --- /dev/null +++ b/packages/app/src/pages/ChatPage.vue @@ -0,0 +1,43 @@ +