announcementslisted
Install: claude install-skill meanllbrl/dreamcontext
# Announcements — author a release's "What's New" story
An announcement is a **story**: a JSON landing page rendered by
`AnnouncementStory.tsx` as a scrolling page of screenshots and short copy, in the
app's own type and colours.
It is **not** markdown, and (since 0.22) **no longer an Excalidraw board**. A
board had to be panned and zoomed to read, and could only ever draw a *picture
of* the product. A story shows the product: you drive the real dashboard, take
the shot, and write two lines next to it.
**Two rules carry everything else:**
1. **One announcement per version.** The feed is a release history, not a feature
stream. A version that shipped three things is three BLOCKS in one story —
never three entries. `parseAnnouncements` enforces it: `version` is required,
and a second entry claiming the same version is silently dropped.
2. **Every claim gets a screenshot** — or a clip, if the thing IS motion — or it
doesn't go in.
## Where everything lives
Everything for a release is named after it — `id` IS the version slug
(`0.22.0` → `v0-22-0`), and the story and its shots follow:
| Thing | Path |
|---|---|
| Story document (the deliverable) | `dashboard/public/announcements/v0-22-0.json` |
| Screenshots | `dashboard/public/announcements/shots/v0-22-0/<name>.png` |
| Clips + their posters | `dashboard/public/announcements/clips/v0-22-0/<name>.mp4` + `.png` |
| Manifest (metadata + unread tracking) | `dashboard/public/announcements.json` |
| Capture scripts