[{"data":1,"prerenderedAt":1172},["ShallowReactive",2],{"repo-tree":3,"repo-\u002Fapps\u002Fmobile-app\u002Fclaude":283},[4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,69,72,75,78,81,84,86,88,90,93,96,99,102,105,108,111,114,117,120,123,125,127,129,131,133,135,138,141,143,146,149,152,155,158,161,164,167,169,172,175,178,180,183,186,189,192,195,198,201,203,206,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251,254,257,260,263,266,269,272,275,278,281],{"path":5,"title":6},"\u002Fagents\u002Fbackend-code-style","Backend Conventions",{"path":8,"title":9},"\u002Fagents\u002Fdatabase","Database",{"path":11,"title":12},"\u002Fagents\u002Fportal-code-style","Portal Conventions",{"path":14,"title":15},"\u002Fagents\u002Ftranslation","Translation",{"path":17,"title":18},"\u002Fconventions\u002Fbackend-coding","Backend coding conventions",{"path":20,"title":21},"\u002Fconventions\u002Ffrontend-coding","Frontend coding conventions",{"path":23,"title":24},"\u002Fdevelopment-process","Development process",{"path":26,"title":27},"\u002Flearning-api-preview-hetzner-setup","Learning API Preview on Hetzner + Cloudflare",{"path":29,"title":30},"\u002Flearning-api-preview-vm-plan","Learning API Preview VM Plan",{"path":32,"title":33},"\u002Fmonorepo-structure","Monorepo structure",{"path":35,"title":36},"\u002Foperations","Operations — bugs and support",{"path":38,"title":39},"\u002Fpostmortems\u002F2026-03-16_onboarding-currency-regression","Onboarding Zod transform silently broken — web signups assigned wrong checkout currency",{"path":41,"title":42},"\u002Fpostmortems\u002Freadme","Postmortems",{"path":44,"title":45},"\u002Fpostmortems\u002F_template","TEMPLATE",{"path":47,"title":48},"\u002Fpostmortems\u002Fposthog-comparison","Postmortem practice — comparison with PostHog",{"path":50,"title":51},"\u002Fpreview-environment-plan","Preview Environment Plan",{"path":53,"title":54},"\u002Fprinciples","Engineering principles",{"path":56,"title":57},"\u002Fworking-with-ai","Working with AI",{"path":59,"title":60},"\u002F.claude\u002Fskills\u002Feval-playground\u002Fskill","Eval Playground — Co-development Skill",{"path":62,"title":63},"\u002F.claude\u002Fskills\u002Ffigma-diff-section\u002Fskill","Figma Diff Section Pipeline",{"path":65,"title":66},"\u002Fagents","AGENTS.md",{"path":68,"title":66},"\u002Fclaude",{"path":70,"title":71},"\u002Freadme","Studyflash",{"path":73,"title":74},"\u002Fapps\u002Fcore-api\u002Fagents","Core API (apps\u002Fcore-api)",{"path":76,"title":77},"\u002Fapps\u002Fcore-api\u002Freadme","README",{"path":79,"title":80},"\u002Fapps\u002Femail-previews\u002Fagents","Email Previews (apps\u002Femail-previews)",{"path":82,"title":83},"\u002Fapps\u002Flanding-page\u002Fagents","Landing Page (apps\u002Flanding-page)",{"path":85,"title":83},"\u002Fapps\u002Flanding-page\u002Fclaude",{"path":87,"title":66},"\u002Fapps\u002Flearning-api\u002Fagents",{"path":89,"title":77},"\u002Fapps\u002Flearning-api\u002Freadme",{"path":91,"title":92},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Feval_metrics_design","Surface-Specific Eval Metrics Design",{"path":94,"title":95},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Ftest_set","Quiz Eval Test Set",{"path":97,"title":98},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Ffrontend\u002Freadme","React + TypeScript + Vite",{"path":100,"title":101},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fcontent-pillar-shallow-coverage\u002Freadme","Content pillar misses subtopics in dense documents",{"path":103,"title":104},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-empty-section-headers\u002Freadme","Empty section headers dropped by docling chunker",{"path":106,"title":107},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-table-reading-order\u002Freadme","Table\u002Fbox layout causes wrong reading order",{"path":109,"title":110},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fmetrics\u002Freadme","Quiz eval metrics — canonical rubrics",{"path":112,"title":113},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-04-12-quiz-summary-feedback-current-state","Quiz and Summary Feedback Current State",{"path":115,"title":116},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-04-24-quiz-eval-metrics","Quiz Evaluation Metrics",{"path":118,"title":119},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-05-01-quiz-eval-current-state","Quiz Eval Current State",{"path":121,"title":122},"\u002Fapps\u002Flearning-api\u002Fmonitoring\u002Freadme","Monitoring Stack",{"path":124,"title":77},"\u002Fapps\u002Flearning-api\u002Fshared\u002Freadme",{"path":126,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fflashcard_agent\u002Freadme",{"path":128,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fingestion_agent\u002Freadme",{"path":130,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fquiz_agent\u002Freadme",{"path":132,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fsummary_agent\u002Freadme",{"path":134,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Fparser\u002Freadme",{"path":136,"title":137},"\u002Fapps\u002Fmarketing-emails-preview\u002Fagents","Marketing Emails Preview (apps\u002Fmarketing-emails-preview)",{"path":139,"title":140},"\u002Fapps\u002Fmobile-app\u002Fagents","StudyFlash Mobile App - Claude Code Configuration",{"path":142,"title":140},"\u002Fapps\u002Fmobile-app\u002Fclaude",{"path":144,"title":145},"\u002Fapps\u002Fmountain-max\u002Fagents","Mountain Max (apps\u002Fmountain-max)",{"path":147,"title":148},"\u002Fapps\u002Fmountain-max\u002Fgame\u002Freadme","Mountain Max Game",{"path":150,"title":151},"\u002Fapps\u002Fportal\u002Fagents","Portal (apps\u002Fportal)",{"path":153,"title":154},"\u002Fapps\u002Fportal\u002Freadme","Nuxt Minimal Starter",{"path":156,"title":157},"\u002Fapps\u002Fportal\u002Fapp\u002Fcomposables\u002Ffiles\u002Freadme","File Upload Composables",{"path":159,"title":160},"\u002Fapps\u002Fportal\u002Fdocs\u002Flibrary-routing","Library Routing Documentation",{"path":162,"title":163},"\u002Fapps\u002Fsupabase\u002Fagents","Supabase (apps\u002Fsupabase)",{"path":165,"title":166},"\u002Fapps\u002Fwrapped\u002Fagents","Wrapped (apps\u002Fwrapped)",{"path":168,"title":98},"\u002Fapps\u002Fwrapped\u002Freadme",{"path":170,"title":171},"\u002Finfra\u002Freadme","infra\u002F",{"path":173,"title":174},"\u002Finfra\u002Fdns\u002Freadme","DNS Infrastructure",{"path":176,"title":177},"\u002Finfra\u002Fdokploy\u002Freadme","studyflash-dokploy",{"path":179,"title":77},"\u002Finfra\u002Fdokploy\u002Fsdk\u002Fnodejs\u002Freadme",{"path":181,"title":182},"\u002Finfra\u002Finfisical\u002Freadme","Infisical Infrastructure",{"path":184,"title":185},"\u002Finfra\u002Flearning-api\u002Freadme","Pulumi GCP TypeScript Template",{"path":187,"title":188},"\u002Finfra\u002Fopenreplay\u002Freadme","OpenReplay on Hetzner",{"path":190,"title":191},"\u002Finfra\u002Fscripts\u002Freadme","infra\u002Fscripts\u002F",{"path":193,"title":194},"\u002Finfra\u002Fturborepo-cache\u002Freadme","Turborepo Remote Cache Infrastructure",{"path":196,"title":197},"\u002Finternal\u002Fchatwoot\u002Freadme","Chatwoot Infrastructure",{"path":199,"title":200},"\u002Finternal\u002Fchatwoot\u002Fprovider\u002Freadme","studyflash-chatwoot-provider",{"path":202,"title":77},"\u002Finternal\u002Fchatwoot\u002Fprovider\u002Fsdk\u002Fnodejs\u002Freadme",{"path":204,"title":205},"\u002Finternal\u002Fdocs\u002Freadme","internal\u002Fdocs",{"path":207,"title":208},"\u002Finternal\u002Fsupport-bot\u002Fclaude","Support Bot (Maximilian)",{"path":210,"title":211},"\u002Finternal\u002Fsupport-bot\u002Freadme","Studyflash Customer Support Bot (Maximilian)",{"path":213,"title":214},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Faccount_issues","Account Issues",{"path":216,"title":217},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fbilling_invoice","Billing Invoice",{"path":219,"title":220},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fcontent_upload","Content Upload",{"path":222,"title":223},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fdata_loss","Data Loss",{"path":225,"title":226},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fflashcard_issues","Flashcard Issues",{"path":228,"title":229},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fgarbage","Garbage",{"path":231,"title":232},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fgeneral_how_to","General How To",{"path":234,"title":235},"\u002Finternal\u002Fsupport-bot\u002Fkb","Knowledge Base Index",{"path":237,"title":238},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Flanguage_issues","Language Issues",{"path":240,"title":241},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmindmap_issues","Mindmap Issues",{"path":243,"title":244},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmisunderstanding","Misunderstanding",{"path":246,"title":247},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmock_exam_issues","Mock Exam Issues",{"path":249,"title":250},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fpodcast_issues","Podcast Issues",{"path":252,"title":253},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fquiz_issues","Quiz Issues",{"path":255,"title":256},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Frefund_request","Refund Request",{"path":258,"title":259},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsubscription_cancellation","Subscription Cancellation",{"path":261,"title":262},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsubscription_info","Subscription Info",{"path":264,"title":265},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsummary_issues","Summary Issues",{"path":267,"title":268},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Ftechnical_errors","Technical Errors",{"path":270,"title":271},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fvideo_issues","Video Issues",{"path":273,"title":274},"\u002Fpackages\u002Fcommon\u002Fdocs\u002Fearly-access-features","Declarative Early Access Features",{"path":276,"title":277},"\u002Fpackages\u002Fcommon\u002Fscripts\u002Freadme","Common Package Scripts",{"path":279,"title":280},"\u002Fpackages\u002Fdevtools\u002Ffigma-plugins\u002Freadme","Figma plugins",{"path":282,"title":77},"\u002Fpackages\u002Fpulumi-infisical\u002Freadme",{"id":284,"title":140,"body":285,"description":443,"extension":1166,"lastReviewed":1167,"meta":1168,"navigation":654,"owner":1167,"path":142,"seo":1169,"status":1167,"stem":1170,"tags":1167,"__hash__":1171},"repo\u002Fapps\u002Fmobile-app\u002FCLAUDE.md",{"type":286,"value":287,"toc":1141},"minimark",[288,292,297,301,314,318,394,398,428,432,437,481,485,521,525,582,586,611,615,708,712,720,724,890,894,900,912,922,926,967,971,1015,1019,1022,1042,1046,1050,1071,1075,1089,1093,1107,1111,1137],[289,290,140],"h1",{"id":291},"studyflash-mobile-app-claude-code-configuration",[293,294,296],"h2",{"id":295},"project-overview","Project Overview",[298,299,300],"p",{},"StudyFlash is an AI-powered flashcard and study app built with React Native and Expo. It helps users create, study, and manage flashcards with intelligent features like AI content generation, spaced repetition, and adaptive learning.",[298,302,303,307,308],{},[304,305,306],"strong",{},"Repository",": ",[309,310,311],"a",{"href":311,"rel":312},"https:\u002F\u002Fgithub.com\u002Fstudyflash-ai\u002Fmobile-app.git",[313],"nofollow",[293,315,317],{"id":316},"tech-stack","Tech Stack",[319,320,321,328,334,340,346,352,358,364,370,376,382,388],"ul",{},[322,323,324,327],"li",{},[304,325,326],{},"Framework",": React Native 0.76.9 with Expo 52",[322,329,330,333],{},[304,331,332],{},"Language",": TypeScript 5.7.2",[322,335,336,339],{},[304,337,338],{},"Navigation",": Expo Router with typed routes",[322,341,342,345],{},[304,343,344],{},"Styling",": NativeWind 4.0 (Tailwind CSS for React Native)",[322,347,348,351],{},[304,349,350],{},"State Management",": Legend State 3.0 + Zustand",[322,353,354,357],{},[304,355,356],{},"Backend",": Supabase (auth, database, storage)",[322,359,360,363],{},[304,361,362],{},"Authentication",": Google Sign-In, Apple Authentication",[322,365,366,369],{},[304,367,368],{},"Payments",": RevenueCat (React Native Purchases)",[322,371,372,375],{},[304,373,374],{},"Analytics",": PostHog with session replay",[322,377,378,381],{},[304,379,380],{},"Error Tracking",": Sentry",[322,383,384,387],{},[304,385,386],{},"Rich Text",": TipTap editor with Tentap",[322,389,390,393],{},[304,391,392],{},"Animations",": React Native Reanimated 3.16",[293,395,397],{"id":396},"app-variants-bundle-ids","App Variants & Bundle IDs",[319,399,400,410,419],{},[322,401,402,307,405,409],{},[304,403,404],{},"Development",[406,407,408],"code",{},"com.studyflash.dev"," - \"Studyflash (dev)\"",[322,411,412,307,415,418],{},[304,413,414],{},"Preview",[406,416,417],{},"com.studyflash.preview"," - \"Studyflash (preview)\"",[322,420,421,307,424,427],{},[304,422,423],{},"Production",[406,425,426],{},"com.studyflash.ai"," - \"Studyflash\"",[293,429,431],{"id":430},"development-commands","Development Commands",[433,434,436],"h3",{"id":435},"start-development","Start Development",[438,439,444],"pre",{"className":440,"code":441,"language":442,"meta":443,"style":443},"language-bash shiki shiki-themes github-light github-dark","pnpm start                   # Start with development client (APP_VARIANT=development)\nnpx expo start --dev-client  # Alternative start command\n","bash","",[406,445,446,463],{"__ignoreMap":443},[447,448,451,455,459],"span",{"class":449,"line":450},"line",1,[447,452,454],{"class":453},"sScJk","pnpm",[447,456,458],{"class":457},"sZZnC"," start",[447,460,462],{"class":461},"sJ8bj","                   # Start with development client (APP_VARIANT=development)\n",[447,464,466,469,472,474,478],{"class":449,"line":465},2,[447,467,468],{"class":453},"npx",[447,470,471],{"class":457}," expo",[447,473,458],{"class":457},[447,475,477],{"class":476},"sj4cs"," --dev-client",[447,479,480],{"class":461},"  # Alternative start command\n",[433,482,484],{"id":483},"platform-specific","Platform-Specific",[438,486,488],{"className":440,"code":487,"language":442,"meta":443,"style":443},"pnpm android                # Run on Android\npnpm ios                    # Run on iOS\npnpm web                    # Run on web\n",[406,489,490,500,510],{"__ignoreMap":443},[447,491,492,494,497],{"class":449,"line":450},[447,493,454],{"class":453},[447,495,496],{"class":457}," android",[447,498,499],{"class":461},"                # Run on Android\n",[447,501,502,504,507],{"class":449,"line":465},[447,503,454],{"class":453},[447,505,506],{"class":457}," ios",[447,508,509],{"class":461},"                    # Run on iOS\n",[447,511,513,515,518],{"class":449,"line":512},3,[447,514,454],{"class":453},[447,516,517],{"class":457}," web",[447,519,520],{"class":461},"                    # Run on web\n",[433,522,524],{"id":523},"testing-quality","Testing & Quality",[438,526,528],{"className":440,"code":527,"language":442,"meta":443,"style":443},"pnpm test                   # Run Jest tests with watch mode\npnpm lint                   # ESLint linting\npnpm check-types            # TypeScript type checking\npnpm format                 # Prettier formatting\npnpm format:check           # Check Prettier formatting\n",[406,529,530,540,550,560,571],{"__ignoreMap":443},[447,531,532,534,537],{"class":449,"line":450},[447,533,454],{"class":453},[447,535,536],{"class":457}," test",[447,538,539],{"class":461},"                   # Run Jest tests with watch mode\n",[447,541,542,544,547],{"class":449,"line":465},[447,543,454],{"class":453},[447,545,546],{"class":457}," lint",[447,548,549],{"class":461},"                   # ESLint linting\n",[447,551,552,554,557],{"class":449,"line":512},[447,553,454],{"class":453},[447,555,556],{"class":457}," check-types",[447,558,559],{"class":461},"            # TypeScript type checking\n",[447,561,563,565,568],{"class":449,"line":562},4,[447,564,454],{"class":453},[447,566,567],{"class":457}," format",[447,569,570],{"class":461},"                 # Prettier formatting\n",[447,572,574,576,579],{"class":449,"line":573},5,[447,575,454],{"class":453},[447,577,578],{"class":457}," format:check",[447,580,581],{"class":461},"           # Check Prettier formatting\n",[433,583,585],{"id":584},"database-environment","Database & Environment",[438,587,589],{"className":440,"code":588,"language":442,"meta":443,"style":443},"pnpm update-database-types  # Generate Supabase types\npnpm set-secrets            # Pull EAS environment variables\n",[406,590,591,601],{"__ignoreMap":443},[447,592,593,595,598],{"class":449,"line":450},[447,594,454],{"class":453},[447,596,597],{"class":457}," update-database-types",[447,599,600],{"class":461},"  # Generate Supabase types\n",[447,602,603,605,608],{"class":449,"line":465},[447,604,454],{"class":453},[447,606,607],{"class":457}," set-secrets",[447,609,610],{"class":461},"            # Pull EAS environment variables\n",[433,612,614],{"id":613},"eas-build-deployment","EAS Build & Deployment",[438,616,618],{"className":440,"code":617,"language":442,"meta":443,"style":443},"# Development builds\neas build --profile development\neas build --profile development-ios-simulator\n\n# Preview builds\neas build --profile preview\n\n# Production builds\neas build --profile production\neas build --profile production-preview\n",[406,619,620,625,639,650,656,661,673,678,684,696],{"__ignoreMap":443},[447,621,622],{"class":449,"line":450},[447,623,624],{"class":461},"# Development builds\n",[447,626,627,630,633,636],{"class":449,"line":465},[447,628,629],{"class":453},"eas",[447,631,632],{"class":457}," build",[447,634,635],{"class":476}," --profile",[447,637,638],{"class":457}," development\n",[447,640,641,643,645,647],{"class":449,"line":512},[447,642,629],{"class":453},[447,644,632],{"class":457},[447,646,635],{"class":476},[447,648,649],{"class":457}," development-ios-simulator\n",[447,651,652],{"class":449,"line":562},[447,653,655],{"emptyLinePlaceholder":654},true,"\n",[447,657,658],{"class":449,"line":573},[447,659,660],{"class":461},"# Preview builds\n",[447,662,664,666,668,670],{"class":449,"line":663},6,[447,665,629],{"class":453},[447,667,632],{"class":457},[447,669,635],{"class":476},[447,671,672],{"class":457}," preview\n",[447,674,676],{"class":449,"line":675},7,[447,677,655],{"emptyLinePlaceholder":654},[447,679,681],{"class":449,"line":680},8,[447,682,683],{"class":461},"# Production builds\n",[447,685,687,689,691,693],{"class":449,"line":686},9,[447,688,629],{"class":453},[447,690,632],{"class":457},[447,692,635],{"class":476},[447,694,695],{"class":457}," production\n",[447,697,699,701,703,705],{"class":449,"line":698},10,[447,700,629],{"class":453},[447,702,632],{"class":457},[447,704,635],{"class":476},[447,706,707],{"class":457}," production-preview\n",[293,709,711],{"id":710},"project-structure","Project Structure",[438,713,718],{"className":714,"code":716,"language":717},[715],"language-text","\u002F\n├── app\u002F                                          # Expo Router pages and layouts\n│   ├── onboarding\u002F                              # Onboarding\u002Fauth flow\n│   │   ├── _layout.tsx                          # Onboarding layout\n│   │   ├── index.tsx                            # Onboarding entry screen\n│   │   ├── steps.tsx                            # Onboarding steps\n│   │   └── tutorial.tsx                         # Onboarding tutorial\n│   ├── (tabs)\u002F                                  # Tab navigation group\n│   │   ├── library\u002F                             # Library tab\n│   │   │   ├── _layout.tsx                      # Library layout\n│   │   │   ├── index.tsx                        # Library main screen\n│   │   │   └── bin.tsx                          # Library bin\u002Ftrash\n│   │   ├── (profile)\u002F                           # Profile tab group\n│   │   │   ├── _layout.tsx                      # Profile group layout\n│   │   │   ├── index.tsx                        # Profile main screen\n│   │   │   ├── settings.tsx                     # App settings\n│   │   │   ├── goals.tsx                        # Learning goals\n│   │   │   └── feedback.tsx                     # Profile feedback screen\n│   │   ├── _layout.tsx                          # Tabs layout\n│   │   ├── create.tsx                           # Create new content screen\n│   │   ├── feedback.tsx                         # Main feedback screen\n│   │   └── index.tsx                            # Home\u002Fdashboard screen\n│   ├── study\u002F                                   # Study modes group\n│   │   ├── _layout.tsx                          # Study layout\n│   │   ├── index.tsx                            # Study main screen\n│   │   ├── quiz.tsx                             # Quiz mode\n│   │   ├── completed.tsx                        # Study completion\n│   │   └── cram.tsx                             # Cram study mode (static)\n│   ├── course\u002F[courseId]\u002F                       # Course detail screens (outside tabs)\n│   │   ├── _layout.tsx                          # Course layout (index + deck routes)\n│   │   ├── index.tsx                            # Course tabbed interface (overview, flashcards, quiz, ai-assistant)\n│   │   └── deck\u002F[deckId].tsx                    # Deck tabbed interface (flashcards, quiz, summary, ai-assistant)\n│   ├── upgrade\u002F                                 # Upgrade flow\n│   │   ├── _layout.tsx                          # Upgrade layout\n│   │   ├── index.tsx                            # Upgrade main screen\n│   │   └── welcome-premium.tsx                  # Welcome to premium screen\n│   ├── _layout.tsx                              # Root layout\n│   ├── index.tsx                                # App root\u002Fentry screen\n│   ├── modal.tsx                                # Modal screen\n│   ├── +html.tsx                                # Custom HTML root (web)\n│   └── +not-found.tsx                           # 404\u002Fnot found screen\n├── components\u002F                                  # Reusable React components\n│   ├── CourseOverviewContent.tsx                # Course overview tab content\n│   ├── CourseFlashcardsContent.tsx              # Course flashcards tab content\n│   ├── CourseQuizContent.tsx                    # Course quiz tab content\n│   ├── CourseAiAssistantContent.tsx             # Course AI assistant tab content\n│   ├── DeckFlashcardsContent.tsx                # Deck flashcards tab content\n│   ├── DeckQuizContent.tsx                      # Deck quiz tab content\n│   ├── DeckSummaryContent.tsx                   # Deck summary tab content\n│   ├── DeckAiAssistantContent.tsx               # Deck AI assistant tab content\n│   └── [other components...]                    # Other reusable components\n├── store\u002F                                       # Legend State stores\n├── api\u002F                                         # React Query hooks and API calls\n├── utils\u002F                                       # Utility functions and helpers\n├── hooks\u002F                                       # Custom React hooks\n├── types\u002F                                       # TypeScript type definitions\n├── assets\u002F                                      # Images, fonts, icons\n├── theme\u002F                                       # Theme configuration\n├── i18n\u002F                                        # Internationalization\n└── constants\u002F                                   # App constants\n","text",[406,719,716],{"__ignoreMap":443},[433,721,723],{"id":722},"route-examples","Route examples",[319,725,726,749,760,819,844,873],{},[322,727,728,729],{},"Onboarding",[319,730,731,737,743],{},[322,732,733,736],{},[406,734,735],{},"\u002Fonboarding"," - Onboarding entry screen",[322,738,739,742],{},[406,740,741],{},"\u002Fonboarding\u002Fsteps"," - Onboarding steps",[322,744,745,748],{},[406,746,747],{},"\u002Fonboarding\u002Ftutorial"," - Onboarding tutorial",[322,750,751,752],{},"Upgrade",[319,753,754],{},[322,755,756,759],{},[406,757,758],{},"\u002Fupgrade\u002Fwelcome-premium"," - Welcome to premium screen",[322,761,762,763],{},"Tabs (with tab bar navigation)",[319,764,765,771,777,783,789,795,801,807,813],{},[322,766,767,770],{},[406,768,769],{},"\u002F(tabs)"," - Home\u002Fdashboard screen",[322,772,773,776],{},[406,774,775],{},"\u002F(tabs)\u002Flibrary"," - Library main screen",[322,778,779,782],{},[406,780,781],{},"\u002F(tabs)\u002Flibrary\u002Fbin"," - Library bin\u002Ftrash",[322,784,785,788],{},[406,786,787],{},"\u002F(tabs)\u002Fcreate"," - Create new content screen",[322,790,791,794],{},[406,792,793],{},"\u002F(tabs)\u002F(profile)"," - Profile main screen",[322,796,797,800],{},[406,798,799],{},"\u002F(tabs)\u002F(profile)\u002Fsettings"," - App settings",[322,802,803,806],{},[406,804,805],{},"\u002F(tabs)\u002F(profile)\u002Fgoals"," - Learning goals",[322,808,809,812],{},[406,810,811],{},"\u002F(tabs)\u002F(profile)\u002Ffeedback"," - Profile-specific feedback screen",[322,814,815,818],{},[406,816,817],{},"\u002F(tabs)\u002Ffeedback"," - Main feedback\u002Fhelp screen",[322,820,821,822,836,839,840,843],{},"Course Screens (outside tabs, no tab bar)",[319,823,824,830],{},[322,825,826,829],{},[406,827,828],{},"\u002Fcourse\u002F[courseId]"," - Course tabbed interface (overview, flashcards, quiz, ai-assistant)",[322,831,832,835],{},[406,833,834],{},"\u002Fcourse\u002F[courseId]\u002Fdeck\u002F[deckId]"," - Deck tabbed interface (flashcards, quiz, summary, ai-assistant)",[837,838],"br",{},"Note: Individual tab routes like ",[406,841,842],{},"\u002Fcourse\u002F[courseId]\u002Foverview"," don't exist as separate routes.\nAll tab content is handled by the main course\u002Fdeck index files using extracted content components.",[322,845,846,847],{},"Study Modes",[319,848,849,855,861,867],{},[322,850,851,854],{},[406,852,853],{},"\u002Fstudy"," - Study main screen",[322,856,857,860],{},[406,858,859],{},"\u002Fstudy\u002Fquiz"," - Quiz mode",[322,862,863,866],{},[406,864,865],{},"\u002Fstudy\u002Fcompleted"," - Study completion screen",[322,868,869,872],{},[406,870,871],{},"\u002Fstudy\u002Fcram"," - Cram study mode (static route)",[322,874,875,876],{},"Other Routes",[319,877,878,884],{},[322,879,880,883],{},[406,881,882],{},"\u002Fmodal"," - Modal screen",[322,885,886,889],{},[406,887,888],{},"\u002F+not-found"," - 404\u002FNot found handler",[433,891,893],{"id":892},"route-notes","Route Notes",[298,895,896,899],{},[304,897,898],{},"Feedback Routes",": The app has two feedback routes serving different purposes:",[319,901,902,907],{},[322,903,904,906],{},[406,905,817],{}," - Main feedback\u002Fhelp screen accessible from the tab bar",[322,908,909,911],{},[406,910,811],{}," - Profile-specific feedback nested within the profile section",[298,913,914,917,918,921],{},[304,915,916],{},"Layout Hierarchy",": Each major section has its own ",[406,919,920],{},"_layout.tsx"," for proper navigation structure and screen organization.",[293,923,925],{"id":924},"key-features-flows","Key Features & Flows",[319,927,928,933,939,944,950,956,962],{},[322,929,930,932],{},[304,931,728],{},": Multi-step user setup with personalization",[322,934,935,938],{},[304,936,937],{},"Deck Creation",": AI-powered flashcard generation from various sources",[322,940,941,943],{},[304,942,846],{},": Flashcard review, cram mode, quiz mode",[322,945,946,949],{},[304,947,948],{},"AI Assistant",": Chat-based help and content generation",[322,951,952,955],{},[304,953,954],{},"Subscription",": Premium features with RevenueCat",[322,957,958,961],{},[304,959,960],{},"Workspaces",": Organization and collaboration",[322,963,964,966],{},[304,965,374],{},": Learning progress and statistics",[293,968,970],{"id":969},"important-files","Important Files",[319,972,973,979,985,991,997,1003,1009],{},[322,974,975,978],{},[406,976,977],{},"app.config.ts"," - Expo configuration with variant support",[322,980,981,984],{},[406,982,983],{},"eas.json"," - EAS Build configuration",[322,986,987,990],{},[406,988,989],{},"package.json"," - Dependencies and npm scripts",[322,992,993,996],{},[406,994,995],{},"tailwind.config.js"," - NativeWind\u002FTailwind CSS config",[322,998,999,1002],{},[406,1000,1001],{},"types\u002Fdatabase.types.ts"," - Generated Supabase types",[322,1004,1005,1008],{},[406,1006,1007],{},"utils\u002Fsupabase.ts"," - Supabase client configuration",[322,1010,1011,1014],{},[406,1012,1013],{},"utils\u002FhonoClient.ts"," - API client setup",[293,1016,1018],{"id":1017},"custom-packages","Custom Packages",[298,1020,1021],{},"The app uses several custom StudyFlash packages:",[319,1023,1024,1030,1036],{},[322,1025,1026,1029],{},[406,1027,1028],{},"@studyflash-ai\u002Fcommon"," - Shared utilities",[322,1031,1032,1035],{},[406,1033,1034],{},"@studyflash-ai\u002Flearning-service"," - Learning algorithms",[322,1037,1038,1041],{},[406,1039,1040],{},"@studyflash-ai\u002Ftypes"," - Shared type definitions",[293,1043,1045],{"id":1044},"development-notes","Development Notes",[433,1047,1049],{"id":1048},"git-repository","Git Repository",[319,1051,1052,1060],{},[322,1053,1054,307,1057],{},[304,1055,1056],{},"Main Branch",[406,1058,1059],{},"main",[322,1061,1062,1063,1066,1067,1070],{},"Use ",[406,1064,1065],{},"git status"," and ",[406,1068,1069],{},"git branch"," to check current branch and changes",[433,1072,1074],{"id":1073},"environment-setup","Environment Setup",[319,1076,1077,1080,1083,1086],{},[322,1078,1079],{},"Uses Expo development client (not Expo Go)",[322,1081,1082],{},"Requires EAS CLI for builds and updates",[322,1084,1085],{},"Supports iOS simulator and physical devices",[322,1087,1088],{},"Android requires development build",[433,1090,1092],{"id":1091},"code-style","Code Style",[319,1094,1095,1098,1101,1104],{},[322,1096,1097],{},"ESLint + Prettier configuration",[322,1099,1100],{},"TypeScript strict mode",[322,1102,1103],{},"Tailwind CSS classes via NativeWind",[322,1105,1106],{},"Component-based architecture with hooks",[293,1108,1110],{"id":1109},"debugging-monitoring","Debugging & Monitoring",[319,1112,1113,1119,1125,1131],{},[322,1114,1115,1118],{},[304,1116,1117],{},"Sentry",": Error tracking and performance monitoring",[322,1120,1121,1124],{},[304,1122,1123],{},"PostHog",": Analytics, feature flags, session replay",[322,1126,1127,1130],{},[304,1128,1129],{},"Expo Dev Tools",": Development debugging",[322,1132,1133,1136],{},[304,1134,1135],{},"React Query Dev Tools",": API state inspection",[1138,1139,1140],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}",{"title":443,"searchDepth":465,"depth":465,"links":1142},[1143,1144,1145,1146,1153,1157,1158,1159,1160,1165],{"id":295,"depth":465,"text":296},{"id":316,"depth":465,"text":317},{"id":396,"depth":465,"text":397},{"id":430,"depth":465,"text":431,"children":1147},[1148,1149,1150,1151,1152],{"id":435,"depth":512,"text":436},{"id":483,"depth":512,"text":484},{"id":523,"depth":512,"text":524},{"id":584,"depth":512,"text":585},{"id":613,"depth":512,"text":614},{"id":710,"depth":465,"text":711,"children":1154},[1155,1156],{"id":722,"depth":512,"text":723},{"id":892,"depth":512,"text":893},{"id":924,"depth":465,"text":925},{"id":969,"depth":465,"text":970},{"id":1017,"depth":465,"text":1018},{"id":1044,"depth":465,"text":1045,"children":1161},[1162,1163,1164],{"id":1048,"depth":512,"text":1049},{"id":1073,"depth":512,"text":1074},{"id":1091,"depth":512,"text":1092},{"id":1109,"depth":465,"text":1110},"md",null,{},{"title":140,"description":443},"apps\u002Fmobile-app\u002FCLAUDE","ZOCZv7Jq2bMUMdcBQlTcnbovQPdUdCGPh5urItamaD4",1779007962952]