[{"data":1,"prerenderedAt":534},["ShallowReactive",2],{"repo-tree":3,"repo-\u002Finternal\u002Fsupport-bot\u002Fkb":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":235,"body":285,"description":295,"extension":524,"lastReviewed":525,"meta":526,"navigation":530,"owner":525,"path":234,"seo":531,"status":525,"stem":532,"tags":525,"__hash__":533},"repo\u002Finternal\u002Fsupport-bot\u002Fkb\u002Findex.md",{"type":286,"value":287,"toc":509},"minimark",[288,292,296,301,306,337,341,355,359,403,407,427,431,439,443,463,467,475,479,482],[289,290,235],"h1",{"id":291},"knowledge-base-index",[293,294,295],"p",{},"This index lists all 19 KB categories available for targeted retrieval. Each category contains Problem\u002FSolution pairs that guide AI response generation.",[297,298,300],"h2",{"id":299},"categories","Categories",[302,303,305],"h3",{"id":304},"sensitive-categories-always-route-to-l2-human-review","Sensitive Categories (Always Route to L2 Human Review)",[307,308,309,321,329],"ul",{},[310,311,312,316,317],"li",{},[313,314,315],"strong",{},"subscription_cancellation"," (17 entries) - User wants to cancel their Studyflash subscription. Includes step-by-step cancellation instructions for web, iOS App Store, and Google Play Store. Also covers confirmation requests, accidental cancellations, and users who want to cancel but keep access until period ends. ",[318,319,320],"span",{},"SENSITIVE",[310,322,323,326,327],{},[313,324,325],{},"refund_request"," (13 entries) - User is asking for money back. Includes refund eligibility (only for web purchases within 14 days), App Store\u002FPlay Store refund redirects, partial refund scenarios, and responses for users outside refund window. Also handles \"I want my money back\" variations. ",[318,328,320],{},[310,330,331,334,335],{},[313,332,333],{},"billing_invoice"," (10 entries) - User needs invoice\u002Freceipt, has payment questions, or disputes charges. Includes how to download invoices from account settings, VAT\u002Ftax questions, unexpected charges, payment method issues, and billing cycle clarifications. ",[318,336,320],{},[302,338,340],{"id":339},"account-access","Account & Access",[307,342,343,349],{},[310,344,345,348],{},[313,346,347],{},"account_issues"," (18 entries) - Login problems, password resets, email changes, and account deletion requests. Covers Error 500 during login, \"account not found\", locked accounts, switching between email\u002Fsocial login, and GDPR deletion requests. Key pattern: if user can't access their account at all.",[310,350,351,354],{},[313,352,353],{},"technical_errors"," (15 entries) - App crashes, Error 500, blank screens, features not loading, and general \"something is broken\" reports. Covers browser cache issues, incognito mode troubleshooting, app reinstallation, and when to escalate to dev team. Key pattern: user reports something that should work but doesn't.",[302,356,358],{"id":357},"core-features","Core Features",[307,360,361,367,373,379,385,391,397],{},[310,362,363,366],{},[313,364,365],{},"flashcard_issues"," (19 entries) - Creating, editing, viewing, and deleting flashcards and decks. Covers \"how to create flashcards\" (web vs mobile), cards not generating, editing existing cards, merging decks, deck limits, and flashcard display problems. This is Studyflash's primary feature.",[310,368,369,372],{},[313,370,371],{},"podcast_issues"," (30 entries) - Creating AI-generated podcasts from study materials. Covers how to create podcasts (requires subscription + new deck creation), podcast not generating, audio quality issues, podcast limits per plan, and \"where is the podcast option\" questions. Premium feature.",[310,374,375,378],{},[313,376,377],{},"quiz_issues"," (9 entries) - Quiz generation and functionality. Covers how to create quizzes from decks, quiz not generating, wrong answers in quiz, quiz display issues, and quiz limit questions. Quizzes are generated from existing flashcard decks.",[310,380,381,384],{},[313,382,383],{},"summary_issues"," (14 entries) - AI-generated summaries from uploaded documents. Covers summary not generating, summary quality complaints, summary too short\u002Flong, formatting issues, and how to regenerate summaries.",[310,386,387,390],{},[313,388,389],{},"mindmap_issues"," (3 entries) - AI-generated mindmaps from study materials. Covers mindmap not generating, display issues, and export problems. Less common feature with limited KB coverage.",[310,392,393,396],{},[313,394,395],{},"video_issues"," (2 entries) - AI-generated video explanations. Covers video not generating and playback issues. Newer feature with minimal KB coverage.",[310,398,399,402],{},[313,400,401],{},"mock_exam_issues"," (0 entries) - Practice exam simulation feature. Currently a placeholder for future feature launch - no entries yet. Classify here if user asks about mock exams or practice tests.",[302,404,406],{"id":405},"content-language","Content & Language",[307,408,409,415,421],{},[310,410,411,414],{},[313,412,413],{},"content_upload"," (34 entries) - Uploading PDFs, PowerPoints, images, and other documents. Covers supported file formats, upload failures, file too large, scanned PDF issues, image quality problems, and \"why isn't my document processing\" questions. Critical path for all Studyflash features.",[310,416,417,420],{},[313,418,419],{},"language_issues"," (12 entries) - Output language problems. Covers flashcards\u002Fsummaries generated in wrong language, how to change language settings, mixed-language output, and language not available errors. Studyflash supports multiple languages for content generation.",[310,422,423,426],{},[313,424,425],{},"data_loss"," (7 entries) - User reports missing or disappeared content. Covers lost flashcards, deleted decks, content that \"vanished\", and recovery options. Often requires investigation or escalation.",[302,428,430],{"id":429},"subscription-pricing","Subscription & Pricing",[307,432,433],{},[310,434,435,438],{},[313,436,437],{},"subscription_info"," (17 entries) - Questions about plans, pricing, and features (NOT cancellation or refunds). Covers plan comparison, what's included in free vs premium, how to upgrade\u002Fdowngrade, student discounts, and feature availability questions. Use when user is asking about subscription details, not trying to cancel.",[302,440,442],{"id":441},"general-catch-all","General & Catch-all",[307,444,445,451,457],{},[310,446,447,450],{},[313,448,449],{},"general_how_to"," (17 entries) - General usage questions that don't fit specific feature categories. Covers \"how does Studyflash work\", navigation help, feature discovery, and broad \"how do I...\" questions. Use when the question is about general app usage rather than a specific feature.",[310,452,453,456],{},[313,454,455],{},"misunderstanding"," (0 entries) - User treats the support form as a chatbot or AI tutor (e.g., \"what is photosynthesis?\", \"explain this topic\"). These users should be directed to Max, the AI tutor available in their decks\u002Fcourses. No Problem\u002FSolution entries - just redirect.",[310,458,459,462],{},[313,460,461],{},"garbage"," (0 entries) - Meaningless input with no valid support request. Includes empty messages, random characters, keyboard mashing, single letters, or completely nonsensical text. Auto-close without response.",[297,464,466],{"id":465},"usage","Usage",[293,468,469,470,474],{},"Load category-specific content using ",[471,472,473],"code",{},"KBService.get_kb_content_by_category(category_name)",".",[297,476,478],{"id":477},"classification-guidance","Classification Guidance",[293,480,481],{},"When classifying user emails:",[483,484,485,491,497,503],"ol",{},[310,486,487,490],{},[313,488,489],{},"Intent over keywords",": Focus on what the user wants to accomplish, not just words they use",[310,492,493,496],{},[313,494,495],{},"Sensitive first",": If request touches cancellation, refund, or billing, use those categories even if other topics mentioned",[310,498,499,502],{},[313,500,501],{},"Feature-specific",": Match to the specific feature having issues (flashcard, podcast, quiz, etc.)",[310,504,505,508],{},[313,506,507],{},"Escalation signals",": Data loss, repeated failures, and angry users may need human attention regardless of category",{"title":510,"searchDepth":511,"depth":511,"links":512},"",2,[513,522,523],{"id":299,"depth":511,"text":300,"children":514},[515,517,518,519,520,521],{"id":304,"depth":516,"text":305},3,{"id":339,"depth":516,"text":340},{"id":357,"depth":516,"text":358},{"id":405,"depth":516,"text":406},{"id":429,"depth":516,"text":430},{"id":441,"depth":516,"text":442},{"id":465,"depth":511,"text":466},{"id":477,"depth":511,"text":478},"md",null,{"type":527,"total_categories":528,"total_entries":529},"index",19,237,true,{"title":235,"description":295},"internal\u002Fsupport-bot\u002Fkb\u002Findex","OQkjx6t66f-YG1CyMzQ48yVSbk5l-CGgaGXmqunxcjA",1779007964380]