> Status: 5 GEMS incubated 2026-05-13. User said "unimpressive + immature".
> This audit identifies what's missing and proposes a 2-week maturity sprint.
---
| GEM | URL | Files present | Audio | Manifest | SW (PWA) |
|---|---|---|---|---|---|
| heartprint | /apps/heartprint | index.html · audio.mp3 · manifest | ✓ | ✓ | — |
| griefroom | /apps/griefroom | index.html · 3 audio files · manifest | ✓ | ✓ | — |
| dreamfeed | /apps/dreamfeed | index.html · audio.mp3 · manifest | ✓ | ✓ | — |
| pulsepoem | /apps/pulsepoem | index.html · poem-2026-05-13.mp3 · manifest | ✓ | ✓ | — |
| silent | /apps/silent | index.html · manifest · sw.js | — | ✓ | ✓ |
Files were ALL generated 2026-05-13 at ~20:00 UTC. None has been re-generated since.
Without reviewing each app live, the most common immaturity signals across rapid-incubated apps are:
1. Single-shot content: each app has the day-1 generation but no daily refresh — content goes stale fast
2. No empty / loading / error states: pages assume happy path
3. No persistent state: users can't save, return, share their session
4. No social loop: no share button, no public archive of past pieces
5. No clear value prop above the fold: visitors hit it without knowing what they get
6. Mobile layout untested: looks fine on desktop, broken on phone
7. No analytics: zero feedback on what's resonating
Day 1–2: One-page maturity checklist applied to each GEM
Day 3–4: Daily content refresh cron per GEM
titan-gems-daily-refresh (already has scaffolding; needs wire-up)Day 5: Analytics
view, play, share, archive_browseDay 6–7: Email capture per GEM
titan-email-capture Lambda already supports per-app taggingDay 8–9: Public archive page per GEM
/apps/<gem>/archive/ lists past 30 days with thumbnail + dateDay 10: A/B test the headline
If after the maturity sprint a single GEM shows:
→ Double down on that one. Kill the others. Build it into a full PRISM-tier studio.
---
| GEM | Quick read | First fix |
|---|---|---|
| heartprint | 21 KB HTML, 482 KB audio. Probably a single-page heart-rate-to-music visualizer. Likely lacks a why-care hook. | Add a 5-second auto-play demo above the input |
| griefroom | 21 KB HTML, 3 audio files (108+76+88 KB). Audio split implies a multi-stage flow — uncommon UX, may confuse. | Combine into one 5-min ambient track; add a "stay for 5 min" timer |
| dreamfeed | 22 KB HTML, 307 KB audio. Likely a dream interpretation app. Will fail without daily new content. | Wire to daily Veo3 video; archive past 14 dreams browsable |
| pulsepoem | 25 KB HTML (largest), per-date poem MP3 (91 KB). Already has dated content — closest to mature. | Public RSS feed + Twitter auto-post the daily poem |
| silent | 16 KB HTML + service worker (.sw.js). PWA already enabled — only GEM with offline mode. | Most "ready" of the 5; focus first refinement here |
---
1. Pulsepoem first — closest to mature, has dated content
2. Silent second — PWA-ready, lowest friction to ship
3. Dreamfeed third — needs the daily-refresh wire-up
4. Heartprint + Griefroom — last; both need UX rethink
---
This is queued under #gems-overhaul for the next focused work block.
Estimated effort: 15–20 hr for the full 2-week sprint.
Recommended kick-off: after Beehiiv migration ships (since the newsletters
will start surfacing the GEMs to a larger audience and we want them tight first).