Archipelago — open-source initial import

This commit is contained in:
Archipelago
2026-08-12 10:55:50 +00:00
commit b67e1527a2
2068 changed files with 472303 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
/**
* Mock Archy node data for standalone dev/testing.
* Provides realistic data for all 6 context categories so you can test
* the Archy integration without running inside an actual Archipelago node.
*
* Enable with: VITE_MOCK_ARCHY=true or ?mockArchy URL param
*/
import type { ArchyWalletInfo, ArchyBitcoinInfo, ArchyFileEntry } from '@/composables/useArchy'
export interface MockArchyApp {
id: string
name: string
state: 'running' | 'stopped'
status: string
}
export const mockArchyApps: MockArchyApp[] = [
{ id: 'bitcoin-core', name: 'Bitcoin Core', state: 'running', status: 'Synced — Block 893,412' },
{ id: 'lnd', name: 'LND', state: 'running', status: '6 channels, 12 peers' },
{ id: 'mempool', name: 'Mempool', state: 'running', status: 'Healthy' },
{ id: 'btcpay-server', name: 'BTCPay Server', state: 'running', status: 'Healthy' },
{ id: 'nextcloud', name: 'Nextcloud', state: 'running', status: '847 files, 12.4 GB used' },
{ id: 'immich', name: 'Immich', state: 'running', status: '2,341 photos, 89 videos' },
{ id: 'nostr-rs-relay', name: 'nostr-rs-relay', state: 'running', status: '14,203 events' },
{ id: 'home-assistant', name: 'Home Assistant', state: 'stopped', status: 'Stopped' },
{ id: 'searxng', name: 'SearXNG', state: 'running', status: 'Healthy' },
{ id: 'grafana', name: 'Grafana', state: 'running', status: 'Healthy' },
{ id: 'ollama', name: 'Ollama', state: 'stopped', status: 'Stopped' },
]
export const mockArchySystem = {
name: 'Archipelago',
version: '0.9.2',
}
export const mockArchyNetwork = {
connected: true,
}
export const mockArchyWallet: ArchyWalletInfo = {
available: true,
status: 'active',
alias: 'MyNode',
num_active_channels: 6,
num_peers: 12,
synced_to_chain: true,
block_height: 893412,
balance_sats: 1_250_000,
channel_balance_sats: 3_500_000,
pending_open_balance: 0,
}
export const mockArchyBitcoin: ArchyBitcoinInfo = {
available: true,
block_height: 893412,
sync_progress: 1.0,
chain: 'mainnet',
mempool_tx_count: 42_350,
mempool_size: 128_000_000,
}
export const mockArchyFiles: ArchyFileEntry[] = [
{ name: 'Documents', path: '/Documents', type: 'folder' },
{ name: 'Photos', path: '/Photos', type: 'folder' },
{ name: 'Music', path: '/Music', type: 'folder' },
{ name: 'Videos', path: '/Videos', type: 'folder' },
{ name: 'family-reunion-2024.jpg', path: '/Photos/family-reunion-2024.jpg', type: 'file', size: 4_200_000, modified: '2024-12-25' },
{ name: 'sunset-beach.jpg', path: '/Photos/sunset-beach.jpg', type: 'file', size: 3_800_000, modified: '2024-11-15' },
{ name: 'node-setup-guide.pdf', path: '/Documents/node-setup-guide.pdf', type: 'file', size: 2_100_000, modified: '2024-10-01' },
{ name: 'bitcoin-whitepaper.pdf', path: '/Documents/bitcoin-whitepaper.pdf', type: 'file', size: 184_000, modified: '2024-01-03' },
{ name: 'household-budget.ods', path: '/Documents/household-budget.ods', type: 'file', size: 45_000, modified: '2025-02-28' },
{ name: 'birthday-video.mp4', path: '/Videos/birthday-video.mp4', type: 'file', size: 250_000_000, modified: '2025-01-15' },
{ name: 'conference-talk.mp4', path: '/Videos/conference-talk.mp4', type: 'file', size: 180_000_000, modified: '2024-09-20' },
{ name: 'podcast-episode.mp3', path: '/Music/podcast-episode.mp3', type: 'file', size: 45_000_000, modified: '2025-03-01' },
{ name: 'backup-keys.txt', path: '/Documents/backup-keys.txt', type: 'file', size: 1200, modified: '2024-06-15' },
{ name: 'recipes.md', path: '/Documents/recipes.md', type: 'file', size: 8500, modified: '2025-02-14' },
{ name: 'travel-plans.md', path: '/Documents/travel-plans.md', type: 'file', size: 3200, modified: '2025-03-05' },
]
+35
View File
@@ -0,0 +1,35 @@
import type { Book } from '@aiui/core/types/content'
export const mockBooks: Book[] = [
{ id: 'b1', title: 'The Bitcoin Standard', author: 'Saifedean Ammous', year: 2018, isbn: '9781119473862', coverUrl: 'https://covers.openlibrary.org/b/isbn/9781119473862-M.jpg', genres: ['Economics', 'Bitcoin'], pages: 304, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9781119473862' }] },
{ id: 'b2', title: 'Mastering Bitcoin', author: 'Andreas M. Antonopoulos', year: 2017, isbn: '9781491954386', coverUrl: 'https://covers.openlibrary.org/b/isbn/9781491954386-M.jpg', genres: ['Technology', 'Bitcoin'], pages: 416, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9781491954386' }] },
{ id: 'b3', title: 'Neuromancer', author: 'William Gibson', year: 1984, isbn: '9780441569595', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780441569595-M.jpg', genres: ['Sci-Fi', 'Cyberpunk'], pages: 271, sources: [{ type: 'gutenberg', name: 'Project Gutenberg', url: 'https://www.gutenberg.org' }] },
{ id: 'b4', title: 'Snow Crash', author: 'Neal Stephenson', year: 1992, isbn: '9780553380958', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780553380958-M.jpg', genres: ['Sci-Fi', 'Cyberpunk'], pages: 480, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780553380958' }] },
{ id: 'b5', title: 'Dune', author: 'Frank Herbert', year: 1965, isbn: '9780441172719', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780441172719-M.jpg', genres: ['Sci-Fi', 'Adventure'], pages: 688, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780441172719' }] },
{ id: 'b6', title: '1984', author: 'George Orwell', year: 1949, isbn: '9780451524935', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780451524935-M.jpg', genres: ['Dystopian', 'Political Fiction'], pages: 328, sources: [{ type: 'gutenberg', name: 'Project Gutenberg', url: 'https://www.gutenberg.org/ebooks/85' }] },
{ id: 'b7', title: 'Brave New World', author: 'Aldous Huxley', year: 1932, isbn: '9780060850524', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780060850524-M.jpg', genres: ['Dystopian', 'Sci-Fi'], pages: 288, sources: [{ type: 'archive', name: 'Internet Archive', url: 'https://archive.org/details/bravenewworld' }] },
{ id: 'b8', title: 'The Sovereign Individual', author: 'James Dale Davidson', year: 1997, isbn: '9780684832722', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780684832722-M.jpg', genres: ['Economics', 'Futurism'], pages: 432, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780684832722' }] },
{ id: 'b9', title: 'Cryptonomicon', author: 'Neal Stephenson', year: 1999, isbn: '9780060512804', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780060512804-M.jpg', genres: ['Sci-Fi', 'Historical Fiction'], pages: 1168, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780060512804' }] },
{ id: 'b10', title: 'The Hitchhiker\'s Guide to the Galaxy', author: 'Douglas Adams', year: 1979, isbn: '9780345391803', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780345391803-M.jpg', genres: ['Sci-Fi', 'Comedy'], pages: 216, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780345391803' }] },
{ id: 'b11', title: 'Foundation', author: 'Isaac Asimov', year: 1951, isbn: '9780553293357', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780553293357-M.jpg', genres: ['Sci-Fi'], pages: 244, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780553293357' }] },
{ id: 'b12', title: 'The Cypherpunks', author: 'Julian Assange', year: 2012, isbn: '9781939293008', coverUrl: 'https://covers.openlibrary.org/b/isbn/9781939293008-M.jpg', genres: ['Technology', 'Privacy'], pages: 186, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9781939293008' }] },
{ id: 'b13', title: 'Fahrenheit 451', author: 'Ray Bradbury', year: 1953, isbn: '9781451673319', coverUrl: 'https://covers.openlibrary.org/b/isbn/9781451673319-M.jpg', genres: ['Dystopian', 'Sci-Fi'], pages: 194, sources: [{ type: 'gutenberg', name: 'Project Gutenberg', url: 'https://www.gutenberg.org' }] },
{ id: 'b14', title: 'Do Androids Dream of Electric Sheep?', author: 'Philip K. Dick', year: 1968, isbn: '9780345404473', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780345404473-M.jpg', genres: ['Sci-Fi'], pages: 244, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780345404473' }] },
{ id: 'b15', title: 'The Left Hand of Darkness', author: 'Ursula K. Le Guin', year: 1969, isbn: '9780441478125', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780441478125-M.jpg', genres: ['Sci-Fi', 'Fantasy'], pages: 304, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780441478125' }] },
{ id: 'b16', title: 'Solaris', author: 'Stanislaw Lem', year: 1961, isbn: '9780156027601', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780156027601-M.jpg', genres: ['Sci-Fi'], pages: 224, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780156027601' }] },
{ id: 'b17', title: 'The Network State', author: 'Balaji Srinivasan', year: 2022, isbn: '9798986127507', coverUrl: 'https://covers.openlibrary.org/b/isbn/9798986127507-M.jpg', genres: ['Technology', 'Political Theory'], pages: 432, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9798986127507' }] },
{ id: 'b18', title: 'The Fiat Standard', author: 'Saifedean Ammous', year: 2021, isbn: '9781544526478', coverUrl: 'https://covers.openlibrary.org/b/isbn/9781544526478-M.jpg', genres: ['Economics', 'Bitcoin'], pages: 382, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9781544526478' }] },
{ id: 'b19', title: 'Hyperion', author: 'Dan Simmons', year: 1989, isbn: '9780553283686', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780553283686-M.jpg', genres: ['Sci-Fi', 'Space Opera'], pages: 482, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780553283686' }] },
{ id: 'b20', title: 'Blindsight', author: 'Peter Watts', year: 2006, isbn: '9780765319647', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780765319647-M.jpg', genres: ['Sci-Fi', 'Hard SF'], pages: 384, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780765319647' }] },
{ id: 'b21', title: 'The Dispossessed', author: 'Ursula K. Le Guin', year: 1974, isbn: '9780060512750', coverUrl: 'https://covers.openlibrary.org/b/isbn/9780060512750-M.jpg', genres: ['Sci-Fi', 'Utopian'], pages: 387, sources: [{ type: 'openlibrary', name: 'Open Library', url: 'https://openlibrary.org/isbn/9780060512750' }] },
]
export function searchBooks(query: string): Book[] {
const q = query.toLowerCase()
return mockBooks.filter(
(b) =>
b.title.toLowerCase().includes(q) ||
b.author.toLowerCase().includes(q) ||
(b.genres ?? []).some((g) => g.toLowerCase().includes(q))
)
}
+862
View File
@@ -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
})
}
+30
View File
@@ -0,0 +1,30 @@
import type { ImageItem } from '@aiui/core/types/content'
export const mockImages: ImageItem[] = [
{ id: 'img1', title: 'Cyberpunk City at Night', url: 'https://picsum.photos/id/1/1200/800', width: 1200, height: 800, alt: 'Cyberpunk city at night' },
{ id: 'img2', title: 'Mountain Landscape', url: 'https://picsum.photos/id/10/1200/800', width: 1200, height: 800, alt: 'Mountain landscape' },
{ id: 'img3', title: 'Ocean Sunset', url: 'https://picsum.photos/id/14/1200/800', width: 1200, height: 800, alt: 'Ocean sunset' },
{ id: 'img4', title: 'Forest Path', url: 'https://picsum.photos/id/15/1200/800', width: 1200, height: 800, alt: 'Forest path' },
{ id: 'img5', title: 'Abstract Art', url: 'https://picsum.photos/id/20/1200/800', width: 1200, height: 800, alt: 'Abstract art' },
{ id: 'img6', title: 'Desert Dunes', url: 'https://picsum.photos/id/22/1200/800', width: 1200, height: 800, alt: 'Desert dunes' },
{ id: 'img7', title: 'City Architecture', url: 'https://picsum.photos/id/26/1200/800', width: 1200, height: 800, alt: 'City architecture' },
{ id: 'img8', title: 'Northern Lights', url: 'https://picsum.photos/id/29/1200/800', width: 1200, height: 800, alt: 'Northern lights' },
{ id: 'img9', title: 'Space Nebula', url: 'https://picsum.photos/id/30/1200/800', width: 1200, height: 800, alt: 'Space nebula' },
{ id: 'img10', title: 'Macro Photography', url: 'https://picsum.photos/id/36/1200/800', width: 1200, height: 800, alt: 'Macro photography' },
{ id: 'img11', title: 'Winter Scene', url: 'https://picsum.photos/id/40/1200/800', width: 1200, height: 800, alt: 'Winter scene' },
{ id: 'img12', title: 'Street Photography', url: 'https://picsum.photos/id/42/1200/800', width: 1200, height: 800, alt: 'Street photography' },
{ id: 'img13', title: 'Underwater World', url: 'https://picsum.photos/id/45/1200/800', width: 1200, height: 800, alt: 'Underwater world' },
{ id: 'img14', title: 'Vintage Train', url: 'https://picsum.photos/id/47/1200/800', width: 1200, height: 800, alt: 'Vintage train' },
{ id: 'img15', title: 'Botanical Garden', url: 'https://picsum.photos/id/49/1200/800', width: 1200, height: 800, alt: 'Botanical garden' },
{ id: 'img16', title: 'Aerial View', url: 'https://picsum.photos/id/50/1200/800', width: 1200, height: 800, alt: 'Aerial view' },
{ id: 'img17', title: 'Neon Signs', url: 'https://picsum.photos/id/55/1200/800', width: 1200, height: 800, alt: 'Neon signs' },
{ id: 'img18', title: 'Foggy Bridge', url: 'https://picsum.photos/id/57/1200/800', width: 1200, height: 800, alt: 'Foggy bridge' },
{ id: 'img19', title: 'Lightning Storm', url: 'https://picsum.photos/id/60/1200/800', width: 1200, height: 800, alt: 'Lightning storm' },
{ id: 'img20', title: 'Retro Computer', url: 'https://picsum.photos/id/63/1200/800', width: 1200, height: 800, alt: 'Retro computer' },
{ id: 'img21', title: 'Crystal Cave', url: 'https://picsum.photos/id/65/1200/800', width: 1200, height: 800, alt: 'Crystal cave' },
]
export function searchImages(query: string): ImageItem[] {
const q = query.toLowerCase()
return mockImages.filter((img) => (img.title ?? '').toLowerCase().includes(q))
}
+13
View File
@@ -0,0 +1,13 @@
export { mockFilms, searchFilms, filterFilms, allGenres, allSources } from './films'
export { mockSongs } from './songs'
export { mockBooks, searchBooks } from './books'
export { mockTVShows, searchTVShows } from './tvshows'
export { mockImages, searchImages } from './images'
export { mockPlaces, searchPlaces } from './places'
export { mockNews, searchNews } from './news'
export { mockNostrEvents, MockNostrRelay } from './nostr'
export { mockTMDBSearch, mockTMDBSearchResponses, mockTMDBGenres } from './tmdb'
export type { MockNewsArticle } from './news'
export type { MockNostrEvent } from './nostr'
export type { TMDBSearchResult, TMDBSearchResponse } from './tmdb'
+45
View File
@@ -0,0 +1,45 @@
export interface MockNewsArticle {
id: string
title: string
source: string
url: string
publishedAt: string
summary: string
category: string
imageUrl?: string
}
export const mockNews: MockNewsArticle[] = [
{ id: 'n1', title: 'Bitcoin Surpasses $150,000 Mark as Institutional Adoption Accelerates', source: 'Bitcoin Magazine', url: 'https://bitcoinmagazine.com/markets/btc-150k', publishedAt: '2026-03-01', summary: 'Bitcoin reached a new all-time high as major pension funds added BTC to their portfolios.', category: 'Markets', imageUrl: 'https://images.unsplash.com/photo-1621761191319-c6fb62004040?w=600&h=400&fit=crop' },
{ id: 'n2', title: 'Lightning Network Capacity Reaches 100,000 BTC', source: 'The Block', url: 'https://theblock.co/lightning-100k', publishedAt: '2026-02-28', summary: 'The Lightning Network continues its exponential growth with total capacity surpassing 100K BTC.', category: 'Technology', imageUrl: 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=600&h=400&fit=crop' },
{ id: 'n3', title: 'Nostr Protocol Reaches 50 Million Users Worldwide', source: 'Nostr Report', url: 'https://nostr.report/50m-users', publishedAt: '2026-02-27', summary: 'The censorship-resistant social protocol has seen massive growth in decentralized communication.', category: 'Technology', imageUrl: 'https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=600&h=400&fit=crop' },
{ id: 'n4', title: 'EU Digital Identity Regulation Raises Privacy Concerns', source: 'EFF', url: 'https://eff.org/eu-digital-id', publishedAt: '2026-02-26', summary: 'Digital rights groups warn about surveillance implications of new EU digital identity requirements.', category: 'Privacy', imageUrl: 'https://images.unsplash.com/photo-1557597774-9d273605dfa9?w=600&h=400&fit=crop' },
{ id: 'n5', title: 'Open Source AI Models Now Match Proprietary Performance', source: 'Ars Technica', url: 'https://arstechnica.com/open-ai-models', publishedAt: '2026-02-25', summary: 'New open-source language models demonstrate capabilities on par with commercial alternatives.', category: 'AI', imageUrl: 'https://images.unsplash.com/photo-1677442136019-21780ecad995?w=600&h=400&fit=crop' },
{ id: 'n6', title: 'Fedimint Launches Production-Ready Version 1.0', source: 'Bitcoin Magazine', url: 'https://bitcoinmagazine.com/fedimint-1', publishedAt: '2026-02-24', summary: 'Community custody protocol Fedimint releases its first production-ready version.', category: 'Bitcoin', imageUrl: 'https://images.unsplash.com/photo-1639762681057-408e52192e55?w=600&h=400&fit=crop' },
{ id: 'n7', title: 'WebAssembly 3.0 Specification Published', source: 'Mozilla Blog', url: 'https://blog.mozilla.org/wasm-3', publishedAt: '2026-02-23', summary: 'The new WASM spec brings garbage collection and improved interop with JavaScript.', category: 'Technology', imageUrl: 'https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=600&h=400&fit=crop' },
{ id: 'n8', title: 'Signal Protocol Integrated Into Major Email Providers', source: 'Wired', url: 'https://wired.com/signal-email', publishedAt: '2026-02-22', summary: 'End-to-end encryption becomes the default for several major email services.', category: 'Privacy', imageUrl: 'https://images.unsplash.com/photo-1563013544-824ae1b704d3?w=600&h=400&fit=crop' },
{ id: 'n9', title: 'Bitcoin Mining Now 80% Renewable Energy', source: 'CoinDesk', url: 'https://coindesk.com/mining-renewables', publishedAt: '2026-02-21', summary: 'Industry report shows Bitcoin mining has become predominantly powered by renewable energy sources.', category: 'Mining', imageUrl: 'https://images.unsplash.com/photo-1509391366360-2e959784a276?w=600&h=400&fit=crop' },
{ id: 'n10', title: 'Cashu eCash Protocol Sees Rapid Adoption', source: 'Bitcoin Magazine', url: 'https://bitcoinmagazine.com/cashu-adoption', publishedAt: '2026-02-20', summary: 'The Chaumian eCash protocol built on Bitcoin sees growing usage for privacy-preserving payments.', category: 'Bitcoin', imageUrl: 'https://images.unsplash.com/photo-1620321023374-d1a68fbc720d?w=600&h=400&fit=crop' },
{ id: 'n11', title: 'Framework Laptop Launches ARM-Based Model', source: 'The Verge', url: 'https://theverge.com/framework-arm', publishedAt: '2026-02-19', summary: 'The repairable laptop company expands its lineup with an ARM processor option.', category: 'Hardware', imageUrl: 'https://images.unsplash.com/photo-1496181133206-80ce9b88a853?w=600&h=400&fit=crop' },
{ id: 'n12', title: 'Rust Becomes Top 5 Programming Language', source: 'TIOBE', url: 'https://tiobe.com/rust-top-5', publishedAt: '2026-02-18', summary: 'Memory-safe language Rust enters the top 5 in the TIOBE programming language index.', category: 'Technology', imageUrl: 'https://images.unsplash.com/photo-1461749280684-dccba630e2f6?w=600&h=400&fit=crop' },
{ id: 'n13', title: 'El Salvador Bitcoin Strategy Yields 300% Returns', source: 'Reuters', url: 'https://reuters.com/el-salvador-btc', publishedAt: '2026-02-17', summary: 'El Salvador\'s Bitcoin holdings have tripled in value since the country made it legal tender.', category: 'Markets', imageUrl: 'https://images.unsplash.com/photo-1526304640581-d334cdbbf45e?w=600&h=400&fit=crop' },
{ id: 'n14', title: 'IPFS Pinning Becomes Free for Open Source Projects', source: 'Protocol Labs Blog', url: 'https://blog.protocol.ai/free-ipfs', publishedAt: '2026-02-16', summary: 'A new initiative provides free IPFS pinning for open source and public good projects.', category: 'Technology', imageUrl: 'https://images.unsplash.com/photo-1544197150-b99a580bb7a8?w=600&h=400&fit=crop' },
{ id: 'n15', title: 'Privacy-Preserving AI Training Methods Breakthrough', source: 'Nature', url: 'https://nature.com/private-ai', publishedAt: '2026-02-15', summary: 'Researchers demonstrate AI training on encrypted data without performance loss.', category: 'AI', imageUrl: 'https://images.unsplash.com/photo-1507146153580-69a1fe6d8aa1?w=600&h=400&fit=crop' },
{ id: 'n16', title: 'Mesh Networking Protocol Goes Mainstream', source: 'TechCrunch', url: 'https://techcrunch.com/mesh-mainstream', publishedAt: '2026-02-14', summary: 'New mesh networking standard enables peer-to-peer connectivity without traditional ISPs.', category: 'Technology', imageUrl: 'https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=600&h=400&fit=crop' },
{ id: 'n17', title: 'Bitcoin Multisig Wallets See Enterprise Adoption', source: 'Bitcoin Magazine', url: 'https://bitcoinmagazine.com/multisig-enterprise', publishedAt: '2026-02-13', summary: 'Major corporations adopt multisignature Bitcoin wallets for treasury management.', category: 'Bitcoin', imageUrl: 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=600&h=400&fit=crop' },
{ id: 'n18', title: 'Right to Repair Legislation Passes in 30 US States', source: 'iFixit', url: 'https://ifixit.com/right-to-repair-30', publishedAt: '2026-02-12', summary: 'The right to repair movement achieves a major milestone with widespread legislative support.', category: 'Policy', imageUrl: 'https://images.unsplash.com/photo-1581092160562-40aa08e78837?w=600&h=400&fit=crop' },
{ id: 'n19', title: 'Sovereign Computing Movement Gains Momentum', source: 'Hacker News', url: 'https://news.ycombinator.com/sovereign', publishedAt: '2026-02-11', summary: 'Growing number of individuals running personal servers and self-hosting critical services.', category: 'Technology', imageUrl: 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=600&h=400&fit=crop' },
{ id: 'n20', title: 'Zero-Knowledge Proofs Enable Private Bitcoin Transactions', source: 'CoinDesk', url: 'https://coindesk.com/zkp-bitcoin', publishedAt: '2026-02-10', summary: 'New zero-knowledge proof implementations bring enhanced privacy to Bitcoin transactions.', category: 'Bitcoin', imageUrl: 'https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?w=600&h=400&fit=crop' },
{ id: 'n21', title: 'Decentralized VPN Networks Reach 10 Million Nodes', source: 'TorrentFreak', url: 'https://torrentfreak.com/dvpn-10m', publishedAt: '2026-02-09', summary: 'Decentralized VPN services powered by community nodes reach significant scale.', category: 'Privacy', imageUrl: 'https://images.unsplash.com/photo-1510511459019-5dda7724fd87?w=600&h=400&fit=crop' },
]
export function searchNews(query: string): MockNewsArticle[] {
const q = query.toLowerCase()
return mockNews.filter(
(n) =>
n.title.toLowerCase().includes(q) ||
n.source.toLowerCase().includes(q) ||
n.category.toLowerCase().includes(q) ||
n.summary.toLowerCase().includes(q)
)
}
+58
View File
@@ -0,0 +1,58 @@
export interface MockNostrEvent {
id: string
pubkey: string
kind: number
content: string
created_at: number
tags: string[][]
sig: string
authorName?: string
authorNip05?: string
}
export const mockNostrEvents: MockNostrEvent[] = [
{ id: 'ne1', pubkey: 'npub1abc', kind: 1, content: 'Just set up my first Lightning node. The future of money is here! ⚡', created_at: 1709000000, tags: [['t', 'bitcoin'], ['t', 'lightning']], sig: 'sig1', authorName: 'satoshi_fan', authorNip05: 'satoshi@nostr.com' },
{ id: 'ne2', pubkey: 'npub1def', kind: 1, content: 'Running Nostr relays on a Raspberry Pi. Sovereign infrastructure for the win.', created_at: 1708990000, tags: [['t', 'nostr'], ['t', 'selfhosting']], sig: 'sig2', authorName: 'relay_runner', authorNip05: 'relay@nostr.com' },
{ id: 'ne3', pubkey: 'npub1ghi', kind: 30023, content: '# Why Bitcoin Matters for Freedom\n\nBitcoin is the first technology that enables truly censorship-resistant money...', created_at: 1708980000, tags: [['d', 'bitcoin-freedom'], ['title', 'Why Bitcoin Matters for Freedom']], sig: 'sig3', authorName: 'freedom_writer', authorNip05: 'writer@nostr.com' },
{ id: 'ne4', pubkey: 'npub1jkl', kind: 9735, content: '', created_at: 1708970000, tags: [['bolt11', 'lnbc100n1pjexample'], ['amount', '100000'], ['p', 'npub1abc']], sig: 'sig4', authorName: 'zapper', authorNip05: 'zap@nostr.com' },
{ id: 'ne5', pubkey: 'npub1mno', kind: 1, content: 'Just published my first article on Nostr! No platform can censor my words. #nostr #decentralized', created_at: 1708960000, tags: [['t', 'nostr'], ['t', 'decentralized']], sig: 'sig5', authorName: 'free_speech', authorNip05: 'free@nostr.com' },
{ id: 'ne6', pubkey: 'npub1pqr', kind: 1, content: 'Comparing the Bitcoin and Nostr protocols. Both use keypairs, both are censorship-resistant. The parallels are striking.', created_at: 1708950000, tags: [['t', 'bitcoin'], ['t', 'nostr']], sig: 'sig6', authorName: 'protocol_nerd' },
{ id: 'ne7', pubkey: 'npub1stu', kind: 30023, content: '# Getting Started with NIP-44 Encryption\n\nIn this guide we\'ll explore the new NIP-44 encryption standard...', created_at: 1708940000, tags: [['d', 'nip44-guide'], ['title', 'Getting Started with NIP-44 Encryption']], sig: 'sig7', authorName: 'crypto_teacher' },
{ id: 'ne8', pubkey: 'npub1vwx', kind: 1, content: 'Built a Nostr client that runs entirely in the terminal. Sometimes the simplest tools are the best.', created_at: 1708930000, tags: [['t', 'nostr'], ['t', 'cli']], sig: 'sig8', authorName: 'terminal_hacker' },
{ id: 'ne9', pubkey: 'npub1yz0', kind: 9735, content: '', created_at: 1708920000, tags: [['bolt11', 'lnbc500n1pjexample'], ['amount', '500000'], ['p', 'npub1mno']], sig: 'sig9', authorName: 'big_zapper' },
{ id: 'ne10', pubkey: 'npub1123', kind: 1, content: 'Remember: not your keys, not your coins. Not your keys, not your notes. Sovereignty matters everywhere.', created_at: 1708910000, tags: [['t', 'bitcoin'], ['t', 'nostr'], ['t', 'sovereignty']], sig: 'sig10', authorName: 'key_holder' },
{ id: 'ne11', pubkey: 'npub1456', kind: 1, content: 'Just integrated Cashu payments into my Nostr client. Instant, private payments for everyone!', created_at: 1708900000, tags: [['t', 'cashu'], ['t', 'nostr']], sig: 'sig11', authorName: 'ecash_dev' },
{ id: 'ne12', pubkey: 'npub1789', kind: 30023, content: '# Building Censorship-Resistant Applications\n\nThe architecture of freedom technology requires careful design...', created_at: 1708890000, tags: [['d', 'censorship-resistance'], ['title', 'Building Censorship-Resistant Applications']], sig: 'sig12', authorName: 'arch_freedom' },
{ id: 'ne13', pubkey: 'npub1abc', kind: 1, content: 'Lightning + Nostr + Cashu = the holy trinity of freedom tech. All open source, all interoperable.', created_at: 1708880000, tags: [['t', 'lightning'], ['t', 'nostr'], ['t', 'cashu']], sig: 'sig13', authorName: 'satoshi_fan' },
{ id: 'ne14', pubkey: 'npub1def', kind: 9735, content: '', created_at: 1708870000, tags: [['bolt11', 'lnbc1000n1pjexample'], ['amount', '1000000'], ['p', 'npub1ghi']], sig: 'sig14', authorName: 'relay_runner' },
{ id: 'ne15', pubkey: 'npub1ghi', kind: 1, content: 'New blog post: why I moved all my social media activity to Nostr. No algorithms, no ads, just people.', created_at: 1708860000, tags: [['t', 'nostr'], ['t', 'freedom']], sig: 'sig15', authorName: 'freedom_writer' },
{ id: 'ne16', pubkey: 'npub1jkl', kind: 1, content: 'The beauty of open protocols: anyone can build on them. No API keys, no rate limits, no permission needed.', created_at: 1708850000, tags: [['t', 'openprotocols']], sig: 'sig16', authorName: 'zapper' },
{ id: 'ne17', pubkey: 'npub1mno', kind: 30023, content: '# Nostr Relay Architecture Best Practices\n\nRunning a relay is an act of infrastructure sovereignty...', created_at: 1708840000, tags: [['d', 'relay-architecture'], ['title', 'Nostr Relay Architecture Best Practices']], sig: 'sig17', authorName: 'free_speech' },
{ id: 'ne18', pubkey: 'npub1pqr', kind: 1, content: 'Just discovered you can run a Nostr relay on a $5/month VPS. Decentralization doesn\'t have to be expensive.', created_at: 1708830000, tags: [['t', 'nostr'], ['t', 'selfhosting']], sig: 'sig18', authorName: 'protocol_nerd' },
{ id: 'ne19', pubkey: 'npub1stu', kind: 9735, content: '', created_at: 1708820000, tags: [['bolt11', 'lnbc2100n1pjexample'], ['amount', '2100000'], ['p', 'npub1pqr']], sig: 'sig19', authorName: 'crypto_teacher' },
{ id: 'ne20', pubkey: 'npub1vwx', kind: 1, content: 'Day 365 of posting exclusively on Nostr. Zero regrets. Complete ownership of my digital identity.', created_at: 1708810000, tags: [['t', 'nostr'], ['t', 'sovereignty']], sig: 'sig20', authorName: 'terminal_hacker' },
{ id: 'ne21', pubkey: 'npub1yz0', kind: 1, content: 'The best part about Nostr: your identity is a keypair. No email, no phone number, no government ID needed.', created_at: 1708800000, tags: [['t', 'nostr'], ['t', 'privacy']], sig: 'sig21', authorName: 'big_zapper' },
]
export class MockNostrRelay {
private events: MockNostrEvent[] = [...mockNostrEvents]
getEvents(filter?: { kinds?: number[]; limit?: number; authors?: string[] }): MockNostrEvent[] {
let results = this.events
if (filter?.kinds?.length) {
results = results.filter((e) => filter.kinds!.includes(e.kind))
}
if (filter?.authors?.length) {
results = results.filter((e) => filter.authors!.includes(e.pubkey))
}
if (filter?.limit) {
results = results.slice(0, filter.limit)
}
return results
}
publish(event: MockNostrEvent): boolean {
this.events.unshift(event)
return true
}
}
+36
View File
@@ -0,0 +1,36 @@
import type { Place } from '@aiui/core/types/content'
export const mockPlaces: Place[] = [
{ id: 'p1', name: 'Bitcoin Tower', address: 'Zug, Switzerland', lat: 47.1661, lng: 8.5155, category: 'Landmark', description: 'Heart of Crypto Valley, home to numerous Bitcoin companies.', rating: 4.5, photoUrl: 'https://images.unsplash.com/photo-1527668752968-14dc70a27c95?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=47.1661&mlon=8.5155' }] },
{ id: 'p2', name: 'El Zonte (Bitcoin Beach)', address: 'El Zonte, La Libertad, El Salvador', lat: 13.4967, lng: -89.3894, category: 'Beach', description: 'The birthplace of Bitcoin adoption in El Salvador.', rating: 4.7, photoUrl: 'https://upload.wikimedia.org/wikipedia/commons/8/88/El_Zonte_%2801.2011%29_-_panoramio.jpg', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=13.4967&mlon=-89.3894' }] },
{ id: 'p3', name: 'Shibuya Crossing', address: 'Shibuya, Tokyo, Japan', lat: 35.6595, lng: 139.7004, category: 'Landmark', description: 'The world\'s busiest pedestrian crossing.', rating: 4.6, photoUrl: 'https://images.unsplash.com/photo-1542051841857-5f90071e7989?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=35.6595&mlon=139.7004' }] },
{ id: 'p4', name: 'CERN', address: 'Meyrin, Geneva, Switzerland', lat: 46.2335, lng: 6.0553, category: 'Science', description: 'European Organization for Nuclear Research, birthplace of the World Wide Web.', rating: 4.8, photoUrl: 'https://images.unsplash.com/photo-1581092160607-ee22621dd758?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=46.2335&mlon=6.0553' }] },
{ id: 'p5', name: 'Akihabara', address: 'Akihabara, Tokyo, Japan', lat: 35.6984, lng: 139.7731, category: 'District', description: 'Tokyo\'s electronics and anime district.', rating: 4.4, photoUrl: 'https://images.unsplash.com/photo-1480796927426-f609979314bd?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=35.6984&mlon=139.7731' }] },
{ id: 'p6', name: 'Hacker Dojo', address: 'San Jose, CA, USA', lat: 37.3506, lng: -121.9550, category: 'Hackerspace', description: 'Community space for hackers and makers in Silicon Valley.', rating: 4.3, photoUrl: 'https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=37.3506&mlon=-121.9550' }] },
{ id: 'p7', name: 'Machu Picchu', address: 'Cusco Region, Peru', lat: -13.1631, lng: -72.5450, category: 'Archaeological', description: '15th-century Inca citadel set high in the Andes Mountains.', rating: 4.9, photoUrl: 'https://images.unsplash.com/photo-1587595431973-160d0d94add1?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=-13.1631&mlon=-72.5450' }] },
{ id: 'p8', name: 'Reykjavik', address: 'Reykjavik, Iceland', lat: 64.1466, lng: -21.9426, category: 'City', description: 'World\'s northernmost capital, known for geothermal energy and bitcoin mining.', rating: 4.6, photoUrl: 'https://images.unsplash.com/photo-1504829857797-ddff29c27927?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=64.1466&mlon=-21.9426' }] },
{ id: 'p9', name: 'MIT Media Lab', address: 'Cambridge, MA, USA', lat: 42.3601, lng: -71.0879, category: 'Research', description: 'Research laboratory at MIT known for unconventional technology research.', rating: 4.7, photoUrl: 'https://images.unsplash.com/photo-1564981797816-1043664bf78d?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=42.3601&mlon=-71.0879' }] },
{ id: 'p10', name: 'Svalbard Global Seed Vault', address: 'Longyearbyen, Svalbard, Norway', lat: 78.2355, lng: 15.4942, category: 'Science', description: 'Secure seed bank storing duplicates of seeds from crop collections worldwide.', rating: 4.8, photoUrl: 'https://images.unsplash.com/photo-1530122037265-a5f1f91d3b99?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=78.2355&mlon=15.4942' }] },
{ id: 'p11', name: 'Room 77', address: 'Graefestraße, Berlin, Germany', lat: 52.4912, lng: 13.4188, category: 'Restaurant', description: 'One of the first bars in the world to accept Bitcoin (now closed, historic).', rating: 4.2, photoUrl: 'https://images.unsplash.com/photo-1560840067-ddcaeb7831d2?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=52.4912&mlon=13.4188' }] },
{ id: 'p12', name: 'Antigua Bitcoin Beach', address: 'Antigua, Guatemala', lat: 14.5586, lng: -90.7295, category: 'Town', description: 'Growing Bitcoin circular economy in historic colonial town.', rating: 4.5, photoUrl: 'https://images.unsplash.com/photo-1604961666760-81e04cc67d47?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=14.5586&mlon=-90.7295' }] },
{ id: 'p13', name: 'Bletchley Park', address: 'Milton Keynes, UK', lat: 51.9977, lng: -0.7417, category: 'Museum', description: 'Historic site of WWII codebreaking, where Turing and team cracked Enigma.', rating: 4.7, photoUrl: 'https://upload.wikimedia.org/wikipedia/commons/4/43/Bletchley_Park_Mansion.jpg', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=51.9977&mlon=-0.7417' }] },
{ id: 'p14', name: 'La Sagrada Familia', address: 'Barcelona, Spain', lat: 41.4036, lng: 2.1744, category: 'Architecture', description: 'Antoni Gaudí\'s unfinished masterpiece basilica.', rating: 4.8, photoUrl: 'https://images.unsplash.com/photo-1583779457711-ab081e71d8ee?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=41.4036&mlon=2.1744' }] },
{ id: 'p15', name: 'The Internet Archive', address: 'San Francisco, CA, USA', lat: 37.7823, lng: -122.4714, category: 'Library', description: 'Non-profit digital library offering free access to archived web pages and media.', rating: 4.6, photoUrl: 'https://images.unsplash.com/photo-1521587760476-6c12a4b040da?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=37.7823&mlon=-122.4714' }] },
{ id: 'p16', name: 'Madeira Bitcoin Island', address: 'Funchal, Madeira, Portugal', lat: 32.6669, lng: -16.9241, category: 'Island', description: 'Portuguese island adopting Bitcoin as part of its economic strategy.', rating: 4.4, photoUrl: 'https://images.unsplash.com/photo-1555881400-74d7acaacd8b?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=32.6669&mlon=-16.9241' }] },
{ id: 'p17', name: 'Kowloon Walled City Park', address: 'Kowloon, Hong Kong', lat: 22.3315, lng: 114.1889, category: 'Park', description: 'Memorial park on the site of the former Kowloon Walled City.', rating: 4.3, photoUrl: 'https://images.unsplash.com/photo-1536599018102-9f803c140fc1?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=22.3315&mlon=114.1889' }] },
{ id: 'p18', name: 'Bitcoin Lake', address: 'Panajachel, Guatemala', lat: 14.7403, lng: -91.1594, category: 'Lake', description: 'Lake Atitlán community promoting Bitcoin circular economy.', rating: 4.5, photoUrl: 'https://images.unsplash.com/photo-1501785888041-af3ef285b470?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=14.7403&mlon=-91.1594' }] },
{ id: 'p19', name: 'Taipei 101', address: 'Xinyi District, Taipei, Taiwan', lat: 25.0340, lng: 121.5645, category: 'Skyscraper', description: 'Former world\'s tallest building, now a tech hub landmark.', rating: 4.7, photoUrl: 'https://images.unsplash.com/photo-1508269099219-5ed600647a49?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=25.0340&mlon=121.5645' }] },
{ id: 'p20', name: 'Chiang Mai Old City', address: 'Chiang Mai, Thailand', lat: 18.7883, lng: 98.9853, category: 'District', description: 'Popular digital nomad hub with growing Bitcoin acceptance.', rating: 4.6, photoUrl: 'https://images.unsplash.com/photo-1512553983966-3e77e4713e00?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=18.7883&mlon=98.9853' }] },
{ id: 'p21', name: 'Nostr Café', address: 'Prague, Czech Republic', lat: 50.0755, lng: 14.4378, category: 'Café', description: 'Crypto-friendly café in the heart of Prague\'s bitcoin community.', rating: 4.4, photoUrl: 'https://images.unsplash.com/photo-1554118811-1e0d58224f24?w=600&h=400&fit=crop', sources: [{ type: 'osm', name: 'OpenStreetMap', url: 'https://www.openstreetmap.org/?mlat=50.0755&mlon=14.4378' }] },
]
export function searchPlaces(query: string): Place[] {
const q = query.toLowerCase()
return mockPlaces.filter(
(p) =>
p.name.toLowerCase().includes(q) ||
(p.address ?? '').toLowerCase().includes(q) ||
(p.category ?? '').toLowerCase().includes(q) ||
(p.description?.toLowerCase().includes(q) ?? false)
)
}
+123
View File
@@ -0,0 +1,123 @@
import type { Podcast } from '@aiui/core/types/content'
export const mockPodcasts: Podcast[] = [
{
id: 'p1',
title: 'What Bitcoin Did',
host: 'Peter McCormack',
description: 'Interview-based podcast exploring Bitcoin, freedom, and the future of money.',
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/fb/ff/bb/fbffbba3-1a5b-0759-fa35-cafc42f214c9/mza_4444412895211887709.jpg/600x600bb.jpg',
year: 2018,
episodeCount: 400,
genres: ['Bitcoin', 'Finance', 'Tech'],
sources: [
{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/whatbitcoindid', icon: '⚡' },
{ type: 'podcastindex', name: 'Podcast Index', url: 'https://podcastindex.org/podcast/123456', icon: '📻' },
{ type: 'youtube', name: 'YouTube', url: 'https://youtube.com/@WhatBitcoinDid', icon: '▶️' },
{ type: 'rss', name: 'RSS', url: 'https://www.whatbitcoindid.com/podcast?format=rss', icon: '📡' },
],
},
{
id: 'p2',
title: 'The Audacity to Podcast',
host: 'Daniel J. Lewis',
description: 'Podcasting tips, strategies, and news. Podcasting 2.0 focused.',
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts123/v4/7a/b6/84/7ab6843a-3f8a-f3b6-772e-74904aeb1fa1/mza_5013277301801181914.png/600x600bb.jpg',
year: 2010,
episodeCount: 500,
genres: ['Podcasting', 'Tech', 'How-To'],
sources: [
{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/1I7TKhOPXJz9MDhG5gqh', icon: '⚡' },
{ type: 'youtube', name: 'YouTube', url: 'https://youtube.com/@audacitytopodcast', icon: '▶️' },
{ type: 'castopod', name: 'Castopod', url: 'https://castopod.example/audacity', icon: '🦣' },
],
},
{
id: 'p3',
title: 'Tales from the Crypt',
host: 'Marty Bent',
description: 'Bitcoin, Austrian economics, and the importance of sound money.',
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/84/cd/73/84cd73e4-eddb-d7f6-a777-875efb65b924/mza_15569173368189135395.jpg/600x600bb.jpg',
year: 2017,
episodeCount: 300,
genres: ['Bitcoin', 'Economics', 'Finance'],
sources: [
{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/talesfromthecrypt', icon: '⚡' },
{ type: 'odysee', name: 'Odysee', url: 'https://odysee.com/@tftc', icon: '🔗' },
{ type: 'rumble', name: 'Rumble', url: 'https://rumble.com/c/tftc', icon: '📺' },
{ type: 'youtube', name: 'YouTube', url: 'https://youtube.com/@TalesFromTheCrypt', icon: '▶️' },
],
},
{
id: 'p4',
title: 'Stephan Livera Podcast',
host: 'Stephan Livera',
description: 'Bitcoin, Lightning Network, and sovereign individual topics.',
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts113/v4/ed/fb/80/edfb8088-08fb-adfc-3a0e-89a216d0cb0a/mza_546663195369372323.jpg/600x600bb.jpg',
year: 2018,
episodeCount: 450,
genres: ['Bitcoin', 'Lightning', 'Tech'],
sources: [
{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/stephanlivera', icon: '⚡' },
{ type: 'podcastindex', name: 'Podcast Index', url: 'https://podcastindex.org/podcast/789012', icon: '📻' },
{ type: 'podverse', name: 'Podverse', url: 'https://podverse.fm/podcast/stephan-livera', icon: '🎧' },
{ type: 'rss', name: 'RSS', url: 'https://stephanlivera.com/feed/', icon: '📡' },
],
},
{
id: 'p5',
title: 'Hell Money',
host: 'Brittany Kaiser & Patrick Wood',
description: 'Investigative podcast on financial crime, surveillance, and control systems.',
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts112/v4/dd/00/4a/dd004ad9-a2b5-d905-59f9-761309118e47/mza_8872129051801444337.jpg/600x600bb.jpg',
year: 2022,
episodeCount: 80,
genres: ['True Crime', 'Finance', 'Investigative'],
sources: [
{ type: 'rumble', name: 'Rumble', url: 'https://rumble.com/c/hellmoney', icon: '📺' },
{ type: 'youtube', name: 'YouTube', url: 'https://youtube.com/@HellMoney', icon: '▶️' },
{ type: 'odysee', name: 'Odysee', url: 'https://odysee.com/@HellMoney', icon: '🔗' },
],
},
{
id: 'p6',
title: 'Cypherpunk Bitstream',
host: 'Brandon Zemp',
description: 'Decentralization, privacy tech, and cypherpunk philosophy.',
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts125/v4/82/70/44/827044a2-cabb-f681-00e7-64d2e02fff13/mza_18243182780759307932.jpg/600x600bb.jpg',
year: 2020,
episodeCount: 120,
genres: ['Privacy', 'Bitcoin', 'Decentralization'],
sources: [
{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/cypherpunkbitstream', icon: '⚡' },
{ type: 'castopod', name: 'Castopod', url: 'https://castopod.example/cypherpunk', icon: '🦣' },
{ type: 'ipfs', name: 'IPFS', url: 'ipfs://QmCypherpunkBitstream...', icon: '🌐' },
{ type: 'rss', name: 'RSS', url: 'https://cypherpunkbitstream.com/feed', icon: '📡' },
],
},
{ id: 'p7', title: 'Bitcoin Audible', host: 'Guy Swann', description: 'Reading the best in Bitcoin content, one article at a time.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts126/v4/a8/1c/b2/a81cb23a-7aa5-c123-60a1-9e5d0335496b/mza_12623622548899082019.jpg/600x600bb.jpg', year: 2017, episodeCount: 600, genres: ['Bitcoin', 'Education'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/bitcoinaudible', icon: '⚡' }] },
{ id: 'p8', title: 'The Bitcoin Standard Podcast', host: 'Saifedean Ammous', description: 'Economics, sound money, and the case for Bitcoin.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/fc/a5/38/fca5380d-362d-d44c-04f5-df14044e88ac/mza_4951446082004808256.jpg/600x600bb.jpg', year: 2019, episodeCount: 200, genres: ['Bitcoin', 'Economics'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/tbs', icon: '⚡' }] },
{ id: 'p9', title: 'Bitcoin Explained', host: 'Aaron van Wirdum & Sjors Provoost', description: 'Technical explanations of Bitcoin protocol developments.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts116/v4/1a/7b/d2/1a7bd297-e8c8-bf51-860e-fd36a788242a/mza_14220953861479257188.jpg/600x600bb.jpg', year: 2020, episodeCount: 150, genres: ['Bitcoin', 'Technology'], sources: [{ type: 'rss', name: 'RSS', url: 'https://bitcoinexplained.com/feed', icon: '📡' }] },
{ id: 'p10', title: 'Nostr Talks', host: 'The Nostr Community', description: 'Discussions about the Nostr protocol, clients, and ecosystem.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/aa/3e/7b/aa3e7b40-7546-aa17-9695-6cdc506cdc10/mza_15889741860915228164.jpeg/600x600bb.jpg', year: 2023, episodeCount: 60, genres: ['Nostr', 'Decentralization', 'Tech'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/nostrtalks', icon: '⚡' }] },
{ id: 'p11', title: 'Lex Fridman Podcast', host: 'Lex Fridman', description: 'Conversations about the nature of intelligence, consciousness, love, and power.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts115/v4/3e/e3/9c/3ee39c89-de08-47a6-7f3d-3849cef6d255/mza_16657851278549137484.png/600x600bb.jpg', year: 2018, episodeCount: 420, genres: ['Science', 'Technology', 'Philosophy'], sources: [{ type: 'youtube', name: 'YouTube', url: 'https://youtube.com/@lexfridman', icon: '▶️' }] },
{ id: 'p12', title: 'Darknet Diaries', host: 'Jack Rhysider', description: 'True stories from the dark side of the Internet.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts122/v4/3a/80/a7/3a80a7db-5620-f77b-9935-016e61cc2fbc/mza_9399859904175514567.jpg/600x600bb.jpg', year: 2017, episodeCount: 160, genres: ['Cybersecurity', 'True Crime', 'Technology'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/darknetdiaries', icon: '⚡' }] },
{ id: 'p13', title: 'The Investors Podcast', host: 'Preston Pysh & Stig Brodersen', description: 'Value investing, Bitcoin, and financial analysis.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/e5/1d/ec/e51decd3-c299-33d3-15dc-cbf732db40ba/mza_7000864012270734067.jpg/600x600bb.jpg', year: 2014, episodeCount: 700, genres: ['Bitcoin', 'Investing', 'Finance'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/tip', icon: '⚡' }] },
{ id: 'p14', title: 'Rabbit Hole Recap', host: 'Matt Odell & Marty Bent', description: 'Weekly Bitcoin news and analysis.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/f2/e2/17/f2e2177f-46df-8eba-a909-485d182cbde2/mza_8161838611335848412.jpg/600x600bb.jpg', year: 2019, episodeCount: 250, genres: ['Bitcoin', 'News'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/rhr', icon: '⚡' }] },
{ id: 'p15', title: 'Citadel Dispatch', host: 'Matt Odell', description: 'Interactive Bitcoin discussion with audience participation.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/01/bc/59/01bc59a8-83df-55dc-3f7e-b03ad6180d21/mza_16016917205334564904.jpeg/600x600bb.jpg', year: 2021, episodeCount: 130, genres: ['Bitcoin', 'Privacy', 'Open Source'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/citadeldispatch', icon: '⚡' }, { type: 'youtube', name: 'YouTube', url: 'https://youtube.com/@citadeldispatch', icon: '▶️' }] },
{ id: 'p16', title: 'Hardcore History', host: 'Dan Carlin', description: 'Deep dives into the hardest core history topics.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts115/v4/49/b7/eb/49b7eb32-8f08-6fac-aadb-2f002131fe5f/mza_15196161972010256532.jpg/600x600bb.jpg', year: 2006, episodeCount: 70, genres: ['History', 'Education'], sources: [{ type: 'rss', name: 'RSS', url: 'https://dchhaddendum.libsyn.com/rss', icon: '📡' }] },
{ id: 'p17', title: 'The Changelog', host: 'Adam Stacoviak & Jerod Santo', description: 'Conversations with the hackers, leaders, and innovators of open source.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts123/v4/b5/b1/43/b5b14333-7cbe-123d-c444-0204e5d08102/mza_311421542997449775.png/600x600bb.jpg', year: 2009, episodeCount: 600, genres: ['Open Source', 'Technology', 'Programming'], sources: [{ type: 'rss', name: 'RSS', url: 'https://changelog.com/podcast/feed', icon: '📡' }] },
{ id: 'p18', title: 'Once BITten!', host: 'Daniel Prince', description: 'Bitcoin, philosophy, and the orange pill journey.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/a8/2f/36/a82f3675-c69d-b076-9fbe-eb6e7d69c5a8/mza_2824796342334185417.jpg/600x600bb.jpg', year: 2019, episodeCount: 350, genres: ['Bitcoin', 'Philosophy'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/oncebitten', icon: '⚡' }] },
{ id: 'p19', title: 'Bitcoin Fundamentals', host: 'Preston Pysh', description: 'Understanding Bitcoin from first principles.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts211/v4/e5/1d/ec/e51decd3-c299-33d3-15dc-cbf732db40ba/mza_7000864012270734067.jpg/600x600bb.jpg', year: 2020, episodeCount: 180, genres: ['Bitcoin', 'Education', 'Finance'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/btcfundamentals', icon: '⚡' }] },
{ id: 'p20', title: 'Opt Out Podcast', host: 'Seth For Privacy', description: 'Privacy tools, techniques, and philosophy for everyone.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/92/9a/27/929a27d3-bc84-fad6-052e-8e112e3e439d/mza_947152063232700697.jpg/600x600bb.jpg', year: 2021, episodeCount: 90, genres: ['Privacy', 'Technology', 'Security'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/optout', icon: '⚡' }, { type: 'rss', name: 'RSS', url: 'https://optoutpod.com/feed', icon: '📡' }] },
{ id: 'p21', title: 'Bitcoin Review', host: 'NVK & community', description: 'Technical Bitcoin development review and discussion.', coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/9d/d9/60/9dd96097-725b-be30-4541-90f2e85c6f55/mza_11769037187183507672.jpg/600x600bb.jpg', year: 2022, episodeCount: 75, genres: ['Bitcoin', 'Development', 'Open Source'], sources: [{ type: 'fountain', name: 'Fountain', url: 'https://fountain.fm/show/bitcoinreview', icon: '⚡' }] },
]
export function searchPodcasts(query: string): Podcast[] {
const q = query.toLowerCase()
return mockPodcasts.filter(
(p) =>
p.title.toLowerCase().includes(q) ||
(p.host ?? '').toLowerCase().includes(q) ||
(p.genres ?? []).some((g: string) => g.toLowerCase().includes(q))
)
}
+118
View File
@@ -0,0 +1,118 @@
import type { Song } from '@aiui/core/types/content'
export const mockSongs: Song[] = [
{
id: 's1',
title: 'Never Meant',
artist: 'American Football',
album: 'American Football',
year: 1999,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music122/v4/17/90/19/179019ea-4eaf-b2e5-ca19-68cdbb795032/644110027696.png/600x600bb.jpg',
duration: 269,
genres: ['Math Rock', 'Emo', 'Indie'],
sources: [
{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example', icon: 'spotify' },
{ type: 'youtube', name: 'YouTube', url: 'https://youtube.com/watch?v=example', icon: 'youtube' },
],
},
{
id: 's2',
title: 'The Kill',
artist: 'Toe',
album: 'The Book About My Idle Plot on a Vague Anxiety',
year: 2005,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/5f/d9/63/5fd96387-45fa-6b94-afd8-7b2c4a24a93b/11UMGIM38959.rgb.jpg/600x600bb.jpg',
duration: 248,
genres: ['Math Rock', 'Post-Rock'],
sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example2', icon: 'spotify' }],
},
{
id: 's3',
title: 'Caraphernelia',
artist: 'Pierce the Veil',
album: 'Selfish Machines',
year: 2010,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music114/v4/b6/02/3c/b6023c10-8d56-071d-6acc-a778a8550479/886443323360.jpg/600x600bb.jpg',
duration: 234,
genres: ['Post-Hardcore', 'Math Rock'],
sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example3', icon: 'spotify' }],
},
{
id: 's4',
title: 'Ghosts',
artist: 'Clever Girl',
album: 'No Drum and Bass in the Jazz Room',
year: 2016,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music114/v4/88/0a/47/880a475a-3878-d3d9-8e72-498085aeedd4/cover.jpg/600x600bb.jpg',
duration: 312,
genres: ['Math Rock', 'Instrumental'],
sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example4', icon: 'spotify' }],
},
{
id: 's5',
title: 'pon ponpon',
artist: 'TTNG',
album: 'Animals',
year: 2008,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/4e/c6/80/4ec680c3-78b5-7888-b9bf-9f662c039021/113992.jpg/600x600bb.jpg',
duration: 198,
genres: ['Math Rock', 'Indie'],
sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example5', icon: 'spotify' }],
},
{
id: 's6',
title: 'Kié la, tricotées',
artist: 'Battles',
album: 'Mirrored',
year: 2007,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/00/93/01/009301a8-ee08-50a9-25d4-f31e6e8d4a10/mzi.jfnvclpy.jpg/600x600bb.jpg',
duration: 427,
genres: ['Math Rock', 'Experimental'],
sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example6', icon: 'spotify' }],
},
{
id: 's7',
title: 'Delivering the Groceries at 138 Beats Per Minute',
artist: 'Don Caballero',
album: 'American Don',
year: 2000,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music20/v4/4d/76/68/4d766801-c391-450d-521b-8a80d829c7f6/cover.jpg/600x600bb.jpg',
duration: 334,
genres: ['Math Rock', 'Instrumental'],
sources: [{ type: 'bandcamp', name: 'Bandcamp', url: 'https://doncaballero.bandcamp.com', icon: 'bandcamp' }],
},
{
id: 's8',
title: 'Frozen Zoo',
artist: 'Tera Melos',
album: 'Untitled',
year: 2005,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/bf/af/37/bfaf3751-e991-b205-82ad-524a74136d74/114135.jpg/600x600bb.jpg',
duration: 189,
genres: ['Math Rock', 'Noise Rock'],
sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example8', icon: 'spotify' }],
},
{
id: 's9',
title: 'Solid Ground',
artist: 'Maps & Atlases',
album: 'Trees, Swallows, Houses',
year: 2006,
coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music4/v4/2c/4d/a7/2c4da769-6d8c-c498-10d3-264aa0ae1757/885686094808.jpg/600x600bb.jpg',
duration: 256,
genres: ['Math Rock', 'Indie'],
sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example9', icon: 'spotify' }],
},
{ id: 's10', title: 'Atlas', artist: 'Polyphia', album: 'Muse', year: 2014, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/10/ca/85/10ca8598-27aa-23d5-286d-2694e25e1d57/859738995726_cover.jpg/600x600bb.jpg', duration: 245, genres: ['Math Rock', 'Progressive'], sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example10', icon: 'spotify' }] },
{ id: 's11', title: 'G.O.A.T.', artist: 'Polyphia', album: 'New Levels New Devils', year: 2018, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/57/5c/00/575c009a-6d69-6ac4-7c91-7e307d920279/794558040969.jpg/600x600bb.jpg', duration: 203, genres: ['Math Rock', 'Progressive'], sources: [{ type: 'youtube', name: 'YouTube', url: 'https://youtube.com/watch?v=goat', icon: 'youtube' }] },
{ id: 's12', title: 'Electric Sunrise', artist: 'Plini', album: 'Handmade Cities', year: 2016, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/f5/0f/6b/f50f6bb3-2e91-d365-df84-49078b627590/11689.jpg/600x600bb.jpg', duration: 284, genres: ['Progressive', 'Instrumental'], sources: [{ type: 'bandcamp', name: 'Bandcamp', url: 'https://plini.bandcamp.com', icon: 'bandcamp' }] },
{ id: 's13', title: 'The Number of the Beast', artist: 'Iron Maiden', album: 'The Number of the Beast', year: 1982, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/b4/37/6c/b4376c0d-5647-dfb0-d7f1-d18b73e0f9c5/4050538293227.jpg/600x600bb.jpg', duration: 289, genres: ['Heavy Metal', 'NWOBHM'], sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example13', icon: 'spotify' }] },
{ id: 's14', title: 'Value 4 Value', artist: 'Ainsley Costello', album: 'Lightning Sessions', year: 2023, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music116/v4/d5/68/47/d56847ce-fe3f-7903-0373-de3e4aeebab0/195729402522_cover.jpg/600x600bb.jpg', duration: 195, genres: ['Folk', 'Bitcoin'], sources: [{ type: 'wavlake', name: 'Wavlake', url: 'https://wavlake.com/track/v4v', icon: 'wavlake' }] },
{ id: 's15', title: 'Bitcoin Thunder', artist: 'Mandrik', album: 'Orange Pill', year: 2022, coverUrl: undefined, duration: 178, genres: ['Electronic', 'Bitcoin'], sources: [{ type: 'wavlake', name: 'Wavlake', url: 'https://wavlake.com/track/thunder', icon: 'wavlake' }] },
{ id: 's16', title: 'Lateralus', artist: 'Tool', album: 'Lateralus', year: 2001, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music113/v4/fb/99/8c/fb998c1e-1a11-2434-0fa7-0d90beba5d2b/886447824764.jpg/600x600bb.jpg', duration: 563, genres: ['Progressive Metal', 'Art Rock'], sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example16', icon: 'spotify' }] },
{ id: 's17', title: 'Teardrop', artist: 'Massive Attack', album: 'Mezzanine', year: 1998, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/0a/98/55/0a98555b-8d9d-3b46-660a-b91261557d17/00724384559953.rgb.jpg/600x600bb.jpg', duration: 323, genres: ['Trip Hop', 'Electronic'], sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example17', icon: 'spotify' }] },
{ id: 's18', title: 'Windowlicker', artist: 'Aphex Twin', album: 'Windowlicker EP', year: 1999, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/81/20/73/812073f2-c437-fd1d-636d-6be5a4432747/0801061910532.png/600x600bb.jpg', duration: 371, genres: ['IDM', 'Electronic'], sources: [{ type: 'bandcamp', name: 'Bandcamp', url: 'https://aphextwin.bandcamp.com', icon: 'bandcamp' }] },
{ id: 's19', title: 'Schism', artist: 'Tool', album: 'Lateralus', year: 2001, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music113/v4/fb/99/8c/fb998c1e-1a11-2434-0fa7-0d90beba5d2b/886447824764.jpg/600x600bb.jpg', duration: 399, genres: ['Progressive Metal'], sources: [{ type: 'spotify', name: 'Spotify', url: 'https://open.spotify.com/track/example19', icon: 'spotify' }] },
{ id: 's20', title: 'Flim', artist: 'Aphex Twin', album: 'Come to Daddy EP', year: 1997, coverUrl: 'https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/bf/0b/a5/bf0ba54c-1c9b-d812-2ccf-54d137dc81ae/ticket.qknfmwov.png/600x600bb.jpg', duration: 170, genres: ['IDM', 'Ambient'], sources: [{ type: 'bandcamp', name: 'Bandcamp', url: 'https://aphextwin.bandcamp.com', icon: 'bandcamp' }] },
{ id: 's21', title: 'Bitcoin is Dead', artist: 'HODL Band', album: 'Stack Sats', year: 2024, coverUrl: undefined, duration: 212, genres: ['Rock', 'Bitcoin'], sources: [{ type: 'wavlake', name: 'Wavlake', url: 'https://wavlake.com/track/dead', icon: 'wavlake' }] },
]
+61
View File
@@ -0,0 +1,61 @@
export interface TMDBSearchResult {
id: number
title: string
overview: string
poster_path: string | null
backdrop_path: string | null
release_date: string
vote_average: number
genre_ids: number[]
}
export interface TMDBSearchResponse {
page: number
results: TMDBSearchResult[]
total_pages: number
total_results: number
}
export const mockTMDBGenres: Record<number, string> = {
28: 'Action', 12: 'Adventure', 16: 'Animation', 35: 'Comedy', 80: 'Crime',
99: 'Documentary', 18: 'Drama', 10751: 'Family', 14: 'Fantasy', 36: 'History',
27: 'Horror', 10402: 'Music', 9648: 'Mystery', 10749: 'Romance', 878: 'Sci-Fi',
53: 'Thriller', 10752: 'War', 37: 'Western',
}
export const mockTMDBSearchResponses: Record<string, TMDBSearchResponse> = {
'blade runner': {
page: 1,
total_pages: 1,
total_results: 2,
results: [
{ id: 335984, title: 'Blade Runner 2049', overview: 'A young blade runner discovers a long-buried secret...', poster_path: '/gajva2L0rPYkEWjzgFlBXCAVBE5.jpg', backdrop_path: '/sAtoMqDVhNDQBc3QJL3RF6hlhGq.jpg', release_date: '2017-10-04', vote_average: 7.5, genre_ids: [878, 18, 53] },
{ id: 78, title: 'Blade Runner', overview: 'In the smog-choked dystopian Los Angeles of 2019...', poster_path: '/63N9uy8nd9j7Eog2axPQ8lbr3Wj.jpg', backdrop_path: '/sXNGrxZRsqmyVv9CnUX2NZQzwSg.jpg', release_date: '1982-06-25', vote_average: 7.9, genre_ids: [878, 18, 53] },
],
},
'dune': {
page: 1,
total_pages: 1,
total_results: 2,
results: [
{ id: 438631, title: 'Dune', overview: 'Paul Atreides, a brilliant and gifted young man...', poster_path: '/d5NXSklXo0qyIYkgV94XAgMIckC.jpg', backdrop_path: '/jYEW5xZkZk2WTrdbMGAPFuBqbDc.jpg', release_date: '2021-09-15', vote_average: 7.8, genre_ids: [878, 12, 18] },
{ id: 693134, title: 'Dune: Part Two', overview: 'Paul Atreides unites with Chani and the Fremen...', poster_path: '/8b8R8l88Qje9dn9OE8PY05Nxl1X.jpg', backdrop_path: '/xOMo8BRK7PfcJv9JCnx7s5hj0PX.jpg', release_date: '2024-02-27', vote_average: 8.3, genre_ids: [878, 12, 18] },
],
},
'interstellar': {
page: 1,
total_pages: 1,
total_results: 1,
results: [
{ id: 157336, title: 'Interstellar', overview: 'A team of explorers travel through a wormhole...', poster_path: '/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg', backdrop_path: '/xJHokMbljvjADYdit5fK1DDtAoB.jpg', release_date: '2014-11-05', vote_average: 8.6, genre_ids: [878, 12, 18] },
],
},
}
export function mockTMDBSearch(query: string): TMDBSearchResponse {
const key = query.toLowerCase()
for (const [term, response] of Object.entries(mockTMDBSearchResponses)) {
if (key.includes(term)) return response
}
return { page: 1, results: [], total_pages: 0, total_results: 0 }
}
+35
View File
@@ -0,0 +1,35 @@
import type { TVSeries } from '@aiui/core/types/content'
export const mockTVShows: TVSeries[] = [
{ id: 'tv1', title: 'Mr. Robot', year: 2015, posterUrl: 'https://image.tmdb.org/t/p/w342/oKIBhzZzDX07SoE2bOLhq2EE8rf.jpg', synopsis: 'Follows a young computer programmer who joins an underground hacker group aiming to destroy all debt records.', genres: ['Drama', 'Thriller', 'Crime'], rating: 8.5, seasons: 4, status: 'ended', network: 'USA Network', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/mr-robot', quality: '1080p', icon: 'plex' }] },
{ id: 'tv2', title: 'Black Mirror', year: 2011, posterUrl: 'https://image.tmdb.org/t/p/w342/5UaYsGZOFhjFDwQh6GuLjjA1WlF.jpg', synopsis: 'An anthology series exploring a twisted, high-tech multiverse where humanity\'s greatest innovations collide with its darkest instincts.', genres: ['Sci-Fi', 'Drama', 'Thriller'], rating: 8.1, seasons: 6, status: 'ongoing', network: 'Netflix', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/black-mirror', quality: '4K', icon: 'plex' }] },
{ id: 'tv3', title: 'Severance', year: 2022, posterUrl: 'https://image.tmdb.org/t/p/w342/lFf6LLrQjYFOI3cXMfrGQ2gylPF.jpg', synopsis: 'Mark leads a team at Lumon Industries whose employees have undergone a severance procedure dividing their memories between work and personal lives.', genres: ['Sci-Fi', 'Drama', 'Mystery'], rating: 8.7, seasons: 2, status: 'ongoing', network: 'Apple TV+', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/severance', quality: '4K HDR', icon: 'plex' }] },
{ id: 'tv4', title: 'Breaking Bad', year: 2008, posterUrl: 'https://image.tmdb.org/t/p/w342/ggFHVNu6YYI5L9pCfOacjizRGt.jpg', synopsis: 'A high school chemistry teacher turned methamphetamine manufacturer partners with a former student.', genres: ['Drama', 'Crime', 'Thriller'], rating: 9.5, seasons: 5, status: 'ended', network: 'AMC', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/breaking-bad', quality: '4K', icon: 'plex' }] },
{ id: 'tv5', title: 'The Expanse', year: 2015, posterUrl: 'https://image.tmdb.org/t/p/w342/go2RyYkh2gTRp2EL7sYDWTK1ioi.jpg', synopsis: 'In the 24th century, a group of humans untangle a vast conspiracy that threatens the Solar System\'s fragile state of cold war.', genres: ['Sci-Fi', 'Drama'], rating: 8.5, seasons: 6, status: 'ended', network: 'Amazon', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/the-expanse', quality: '4K HDR', icon: 'plex' }] },
{ id: 'tv6', title: 'Westworld', year: 2016, posterUrl: 'https://image.tmdb.org/t/p/w342/y55oBgC98yJT0aejxbJMzTUlHlh.jpg', synopsis: 'Set at the intersection of the near future and a reimagined past, explore a world in which every human appetite can be indulged.', genres: ['Sci-Fi', 'Drama', 'Mystery'], rating: 8.0, seasons: 4, status: 'ended', network: 'HBO', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/westworld', quality: '4K HDR', icon: 'plex' }] },
{ id: 'tv7', title: 'True Detective', year: 2014, posterUrl: 'https://image.tmdb.org/t/p/w342/aowr4xpLP5sRCL50TkuADomJ20T.jpg', synopsis: 'Seasonal anthology series about police investigations uncovering the personal and professional secrets of those involved.', genres: ['Drama', 'Crime', 'Mystery'], rating: 8.3, seasons: 4, status: 'ongoing', network: 'HBO', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/true-detective', quality: '4K', icon: 'plex' }] },
{ id: 'tv8', title: 'Altered Carbon', year: 2018, posterUrl: 'https://image.tmdb.org/t/p/w342/95IhdCkqp0MI9pGemJMFi3bEqbV.jpg', synopsis: 'Set in a future where consciousness is digitized and stored, a prisoner returns to life in a new body to solve a murder.', genres: ['Sci-Fi', 'Action', 'Drama'], rating: 7.8, seasons: 2, status: 'ended', network: 'Netflix', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/altered-carbon', quality: '4K HDR', icon: 'plex' }] },
{ id: 'tv9', title: 'Chernobyl', year: 2019, posterUrl: 'https://image.tmdb.org/t/p/w342/hlLXt2tOPT6RRnjiUmoxyG1LTFi.jpg', synopsis: 'In April 1986, the city of Chernobyl in the Soviet Union suffers one of the worst nuclear disasters in history.', genres: ['Drama', 'History'], rating: 9.4, seasons: 1, status: 'ended', network: 'HBO', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/chernobyl', quality: '1080p', icon: 'plex' }] },
{ id: 'tv10', title: 'The Wire', year: 2002, posterUrl: 'https://image.tmdb.org/t/p/w342/4lbclFySvugI51fwsyxBTOm4DqK.jpg', synopsis: 'The Baltimore drug scene, as seen through the eyes of drug dealers and law enforcement.', genres: ['Drama', 'Crime'], rating: 9.3, seasons: 5, status: 'ended', network: 'HBO', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/the-wire', quality: '1080p', icon: 'plex' }] },
{ id: 'tv11', title: 'Dark', year: 2017, posterUrl: 'https://image.tmdb.org/t/p/w342/apbrbWs8M9lyOpJYU5WXrpFbk1Z.jpg', synopsis: 'A family saga with a supernatural twist in a German town where the disappearance of children exposes dark secrets.', genres: ['Sci-Fi', 'Drama', 'Mystery'], rating: 8.8, seasons: 3, status: 'ended', network: 'Netflix', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/dark', quality: '4K', icon: 'plex' }] },
{ id: 'tv12', title: 'Silicon Valley', year: 2014, posterUrl: 'https://image.tmdb.org/t/p/w342/dc5r71XI1gD4YwIyoEREagVo0lp.jpg', synopsis: 'Follows the misadventures of introverted programmer Richard and his fellow geeks trying to succeed in Silicon Valley.', genres: ['Comedy'], rating: 8.5, seasons: 6, status: 'ended', network: 'HBO', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/silicon-valley', quality: '1080p', icon: 'plex' }] },
{ id: 'tv13', title: 'Love, Death & Robots', year: 2019, posterUrl: 'https://image.tmdb.org/t/p/w342/dSFlhAo9lgerSXj7WRhp8Ilo0wp.jpg', synopsis: 'Terrifying creatures, wicked surprises and dark comedy converge in this NSFW anthology of animated stories.', genres: ['Animation', 'Sci-Fi', 'Horror'], rating: 8.3, seasons: 3, status: 'ongoing', network: 'Netflix', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/love-death-robots', quality: '4K HDR', icon: 'plex' }] },
{ id: 'tv14', title: 'Devs', year: 2020, posterUrl: 'https://image.tmdb.org/t/p/w342/e1j2oHE9V7bnQIDt3W6IVqaFBm4.jpg', synopsis: 'A young software engineer investigates the secretive development division of her employer.', genres: ['Sci-Fi', 'Drama', 'Thriller'], rating: 7.6, seasons: 1, status: 'ended', network: 'Hulu', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/devs', quality: '4K', icon: 'plex' }] },
{ id: 'tv15', title: 'Halt and Catch Fire', year: 2014, posterUrl: 'https://image.tmdb.org/t/p/w342/vfMFGUbhI2hD7IL3yCf4a0ImTGl.jpg', synopsis: 'Follows the personal computing revolution, chronicling the battles between fictional visionaries.', genres: ['Drama'], rating: 8.4, seasons: 4, status: 'ended', network: 'AMC', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/halt-and-catch-fire', quality: '1080p', icon: 'plex' }] },
{ id: 'tv16', title: 'Stranger Things', year: 2016, posterUrl: 'https://image.tmdb.org/t/p/w342/49WJfeN0moxb9IPfGn8AIqMGskD.jpg', synopsis: 'When a young boy disappears, his mother, a police chief, and friends uncover a mystery involving secret experiments.', genres: ['Sci-Fi', 'Drama', 'Horror'], rating: 8.7, seasons: 4, status: 'ongoing', network: 'Netflix', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/stranger-things', quality: '4K HDR', icon: 'plex' }] },
{ id: 'tv17', title: 'Battlestar Galactica', year: 2004, posterUrl: 'https://image.tmdb.org/t/p/w342/4m0YfBztahZgapdsHNBG2tFu7uB.jpg', synopsis: 'After the Cylons\' attack, the survivors of the Twelve Colonies search for the fabled planet Earth.', genres: ['Sci-Fi', 'Drama', 'Action'], rating: 8.7, seasons: 4, status: 'ended', network: 'Syfy', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/bsg', quality: '1080p', icon: 'plex' }] },
{ id: 'tv18', title: 'Cowboy Bebop', year: 1998, posterUrl: 'https://image.tmdb.org/t/p/w342/m8PDMXZ4JccjOp3Bfk0yvihVE1r.jpg', synopsis: 'A ragtag crew of bounty hunters chases the most dangerous criminals through space.', genres: ['Animation', 'Sci-Fi', 'Action'], rating: 8.9, seasons: 1, status: 'ended', network: 'TV Tokyo', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/cowboy-bebop', quality: '1080p', icon: 'plex' }] },
{ id: 'tv19', title: 'Shogun', year: 2024, posterUrl: 'https://image.tmdb.org/t/p/w342/7O4iVfOMQmdCSxhOg1WnzG1AgYT.jpg', synopsis: 'In Japan in 1600, a collision of civilizations creates conflict between ambitious lords and a shipwrecked English pilot.', genres: ['Drama', 'History', 'War'], rating: 8.7, seasons: 1, status: 'ongoing', network: 'FX', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/shogun', quality: '4K HDR', icon: 'plex' }] },
{ id: 'tv20', title: 'Fringe', year: 2008, posterUrl: 'https://image.tmdb.org/t/p/w342/sY9hg5dLJ93RVOgv7CY1GT1PLR2.jpg', synopsis: 'An FBI agent is forced to work with an institutionalized scientist and his son to investigate fringe events.', genres: ['Sci-Fi', 'Drama', 'Mystery'], rating: 8.4, seasons: 5, status: 'ended', network: 'Fox', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/fringe', quality: '1080p', icon: 'plex' }] },
{ id: 'tv21', title: 'The Mandalorian', year: 2019, posterUrl: 'https://image.tmdb.org/t/p/w342/sWgBv7LV2PRoQgkxwlibdGXKz1S.jpg', synopsis: 'A lone gunfighter in the outer reaches of the galaxy navigates his way through the post-Empire era.', genres: ['Sci-Fi', 'Action', 'Adventure'], rating: 8.4, seasons: 3, status: 'ongoing', network: 'Disney+', sources: [{ type: 'plex', name: 'Plex', url: 'plex://play/tv/the-mandalorian', quality: '4K HDR', icon: 'plex' }] },
]
export function searchTVShows(query: string): TVSeries[] {
const q = query.toLowerCase()
return mockTVShows.filter(
(t) =>
t.title.toLowerCase().includes(q) ||
(t.genres ?? []).some((g) => g.toLowerCase().includes(q)) ||
(t.network ?? '').toLowerCase().includes(q)
)
}