RiseMind has exactly two content types, and both are fully voiced — every affirmation and every quote has (or is meant to have) an MP3 in all 3 voices.
| Type | What it is | Schema fields |
|---|---|---|
| Affirmations | Short first-person present-tense statements, tagged by mood/tone/time-of-day, played on the home/check-in flow | id, text, category, mood, tone, goal, timeOfDay |
| Quotes | Attributed quotes from real historical/verified authors, tagged by category + mood/goal/tone/time arrays (a quote can match multiple moods) | id, text, author, category, moods[], goals[], tones[], timeOfDay |
Both are recorded via ElevenLabs across the same 3 voices: Adam (Dominant, Firm), Bella (Professional, Bright, Warm), Sarah (Mature, Reassuring, Confident). All current live and recorded audio uses the eleven_multilingual_v2 model (confirmed 100% via full history audit, zero remaining on the older eleven_turbo_v2 model — see Audio Production Status below).
The library naturally splits into three tiers by ID range and deployment status:
| Tier | Definition | Badge |
|---|---|---|
| LIVE | Exact IDs currently referenced by the production content-catalog.json served to the app. This is ground truth for "what ships today." | LIVE |
| PENDING | Written/QA'd content with schema complete, recorded or partially recorded, sitting below/around the live high-water mark but not yet wired into the live catalog. | PENDING |
| RESERVE | Future drop-calendar content — written and merged into the master JSON, but not recorded and not live. This is intentional backlog, not a gap. | RESERVE |
Source: https://risemind-audio.pages.dev/catalog/content-catalog.json (catalogVersion 1.0.1-audio-map-fix, last updated 2026-07-05). This is what the app actually fetches and plays — the single source of truth for "what's live."
| Mood | Count |
|---|---|
| motivated | 76 |
| stressed | 75 |
| overwhelmed | 72 |
| anxious | 69 |
| happy | 63 |
| low-energy | 56 |
| neutral | 56 |
| focused | 56 |
| grateful | 52 |
| tired | 13 |
| confident | 6 |
| calm | 4 |
Note: live-catalog mood labels differ slightly from the full-library schema (e.g. "low-energy"/"neutral"/"focused" appear here but not in the 10-mood full-library set below) — this is a known artifact of the repair/remap described in Known Issues. Tone labels in the live catalog also use different words (gentle/direct/logical/encouraging/calm/energetic) than the full library's 4-tone system (soft/spiritual/tough-love/logical) — again, a remap artifact, not two different schemas in active use.
| Category | Count |
|---|---|
| courage | 115 |
| growth | 104 |
| success | 91 |
| focus | 91 |
| peace | 90 |
| wisdom | 88 |
| love | 88 |
| strength | 85 |
eleven_multilingual_v2Audio CDN: https://risemind-audio.pages.dev (separate Cloudflare Pages project from the app itself — hosts only MP3s + the catalog JSON, deployed via wrangler pages deploy as full snapshots).
Source: constants/affirmation-data.json + constants/quote-data.json in the canonical repo (/Users/frikkie/.openclaw/workspace/projects/risemind-app/). This is the complete text/metadata library — includes all future drop-calendar content, most of which is intentionally not yet live.
| Mood | Count |
|---|---|
| Perfectly even — 397 per mood × 10 moods = 3,970 | |
| motivated / happy / anxious / stressed / tired / overwhelmed / calm / confident / grateful / energised | 397 each |
| Tone | Count |
|---|---|
| spiritual | 1,087 |
| logical | 1,087 |
| soft | 964 |
| tough-love | 832 |
| Time of Day | Count |
|---|---|
| morning | 1,234 |
| afternoon | 1,017 |
| night | 907 |
| evening | 812 |
| Category | Count |
|---|---|
| Perfectly even — 322 per category × 8 categories = 2,576 | |
| success / growth / courage / peace / focus / strength / wisdom / love | 322 each |
328 unique verified authors across the full quote library (see Author Policy below).
moods, goals, tones, timeOfDay fields entirely (only have id/text/author/category). These are RESERVE tier (not live), but must be backfilled before they can ever go live — the app's filter/recommendation logic depends on those fields. See Known Issues.
{
"id": "a0361",
"text": "I move through overwhelm one breath at a time.",
"category": "calm",
"mood": "overwhelmed",
"tone": "soft",
"goal": "wellbeing",
"timeOfDay": "night"
}
| Field | Allowed values |
|---|---|
mood | motivated, happy, anxious, stressed, tired, overwhelmed, calm, confident, grateful, energised (10 total — grateful/energised added Month 4) |
tone | soft, spiritual, tough-love, logical (4 total) |
timeOfDay | morning, afternoon, evening, night |
goal | wellbeing, discipline, career, confidence, relationships, fitness, performance, growth, vitality, achievement, productivity, mindset, resilience, clarity, gratitude, abundance (loosely used, wellbeing dominant) |
category | Broader theming tag (overlaps with mood in the full library) — e.g. calm, energised, resilience, healing, selfLove, focus, energy, sleep, strength, abundance |
{
"id": "q00453",
"text": "The impediment to action advances action.",
"author": "Marcus Aurelius",
"category": "wisdom",
"moods": ["calm", "focused"],
"goals": ["mindset"],
"tones": ["logical"],
"timeOfDay": "any"
}
| Field | Allowed values |
|---|---|
category | love, peace, wisdom, growth, courage, focus, success, strength (8 total — do not add new categories without an app schema update) |
moods, goals, tones | Arrays — a quote can match multiple moods/goals/tones, unlike affirmations which have single values |
| Tone | Character | Example |
|---|---|---|
| Soft | Gentle, validating, permissive | "It's okay to move slowly today." |
| Spiritual | Growth, higher self, purpose | "I am guided toward what serves me." |
| Tough-love | Direct, action-oriented, no excuses | "I don't wait to feel ready. I act, and readiness follows." |
| Logical | Evidence-based, systematic reframe | "Calm is not absence of difficulty; it is a deliberate choice." |
Night content rule: wind-down only, no action language. Frame around rest/release/tomorrow. E.g. "I did enough today. I am enough today."
Full plan authored June 2026. All text content for all 12 drops is written and merged into the full library JSON — audio recording and live deployment lag behind (see Audio Production Status). ID ranges below refer to the full-library numbering.
| Drop | Theme | New Scripts | New Quotes | Affirmation IDs | Quote IDs |
|---|---|---|---|---|---|
| Launch gap-fill | Moods / Night / Logical tone completion | 238 | 150 | a0361–a0598 | q00603–q00752 |
| Month 1 (T+30) | Audio Month — voice diversity showcase | 150 | 25 | a0599–a0748 | q00753–q00777 |
| Month 2 (T+60) | Author Series (Marcus Aurelius, Maya Angelou, Brené Brown, James Clear spotlight) | 50 | 100 | a0749–a0798 | q00778–q00877 |
| Month 3 (T+90) | Stoic Series — Goal Achiever persona, Adam voice featured | 100 | 75 | a0799–a0898 | q00878–q00952 |
| Month 4 (T+120) | New moods: Grateful + Energised introduced | 120 | 50 | a0899–a1018 | q00953–q01002 |
| Month 5 (T+150) | Mental Health theme — Anxiety Manager persona, Bella voice, no toxic positivity | 75 | 50 | a1019–a1093 | q01003–q01052 |
| Month 6 (T+180) | Mid-year motivation sprint | 50 | 50 | a1094–a1143 | q01053–q01102 |
| Month 7 (T+210) | Morning ritual deep dive (all 50 tagged morning) | 50 | 50 | a1144–a1193 | q01103–q01152 |
| Month 8 (T+240) | Night ritual / sleep prep (all 50 tagged night), Bella featured | 50 | 25 | a1194–a1243 | q01153–q01177 |
| Month 9 (T+270) | Resilience & tough-love, Adam voice, r/stoicism audience | 50 | 25 | a1244–a1293 | q01178–q01202 |
| Month 10 (T+300) | Community & love, UGC push, Bella/Sarah | 50 | 25 | a1294–a1343 | q01203–q01227 |
| Month 11 (T+330) | Reflection & gratitude (evening/night-heavy) | 25 | 0 | a1344–a1368 | — |
| Month 12 (T+365) | New Year reset — identity-building, NOT "new year new me" | 25 | 0 | a1369–a1393 | — |
Original 12-month plan total: 1,033 new affirmations + 625 new quotes (on top of the pre-launch base). The full library has since grown well beyond this original plan (3,970 affirmations / 2,576 quotes) via subsequent credit-driven balancing/expansion rounds not itemised in the original per-month calendar above — see next section.
When ElevenLabs character budget becomes available, the standard process is: (1) equalize thin mood/category buckets up to the current max, (2) flat per-bucket growth with remaining budget. This produced two confirmed expansion rounds:
| Round | Affirmations | Quotes | Result |
|---|---|---|---|
| Round 1 (~June 30) | 2,669 → 3,540 (Phase 1 balance) → 3,990 (Phase 2 flat +45/mood) | 1,924 → 2,232 (Phase 1) → 2,592 (Phase 2 flat +45/category) | 97.5% of usable ElevenLabs budget spent |
| Round 2 | → 3,970 (397/mood flat) | → 2,576 (322/category flat) | Current full-library state |
Note: these expansion counts are net of subsequent QA rejections/dedup passes — see Known Issues for QA gate details.
Competitor comparison (as of the original 12-month plan authoring): ThinkUp (0 quotes, user-recorded only), I Am (~500 quotes / ~800 scripts, basic TTS), Shine (~300 quotes / ~400 scripts, human voice, 5 moods) — RiseMind's moat is the mood × time-of-day × tone matrix combined with fully-verified quote authorship, which no competitor matches simultaneously.
eleven_multilingual_v2. Zero remain on the legacy eleven_turbo_v2 model. This resolved a previously-tracked partial migration where roughly half of quotes were still on the old model.
Note on "multilingual": eleven_multilingual_v2 is the name of the ElevenLabs TTS model (capable of 29 languages if fed non-English text) — it is NOT an indicator that RiseMind ships multi-language content. Every script and quote in the library is written in English. All audio, regardless of model, is English-language.
| Voice | ElevenLabs Voice ID | Character |
|---|---|---|
| Sarah | EXAVITQu4vr4xnSDxMaL | Mature, Reassuring, Confident |
| Bella | hpp4J3VqNfWAUOO0d1Us | Professional, Bright, Warm |
| Adam | pNInz6obpgDQGcFmaJgB | Dominant, Firm |
| Content type | In full library | Recorded (≥1 voice on disk) | Fully missing |
|---|---|---|---|
| Affirmations | 3,970 | 2,571 | 1,399 (a1772–a3970) |
| Quotes | 2,576 | 2,576 | 0 |
"Recorded" here means present on the Desktop MP3 working library (/Users/frikkie/Desktop/RiseMind Content/MP3s/) — this does not necessarily mean deployed to the live CDN. Only the 598+752 LIVE tier is confirmed deployed and HTTP-verified.
30% of monthly budget used · resets Aug 8, 2026
Cost formula: ~89 chars/affirmation × 3 voices ≈ 267 chars each. ~75 chars/quote × 3 voices ≈ 225 chars each. (Do not use the commonly-cited 120-char average — it overstates real cost by ~35%.)
| Location | Contents | Role |
|---|---|---|
constants/affirmation-data.json, constants/quote-data.json | Full library (text + metadata) | Canonical source, git-tracked, bundled into APK via static import |
constants/audio-manifest.json | List of 1,500 base-build MP3 filenames | Original launch manifest (pre gap-fill) |
/Users/frikkie/Desktop/RiseMind Content/MP3s/{affirmations,quotes}/{voice}/ | Working MP3 library | Recording output before CDN upload — has mixed filename conventions across recording batches (see Known Issues) |
https://risemind-audio.pages.dev | Live CDN — MP3s + catalog/content-catalog.json | What the app actually fetches/plays. Cloudflare Pages project, deployed via wrangler pages deploy as full snapshots (never a delta — partial deploys 404 out everything not included) |
/Users/frikkie/ObsidianVault/agent-shared/risemind-content-strategy-complete.md | Original full content strategy doc | Source-of-truth planning document behind this report |
constants/quotes.ts does a static import quoteData from './quote-data.json', bundled by Metro at build time. Only MP3 audio is remote. This means uploading new MP3s to the CDN alone does NOT make new content appear — any drop adding new IDs requires editing the bundled JSON + a full app rebuild + new APK, until a remote-fetch/catalog system is built into the app itself (content-side catalog exists and is verified; app-side fetch logic does not exist yet — that's Codex/engineering scope).
Known internet fabrications — banned, never use: Roy T. Bennett, Steve Maraboli, Robert Tew, T. Tolis, S.A. Jefferson-Wright, Ziad K. Abdelnour, Chris Grosser, Suzy Kassem, Shannon L. Alder, Mandy Hale, Astrid Alauda, George Addair, Robert Brault, Bryant McGill.
Verified real authors currently drawn from (partial list, 328 unique authors total in library): Marcus Aurelius, Seneca, Epictetus, Aristotle, Plato, Confucius, Lao Tzu, Rumi, Kahlil Gibran, Ralph Waldo Emerson, Henry David Thoreau, Viktor Frankl, Carl Jung, Maya Angelou, Nelson Mandela, Martin Luther King Jr., Brené Brown, James Clear, Ryan Holiday, Naval Ravikant, Albert Einstein, Mark Twain, and 300+ others — full list cross-referenced against Wikipedia/published works before use.
| Issue | Scope | Status |
|---|---|---|
365 quotes (q01228–q01632) missing moods/goals/tones/timeOfDay fields | Reserve tier, not live | Needs backfill before these can ever go live |
| 1,399 affirmations (a1772–a3970) not yet recorded in any voice | Reserve tier, not live | Recording backlog — budget available (426k chars remaining) |
| Live catalog affirmation labels (mood/tone) use different vocabulary than full-library schema | Live tier only | Documented remap in catalog's own repair metadata — not a defect, see catalog's repairSource field per entry |
| Personalization ranking bug (Boost→Stress could surface a Love-category quote) | App logic, not content | Fixed in source by Codex July 9 (AppContext.tsx) — pending rebuild + Pixel verification. 10 love+stressed quotes reviewed and judged NOT mislabeled (compassion/acceptance quotes, not romantic) — no content relabel needed for this fix |
| Cross-batch quote duplication risk | Process risk for future batches | Parallel quote-generation batches gravitate to the same famous lines (~17% dupe rate observed in one round) — requires a dedup pass after every batch, not just at the end |
| Voice intro/preview clips are bundled app assets, not CDN-served | Separate asset class | assets/audio_intros/{voice}-intro.mp3 via require() — re-recording these requires an app rebuild regardless of CDN state |
| LIVE / launch catalog | The exact content currently served by content-catalog.json — what a real user hears today |
| Full library | Everything ever written across all drops, live and future — the canonical JSON files |
| Recorded | Has an MP3 file present somewhere on disk — does not imply deployed/live |
| Drop-pending | Written + schema-complete but below/around the settled high-water mark, not yet wired into live catalog |
| Reserve | Future drop-calendar content, intentionally not live yet |
| Repair / remap | A documented historical fix where audio-file-ID-to-spoken-content mapping was corrected after an STT (speech-to-text) audit found drift — see catalog's own repair metadata block |