# Silver course data

Static course content used by `lib/silverCourse.js` (lesson dispatch) and
`lib/silverAgent.js` (RAG Q&A). All files in this directory are committed to
the repo and shipped with the bot.

## `lessons.json` — 30-day catalog (ECO-27)

Schema:

```jsonc
{
  "course":    "Silver — 30-Day Job Hunt Reset",
  "timezone":  "Europe/Zurich",
  "lessons": [
    {
      "id":               "L01",            // stable identifier — never reuse
      "day":              1,                // 1..30
      "week":             1,                // 1..4
      "module":           1,                // 1..4 — drives Module-1 unlock gate (ECO-15/38)
      "title":            "...",
      "lessonProvider":   "hotmart",        // only Hotmart supported (Thinkific removed)
      "videoUrl":         "_todo:hotmart-url",  // ⚠️ replace with real Hotmart URL before launch
      "providerLessonId":  null,            // Hotmart lesson id (optional, for future webhook matching)
      "transcriptFile":   "L01.txt",        // file in transcripts/ — seeded to OpenAI vector store
      "weeklyGoalText":   "..."             // optional, only on the last day of each week
    }
  ],
  "templates": [
    { "id": "...", "title": "...", "url": "..." }
  ]
}
```

### Module → day mapping

| Module | Days | Theme |
|---|---|---|
| 1 | 1–7 | Career Direction + CV v1 + first applications |
| 2 | 8–14 | CV v2 + LinkedIn + Application System |
| 3 | 15–21 | Smarter Targeting + Outreach + Networking |
| 4 | 22–30 | CV v3 + Interview Mastery + Negotiation |

**Module 1 is the coach-gate** — once a user completes L01–L07,
`silverStore.maybeMarkModule1Complete()` flips `accessLevel` from
`course_only` → `dossier_pending`. The user then surfaces in the admin
dashboard (ECO-38) for the coach to trigger dossier collection.

### How to fill the real Hotmart URLs

1. Open Hotmart course admin → Module → Lesson, copy the player URL.
2. Replace `"videoUrl": "_todo:hotmart-url"` with the real URL.
3. (Optional) Set `providerLessonId` to the Hotmart lesson ID if Hotmart
   exposes a completion webhook we want to wire up later.

Until the URLs are filled, `silverCourse.sendLesson()` will send the literal
string `_todo:hotmart-url` in the message body — useful as a smoke test in
dev, but **must be replaced before any real cohort starts.**

## `tasks.json` — task probe registry

Drives weekly check-ins and day-end task probes. See `silverCourse.js`
`maybeWeeklyCheckin()` and `maybeDayEndTaskProbe()` for usage.

## `transcripts/` — RAG corpus (ECO-9)

One `LXX.txt` per lesson. Seeded into an OpenAI vector store via
`scripts/seed-silver-vectors.js`. The vector store ID is written to
`data/silver/.vector-store-id` (gitignored — local only).

Stub transcripts use the header `[STUB — replace with Whisper transcript
when video lands]` so the agent can disclaim if asked very specific
questions. Replace each stub with a real transcript (Whisper / Lemonfox)
once the video is recorded.

## `faq.md` — supplementary RAG corpus

Hand-written FAQ entries also seeded to the vector store.

## `templates/` — template asset metadata

Currently a README only. Real template files live on
`vianexu.com/clients/ecobe/templates/` and are referenced by URL from
`lessons.json[].templates[].url`.
