[{"data":1,"prerenderedAt":578},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":100,"-getting-started-installation-surround":573},[4,35,80,90],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Project Structure","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":29},"Backend Server","\u002Fgetting-started\u002Fbackend","1.getting-started\u002F6.backend","i-lucide-server",{"title":31,"path":32,"stem":33,"icon":34},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F8.troubleshooting","i-lucide-wrench",{"title":36,"icon":6,"path":37,"stem":38,"children":39,"page":6},"API","\u002Fapi","2.api",[40,45,50,55,60,65,70,75],{"title":41,"path":42,"stem":43,"icon":44},"API Overview","\u002Fapi\u002Foverview","2.api\u002F1.overview","i-lucide-zap",{"title":46,"path":47,"stem":48,"icon":49},"TMDB Integration","\u002Fapi\u002Ftmdb-proxy","2.api\u002F2.tmdb-proxy","i-si-movie-line",{"title":51,"path":52,"stem":53,"icon":54},"Watched and My List APIs","\u002Fapi\u002Fwatched-movies","2.api\u002F3.watched-movies","i-lucide-eye",{"title":56,"path":57,"stem":58,"icon":59},"Recommendation Generation","\u002Fapi\u002Fgemini-recommendations","2.api\u002F4.gemini-recommendations","i-lucide-sparkles",{"title":61,"path":62,"stem":63,"icon":64},"Movie Search API","\u002Fapi\u002Fmovie-search","2.api\u002F5.movie-search","i-lucide-search",{"title":66,"path":67,"stem":68,"icon":69},"TMDB Import","\u002Fapi\u002Ftmdb-import","2.api\u002F6.tmdb-import","i-lucide-database",{"title":71,"path":72,"stem":73,"icon":74},"Movie Details & Caching","\u002Fapi\u002Fmovie-details","2.api\u002F7.movie-details","i-lucide-film",{"title":76,"path":77,"stem":78,"icon":79},"Recommendations (Cached)","\u002Fapi\u002Frecommendations-cache","2.api\u002F8.recommendations-cache","i-lucide-brain",{"title":81,"icon":6,"path":82,"stem":83,"children":84,"page":6},"Frontend","\u002Ffrontend","4.frontend",[85],{"title":86,"path":87,"stem":88,"icon":89},"Components","\u002Ffrontend\u002Fcomponents","4.frontend\u002F1.components","i-lucide-layout",{"title":91,"icon":6,"path":92,"stem":93,"children":94,"page":6},"Reference","\u002Freference","5.reference",[95],{"title":96,"path":97,"stem":98,"icon":99},"Rate Limiting","\u002Freference\u002Frate-limiting","5.reference\u002F2.rate-limiting","i-lucide-shield",{"id":101,"title":16,"body":102,"description":565,"extension":566,"links":567,"meta":568,"navigation":569,"path":17,"seo":570,"stem":18,"__hash__":572},"docs\u002F1.getting-started\u002F3.installation.md",{"type":103,"value":104,"toc":554},"minimark",[105,110,114,135,149,153,504,508,511,526,529,532,550],[106,107,109],"h2",{"id":108},"prerequisites","Prerequisites",[111,112,113],"p",{},"Make sure you have the following installed:",[115,116,117,125,130],"ul",{},[118,119,120,124],"li",{},[121,122,123],"strong",{},"Node.js"," (v18 or higher)",[118,126,127],{},[121,128,129],{},"Git",[118,131,132],{},[121,133,134],{},"npm",[136,137,139,140,144,145,148],"callout",{"type":138},"info","Run application commands from ",[141,142,143],"code",{},"app\u002F",". Run documentation commands from ",[141,146,147],{},"docs\u002F"," only when you are editing docs.",[106,150,152],{"id":151},"installation-steps","Installation Steps",[154,155,156,161,197,201,204,223,234,384,387,425,428,440,443,447,450,465,471,475,478],"steps",{},[157,158,160],"h3",{"id":159},"clone-the-repository","Clone the Repository",[162,163,169],"pre",{"className":164,"code":165,"filename":166,"language":167,"meta":168,"style":168},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","git clone https:\u002F\u002Fgithub.com\u002Fmovie-recommender-yh4f\u002Fmovie-recommender.git\ncd movie-recommender\n","Terminal","bash","",[141,170,171,187],{"__ignoreMap":168},[172,173,176,180,184],"span",{"class":174,"line":175},"line",1,[172,177,179],{"class":178},"sbgvK","git",[172,181,183],{"class":182},"s_sjI"," clone",[172,185,186],{"class":182}," https:\u002F\u002Fgithub.com\u002Fmovie-recommender-yh4f\u002Fmovie-recommender.git\n",[172,188,190,194],{"class":174,"line":189},2,[172,191,193],{"class":192},"sptTA","cd",[172,195,196],{"class":182}," movie-recommender\n",[157,198,200],{"id":199},"setup-app","Setup App",[111,202,203],{},"Navigate to the app directory and install:",[162,205,207],{"className":164,"code":206,"filename":166,"language":167,"meta":168,"style":168},"cd app\nnpm install\n",[141,208,209,216],{"__ignoreMap":168},[172,210,211,213],{"class":174,"line":175},[172,212,193],{"class":192},[172,214,215],{"class":182}," app\n",[172,217,218,220],{"class":174,"line":189},[172,219,134],{"class":178},[172,221,222],{"class":182}," install\n",[111,224,225,226,229,230,233],{},"Create ",[141,227,228],{},"app\u002F.env"," (or ",[141,231,232],{},"app\u002F.env.local",") with your runtime configuration:",[162,235,238],{"className":164,"code":236,"filename":237,"language":167,"meta":168,"style":168},"NUXT_PUBLIC_SUPABASE_URL=your_supabase_url\nNUXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key\nNUXT_SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key\nNUXT_TMDB_API_KEY=your_tmdb_api_key\nNUXT_PUBLIC_HCAPTCHA_SITE_KEY=your_hcaptcha_site_key\nNUXT_HCAPTCHA_SECRET=your_hcaptcha_secret\nUPSTASH_REDIS_REST_URL=your_upstash_redis_url\nUPSTASH_REDIS_REST_TOKEN=your_upstash_redis_token\nADMIN_API_TOKEN=your_admin_token\nNUXT_GOOGLE_API_KEY=your_google_ai_studio_key\nNUXT_GOOGLE_MODELS=gemini-flash-lite-latest,gemini-2.5-flash-lite,gemini-2.0-flash-lite\nNUXT_OPENROUTER_API_KEY=your_openrouter_api_key\nNUXT_OPENROUTER_MODELS=google\u002Fgemini-2.5-flash-lite\n","App .env",[141,239,240,253,263,274,285,296,307,318,329,340,351,362,373],{"__ignoreMap":168},[172,241,242,246,250],{"class":174,"line":175},[172,243,245],{"class":244},"su5hD","NUXT_PUBLIC_SUPABASE_URL",[172,247,249],{"class":248},"smGrS","=",[172,251,252],{"class":182},"your_supabase_url\n",[172,254,255,258,260],{"class":174,"line":189},[172,256,257],{"class":244},"NUXT_PUBLIC_SUPABASE_ANON_KEY",[172,259,249],{"class":248},[172,261,262],{"class":182},"your_supabase_anon_key\n",[172,264,266,269,271],{"class":174,"line":265},3,[172,267,268],{"class":244},"NUXT_SUPABASE_SERVICE_ROLE_KEY",[172,270,249],{"class":248},[172,272,273],{"class":182},"your_supabase_service_role_key\n",[172,275,277,280,282],{"class":174,"line":276},4,[172,278,279],{"class":244},"NUXT_TMDB_API_KEY",[172,281,249],{"class":248},[172,283,284],{"class":182},"your_tmdb_api_key\n",[172,286,288,291,293],{"class":174,"line":287},5,[172,289,290],{"class":244},"NUXT_PUBLIC_HCAPTCHA_SITE_KEY",[172,292,249],{"class":248},[172,294,295],{"class":182},"your_hcaptcha_site_key\n",[172,297,299,302,304],{"class":174,"line":298},6,[172,300,301],{"class":244},"NUXT_HCAPTCHA_SECRET",[172,303,249],{"class":248},[172,305,306],{"class":182},"your_hcaptcha_secret\n",[172,308,310,313,315],{"class":174,"line":309},7,[172,311,312],{"class":244},"UPSTASH_REDIS_REST_URL",[172,314,249],{"class":248},[172,316,317],{"class":182},"your_upstash_redis_url\n",[172,319,321,324,326],{"class":174,"line":320},8,[172,322,323],{"class":244},"UPSTASH_REDIS_REST_TOKEN",[172,325,249],{"class":248},[172,327,328],{"class":182},"your_upstash_redis_token\n",[172,330,332,335,337],{"class":174,"line":331},9,[172,333,334],{"class":244},"ADMIN_API_TOKEN",[172,336,249],{"class":248},[172,338,339],{"class":182},"your_admin_token\n",[172,341,343,346,348],{"class":174,"line":342},10,[172,344,345],{"class":244},"NUXT_GOOGLE_API_KEY",[172,347,249],{"class":248},[172,349,350],{"class":182},"your_google_ai_studio_key\n",[172,352,354,357,359],{"class":174,"line":353},11,[172,355,356],{"class":244},"NUXT_GOOGLE_MODELS",[172,358,249],{"class":248},[172,360,361],{"class":182},"gemini-flash-lite-latest,gemini-2.5-flash-lite,gemini-2.0-flash-lite\n",[172,363,365,368,370],{"class":174,"line":364},12,[172,366,367],{"class":244},"NUXT_OPENROUTER_API_KEY",[172,369,249],{"class":248},[172,371,372],{"class":182},"your_openrouter_api_key\n",[172,374,376,379,381],{"class":174,"line":375},13,[172,377,378],{"class":244},"NUXT_OPENROUTER_MODELS",[172,380,249],{"class":248},[172,382,383],{"class":182},"google\u002Fgemini-2.5-flash-lite\n",[111,385,386],{},"The current server implementation expects these Supabase tables and helpers to exist before you use watched lists, My List, recommendations, import, or movie details caching:",[115,388,389,394,399,404,409,415],{},[118,390,391],{},[141,392,393],{},"movies",[118,395,396],{},[141,397,398],{},"user_watched_movies",[118,400,401],{},[141,402,403],{},"user_my_list",[118,405,406],{},[141,407,408],{},"recommendations",[118,410,411,412],{},"RPC function ",[141,413,414],{},"auth_email_exists",[118,416,417,418,421,422],{},"RPC functions ",[141,419,420],{},"append_my_list"," and ",[141,423,424],{},"remove_my_list",[111,426,427],{},"Recommendation generation needs at least one AI provider to be configured:",[115,429,430,435],{},[118,431,432,433],{},"Google AI Studio via ",[141,434,345],{},[118,436,437,438],{},"OpenRouter via ",[141,439,367],{},[111,441,442],{},"If both are configured, the server tries Google models first and then OpenRouter models.",[157,444,446],{"id":445},"start-development-server","Start Development Server",[111,448,449],{},"Start the app:",[162,451,453],{"className":164,"code":452,"filename":166,"language":167,"meta":168,"style":168},"npm run dev\n",[141,454,455],{"__ignoreMap":168},[172,456,457,459,462],{"class":174,"line":175},[172,458,134],{"class":178},[172,460,461],{"class":182}," run",[172,463,464],{"class":182}," dev\n",[111,466,467,468],{},"The application will be available at ",[141,469,470],{},"http:\u002F\u002Flocalhost:3000",[157,472,474],{"id":473},"optional-run-documentation-locally","Optional: Run Documentation Locally",[111,476,477],{},"If you want to work on the docs site too:",[162,479,481],{"className":164,"code":480,"filename":166,"language":167,"meta":168,"style":168},"cd ..\u002Fdocs\nnpm install\nnpm run dev\n",[141,482,483,490,496],{"__ignoreMap":168},[172,484,485,487],{"class":174,"line":175},[172,486,193],{"class":192},[172,488,489],{"class":182}," ..\u002Fdocs\n",[172,491,492,494],{"class":174,"line":189},[172,493,134],{"class":178},[172,495,222],{"class":182},[172,497,498,500,502],{"class":174,"line":265},[172,499,134],{"class":178},[172,501,461],{"class":182},[172,503,464],{"class":182},[106,505,507],{"id":506},"verify-installation","Verify Installation",[111,509,510],{},"Once everything is set up, you should be able to:",[512,513,514,520,523],"ol",{},[118,515,516,517,519],{},"Open ",[141,518,470],{}," in your browser",[118,521,522],{},"Sign in or create an account",[118,524,525],{},"Search titles, open movie details, and use watched\u002FMy List actions",[106,527,31],{"id":528},"troubleshooting",[111,530,531],{},"If you encounter any issues:",[115,533,534,537,540,543],{},[118,535,536],{},"Ensure all dependencies are correctly installed",[118,538,539],{},"Check that environment variables are properly configured",[118,541,542],{},"Verify that Node.js version meets the requirements",[118,544,545,546,549],{},"Check the ",[547,548,31],"a",{"href":32}," guide for common issues",[551,552,553],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":168,"searchDepth":189,"depth":189,"links":555},[556,557,563,564],{"id":108,"depth":189,"text":109},{"id":151,"depth":189,"text":152,"children":558},[559,560,561,562],{"id":159,"depth":265,"text":160},{"id":199,"depth":265,"text":200},{"id":445,"depth":265,"text":446},{"id":473,"depth":265,"text":474},{"id":506,"depth":189,"text":507},{"id":528,"depth":189,"text":31},"Get started with Movie Recommender","md",null,{},{"icon":19},{"description":571,"title":16},"Setup and installation guide for Movie Recommender","St2ZkPNFw5JBalI2fJjpVzUhfBpJ0a3P7_KZTMoaBoU",[574,576],{"title":11,"path":12,"stem":13,"description":575,"icon":14,"children":-1},"Welcome to the Movie Recommender codebase",{"title":21,"path":22,"stem":23,"description":577,"icon":24,"children":-1},"Understand the current directory structure of Movie Recommender",1782138811119]