Phase 0 — Mockups

MyNATCA Updates

Topic-based communication system with liveblog-style stories that accumulate updates over time — so a single story like "FAA Shutdown 2026" lives on one page with a running timeline instead of fragmenting across disconnected posts. Click any tile to view.

Branch: feature/updates-system-mockups · See docs/architecture/decisions/001-updates-system.md for the full spec.

Hub (Member-Facing)
Primary page

Stories Feed

Topic-filtered feed showing stories as cards with update counts, live indicators, and latest-update previews. The main browse experience at /updates.

View mockup →
Story / Liveblog

Story Thread View

Stable story headline + editor-maintained summary + pinned key points + chronological stream of timestamped updates. Think news liveblog. Reached via /updates/[slug].

View mockup →
Dashboard integration

Dashboard Card

Configurable card on the Hub landing page. Members pick which topics appear. Urgent posts always pin first.

View mockup →
Member settings

Subscription Preferences

Per-topic email subscription toggles. Clearly separated from Hub display filters.

View mockup →
Hub (Author-Facing)
Author workflow

Author Dashboard

Quick-find interface for admins. Search stories, filter by status/topic/author, click "+ Post Update" to append to an existing story instead of starting a new one.

View mockup →
Story editor

New Story Editor

Markdown editor for creating a new story + first update. Topic selector, urgent flag, story status, publish controls. Gated by grants.

View mockup →
Discord Fan-Out
Recommended

Announcement Channels

One Announcement channel per topic (#pay-benefits, #legislative, etc.). Stories are published embeds that the bot edits to stay current — edits sync to all following servers. Updates + discussion live in threads. Read-only broadcast discipline.

View mockup →
Single embed (reference)

Discord Embed — Regular

How a single story embed looks. Reference for the OP content that gets published and kept current via edits.

View mockup →
Urgent (reference)

Discord Embed — Urgent

Urgent story with @here, red border, action buttons. Same pattern, just with urgent styling.

View mockup →
Considered · Not recommended

Forum Channel (archived)

Forum channels have a better browse grid but can't be followed cross-server (Discord limitation). Kept as reference for the design decision.

View mockup →

What these mockups are for

This is Phase 0 of the Updates system — a visual spec before we write any functional code. The goal is to lock down the UI and interaction patterns so we can build the real Vue components (Phase 2) and Platform API (Phase 1) against a clear target.

Data model — Topic → Story → Update

Single announcements (like "Registration open for CFS conference") are just stories with one update. The data model is uniform.

Three member-facing concepts to keep separate

Urgent flag is orthogonal: pins to top of Hub regardless of filter, always posts to Discord, (future) always emails the full active-member list.

Editor: Tiptap (rich text) with markdown stored alongside

Authors use a Tiptap-based WYSIWYG editor — no markdown syntax required. Images drag-drop into Supabase Storage. Under the hood we store three formats per update: body_json (Tiptap canonical), body_md (derived, for Discord + portability), body_html (derived cache). See the author mockup for the toolbar and rich content area.

AI search via pgvector (built-in from Phase 1)

Every published update gets an OpenAI embedding stored in Supabase's pgvector. Members can eventually ask natural-language questions like "What's the latest on H.R. 4412?" and get synthesized answers with citations back to the source stories. Data starts accumulating from day 1; the search UI lands in Phase 5. See ADR 001 for the RAG flow.

Why liveblog-style stories?

The current fragmented approach creates multiple disconnected posts about the same topic (e.g., three separate emails about the same shutdown negotiation). Members can't find the latest state of a story, and older context is lost. A liveblog model — like MS.now, Guardian rolling coverage, or NYT live updates — keeps everything about a story on one page, so members always land on the canonical, up-to-date view.

Topics in v1

New topics can be added by inserting a row in updates.topics. The schema is fully extensible.