============================================================
 LearnWithBitto.com - Product Track Content Packs
 How to add a new module WITHOUT rebuilding the site
============================================================

WHAT THIS IS
------------
Modules 21-27 (BitMart Card, Prediction Markets, RWA, Earn, Yield, Wallet,
Beacon X) are compiled into the site's code and need a full rebuild to
change. Starting with this update, the Products track can ALSO load new
modules at runtime from plain JSON files - no code, no npm, no vite build,
no touching app.js or node_modules. You just drop files into a folder on
the server and the module appears.

This is for: new BitMart product modules, and partner/sponsor educational
content, that you want to publish without waiting on a full site rebuild.

WHERE CONTENT PACKS LIVE ON THE SERVER
---------------------------------------
  /home/loveqbyx/learnwithbitto.com/public/products/content/
    manifest.json          <- list of every dynamic module (see below)
    module28/
      en.json               <- lessons + quizzes, English (required)
      fr.json                <- optional - missing = falls back to English
      zh.json                <- optional
      ru.json                <- optional
      vi.json                <- optional
      es.json                <- optional
      pt.json                <- optional
    module29/
      en.json
      ...

Nothing else on the server is touched. This folder is never wiped by a
normal site deploy zip (those only replace app.js/seo.js/public/products/
assets + index.html), so content packs persist across every future deploy.

STEP-BY-STEP: ADDING A NEW MODULE
----------------------------------
1. PICK THE NEXT ID
   Modules 21-27 are taken. The next free id is 28, then 29, 30, etc.
   Never reuse an id already used by an existing module.

2. WRITE THE ENGLISH CONTENT FILE - module{ID}/en.json
   Shape:
   {
     "lessons": {
       "28-1": { "title": "...", "bittoIntro": "...", "content": "markdown text with ## headers" },
       "28-2": { "title": "...", "bittoIntro": "...", "content": "..." }
     },
     "quizzes": {
       "28-1": [
         {
           "id": "28-1-q1",
           "type": "multiple-choice",
           "question": "...",
           "options": ["...", "...", "...", "..."],
           "correctIndex": 0,
           "explanation": "...",
           "bittoWrongResponse": "..."
         }
       ],
       "28-2": [ ... ]
     }
   }
   - Mini-module ids are "{moduleId}-{n}", starting at 1.
   - "type" is one of: "multiple-choice", "true-false", "scenario".
   - Aim for 5-7 quiz questions per mini-module, matching the existing
     modules' tone: a short bittoIntro teaser, ## section headers in the
     lesson body, one blockquote making the key point, and a closing
     disclaimer line ("This content is educational and not financial
     advice...").

3. (OPTIONAL) ADD TRANSLATIONS
   Copy en.json to fr.json / zh.json / ru.json / vi.json / es.json /
   pt.json and translate the "title", "bittoIntro", "content", and quiz
   text. Any language file you skip, or any mini-module id missing from
   one you do add, automatically falls back to the English version - the
   site never breaks or shows blank content for a missing translation.

4. ADD ONE ENTRY TO manifest.json
   manifest.json is a JSON array of every dynamic module. When you add a
   module, APPEND a new object to the array - do not replace the whole
   file with just the new module, or you will remove previously published
   ones. Shape of one entry:
   {
     "id": 28,
     "title": "Full Module Title",
     "shortTitle": "Short Title",
     "subtitle": "One-line hook shown on the card",
     "description": "One or two sentences shown on the module page.",
     "icon": "🎓",
     "image": "/images/products/partner/example.png",
     "miniModules": [
       { "id": "28-1", "title": "First Mini-Module Title", "quizCount": 6 },
       { "id": "28-2", "title": "Second Mini-Module Title", "quizCount": 6 }
     ],
     "badge": {
       "id": "partner-example",
       "name": "Badge Name",
       "icon": "🏅",
       "description": "One sentence describing what earning this badge means."
     },
     "visualizerTitle": "",
     "cta": {
       "headline": "Call-to-action headline shown under the lessons.",
       "deeplinks": ["https://www.bitmart.com/en-US"]
     },
     "disclaimers": [
       "Educational content. Not financial advice."
     ],
     "ready": true,
     "partner": {
       "name": "Partner Co. Name",
       "logo": "/images/products/partner/logo.png",
       "url": "https://partner-website.example"
     },
     "i18n": {
       "fr": { "subtitle": "...", "desc": "...", "badgeName": "...", "badgeDesc": "..." },
       "zh": { "subtitle": "...", "desc": "...", "badgeName": "...", "badgeDesc": "..." }
     }
   }
   Notes on fields:
   - "visualizerTitle": leave as "" (empty string) unless a developer has
     built a bespoke interactive tool for this module in code. Content-only
     modules simply won't show the "Interactive Tools" button - that's
     expected and fine.
   - "partner" is optional - omit it entirely for BitMart's own modules.
     When present, an "In partnership with {name}" chip shows on the card
     and the module page.
   - "i18n" is optional - only the four short display strings (subtitle,
     desc, badgeName, badgeDesc) go here, one object per language you want
     to localize. The lesson/quiz translations themselves live in the
     module's own fr.json/zh.json/etc, not here.
   - "image" and "partner.logo" are paths under public/, e.g. upload the
     image file to public/images/products/partner/ alongside the content
     pack and reference it with a path starting with /images/....

5. UPLOAD VIA cPANEL FILE MANAGER
   Upload module28/ (with its .json files) and the updated manifest.json
   into:  /home/loveqbyx/learnwithbitto.com/public/products/content/
   If you added an image, also upload it under public/images/products/....
   No restart needed - these are static files served immediately.

6. VERIFY
   Hard-refresh https://learnwithbitto.com/products/ (Cmd+Shift+R /
   Ctrl+F5) and confirm the new module card appears, opens, and its
   mini-modules, quizzes, and languages all work.

WHAT STAYS THE SAME
--------------------
- Modules 21-27 are untouched by any of this - they keep working exactly
  as before, compiled into the site as always.
- Badges, quiz pass/fail, and progress tracking work identically for
  content-pack modules - no special handling needed on your end.
- A normal full-site deploy zip (public/products/ rebuild) never removes
  this content/ folder, so content packs survive future rebuilds too.
