[{"data":1,"prerenderedAt":297},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-project-structure":100,"-getting-started-project-structure-surround":292},[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":21,"body":102,"description":285,"extension":286,"links":287,"meta":288,"navigation":289,"path":22,"seo":290,"stem":23,"__hash__":291},"docs\u002F1.getting-started\u002F4.project-structure.md",{"type":103,"value":104,"toc":275},"minimark",[105,110,114,125,129,132,138,143,213,217,220,226,230],[106,107,109],"h2",{"id":108},"project-layout","Project Layout",[111,112,113],"p",{},"The Movie Recommender project has two main directories:",[115,116,122],"pre",{"className":117,"code":119,"language":120,"meta":121},[118],"language-text","movie-recommender\u002F\n├── app\u002F                         # Nuxt 4 full-stack app (where most work happens)\n├── docs\u002F                        # Documentation site\n├── README.md\n└── LICENSE\n","text","",[123,124,119],"code",{"__ignoreMap":121},[106,126,128],{"id":127},"app-directory","App Directory",[111,130,131],{},"The main app is a Nuxt 4 application with Vue and Tailwind CSS. All active development happens here.",[115,133,136],{"className":134,"code":135,"language":120,"meta":121},[118],"app\u002F\n├── app\u002F\n│   ├── app.vue\n│   ├── pages\u002F\n│   ├── components\u002F\n│   ├── composables\u002F\n│   ├── layouts\u002F\n│   ├── plugins\u002F\n│   ├── types\u002F\n│   └── utils\u002F\n├── server\u002F\n│   ├── api\u002F\n│   │   ├── admin\u002F\n│   │   ├── movies\u002F\n│   │   ├── mylist\u002F\n│   │   ├── recommend\u002F\n│   │   ├── watched\u002F\n│   │   └── recommend.get.ts\n│   └── utils\u002F\n├── test\u002F\n├── public\u002F\n├── nuxt.config.ts\n├── tsconfig.json\n└── package.json\n",[123,137,135],{"__ignoreMap":121},[139,140,142],"h3",{"id":141},"key-areas","Key Areas",[144,145,146,158,166,175,184,204],"ul",{},[147,148,149,153,154,157],"li",{},[150,151,152],"strong",{},"Pages"," (",[123,155,156],{},"app\u002Fpages\u002F",") - Home, search, watched, profile, mylist, and reset-password",[147,159,160,153,162,165],{},[150,161,86],{},[123,163,164],{},"app\u002Fcomponents\u002F",") - Reusable UI components",[147,167,168,153,171,174],{},[150,169,170],{},"Composables",[123,172,173],{},"app\u002Fcomposables\u002F",") - Shared logic for auth, watched state, My List, movie details, recommendation quota, and filters",[147,176,177,153,180,183],{},[150,178,179],{},"Server API",[123,181,182],{},"server\u002Fapi\u002F",") - Backend endpoints for recommendations, recommendation quota, movie search\u002Fdetails\u002Fpopular, watched movies, My List, signup, and admin import",[147,185,186,153,189,192,193,196,197,196,200,203],{},[150,187,188],{},"Server Utilities",[123,190,191],{},"server\u002Futils\u002F",") - Domain folders for ",[123,194,195],{},"auth",", ",[123,198,199],{},"recommendations",[123,201,202],{},"tmdb",", and shared infrastructure",[147,205,206,153,209,212],{},[150,207,208],{},"Tests",[123,210,211],{},"test\u002F",") - Nuxt route tests plus unit coverage for recommendation, search, and import utilities",[106,214,216],{"id":215},"documentation-directory","Documentation Directory",[111,218,219],{},"The docs site (what you are reading now):",[115,221,224],{"className":222,"code":223,"language":120,"meta":121},[118],"docs\u002F\n├── content\u002F            # Markdown pages\n├── public\u002F             # Static assets\n├── nuxt.config.ts\n└── package.json\n",[123,225,223],{"__ignoreMap":121},[106,227,229],{"id":228},"what-to-know","What to Know",[144,231,232,254,260,266,269],{},[147,233,234,235,196,238,196,241,196,244,196,247,250,251],{},"All app commands (",[123,236,237],{},"npm run dev",[123,239,240],{},"npm run build",[123,242,243],{},"npm run test",[123,245,246],{},"npm run typecheck",[123,248,249],{},"npm run lint",") are run from ",[123,252,253],{},"app\u002F",[147,255,256,257],{},"The app server runs on ",[123,258,259],{},"http:\u002F\u002Flocalhost:3000",[147,261,262,263],{},"The docs site is separate and has its own ",[123,264,265],{},"package.json",[147,267,268],{},"Server-side movie data, watched state, My List, and recommendation cache live in Supabase",[147,270,271,272],{},"Recommendation generation is provider-agnostic now; the route uses the AI client in ",[123,273,274],{},"server\u002Futils\u002Frecommendations\u002Fai-client.ts",{"title":121,"searchDepth":276,"depth":276,"links":277},2,[278,279,283,284],{"id":108,"depth":276,"text":109},{"id":127,"depth":276,"text":128,"children":280},[281],{"id":141,"depth":282,"text":142},3,{"id":215,"depth":276,"text":216},{"id":228,"depth":276,"text":229},"Understand the current directory structure of Movie Recommender","md",null,{},{"icon":24},{"title":21,"description":285},"K9Z7IvR0wNVnkpmNQxFMomDNq1v-ltR4r397igDYPnk",[293,295],{"title":16,"path":17,"stem":18,"description":294,"icon":19,"children":-1},"Get started with Movie Recommender",{"title":26,"path":27,"stem":28,"description":296,"icon":29,"children":-1},"Overview of the current Nuxt server architecture, API routes, and Supabase data model",1782138811963]