Chat History — CFA Prep Web Database Migration
Context
- Project: CFA Prep Web (LeaPrep)
- Neon DB:
orange-dew-36244409 (Singapore region)
- Host:
ep-floral-feather-a1dkxdqo-pooler.ap-southeast-1.aws.neon.tech
- Database:
neondb
- Connection:
postgresql://neondb_owner:npg_sIjxtGZhFU26@ep-floral-feather-a1dkxdqo-pooler.ap-southeast-1.aws.neon.tech/neondb?sslmode=require
What was done
1. Vietnamese explanations added (169 questions)
- SAPP practice files: 11 files, 60 questions — all have Vietnamese explanations
- CFAI practice files: 11 files, 109 questions — all have Vietnamese explanations
- Each question has 2 collapsible callouts: Answer (EN) + 📖 Giải thích chi tiết (VI)
2. Database architecture designed
- Saved to
analyses/database-design.md and analyses/database-schema.md
- Core concept:
links table as mini graph database for hover preview + click navigation
- 12 tables total: subjects, modules, glossary_terms, formulas, questions, question_options, explanations, concepts, links, users, user_attempts, review_schedule
3. Neon DB inspected — existing state
- 13 old tables with data: subjects(10), modules(116), questions(1961), answers(5868), users(3), quiz_sessions(25), quiz_answers(30), levels(3)
- Questions stored as HTML (not markdown)
- Modules not properly linked to subjects
4. Schema migration executed
- All 13 old tables renamed to
*_old (archived, not deleted)
- 12 new tables created with proper schema
- Indexes created:
- links: 3 indexes (source, target, target_id)
- user_attempts: 3 indexes (user, question, user+date)
- review_schedule: 1 index (user+next_review)
- glossary_terms: GIN FTS index
- questions: GIN FTS index
5. TODO — Next step
- Write parser script to migrate CFA-Wiki markdown files → Neon DB
- Parse: subjects, modules, glossary_terms, formulas, questions, question_options, explanations, concepts, links
- Execute parser and verify data
New DB Schema (12 tables)
subjects (id, name, code, slug, level_id, display_order, description, color)
modules (id, subject_id, number, title, slug, content_md, content_html, los, summary, display_order)
glossary_terms (id, module_id, term, slug, definition_md, definition_html, formula_latex, los_ref, searchable_text)
formulas (id, module_id, name, latex, variables, description, category, display_order)
questions (id, module_id, source, source_number, question_md, question_html, correct_answer, difficulty, los_ref, tags, searchable_text)
question_options (id, question_id, label, content_md, content_html, is_correct, display_order)
explanations (id, question_id, language, content_md, content_html, why_correct, why_a, why_b, why_c)
concepts (id, title, slug, content_md, content_html, related_module_ids, tags)
links (id, source_type, source_id, target_type, target_id, target_slug, link_text, context)
users (id, email, display_name, avatar_url)
user_attempts (id, user_id, question_id, selected_answer, is_correct, time_spent_seconds, attempted_at)
review_schedule (id, user_id, question_id, next_review, interval_days, ease_factor, repetitions, last_reviewed)
Wiki source files
/Users/sophie/Desktop/CFA-Wiki/ — root
glossary/ — 11 glossary files (m01-m11)
formulas/ — 11 formula files
modules/ — 11 module content files
practice/ — 11 SAPP practice files
practice/cfai/ — 11 CFAI practice files
concepts/ — concept pages