Section-level temporal drawers for any HC page. Real-time multi-user annotation, approval, and change tracking — on the published artifact itself.
Every HC page published via NowPage can optionally enable Pulse — a per-section collaboration layer. Collapsed by default, expandable to reveal: collaboration notes, change history, approval state, and input for new reactions. Multi-user, real-time, structured data.
Core principle: The page IS the collaboration surface. Not a separate doc. Not a comment thread. The published artifact carries its own provenance, reactions, and approval state.
Jason is on an alignment call building a brief live on NowPage. The client isn't just watching — they click a section and type "this isn't quite right — we want X." Jason sees it in real time, adjusts. The client marks the section "approved." At the end, the brief IS the deliverable — annotated, approved, with full provenance. The client shares it. Their partner adds notes. The document keeps evolving.
This is not comments on a page. This is a new category of document — a living surface where content, collaboration, and data converge.
Published HC Page (any NowPage domain)
│
├── Section 1: [content] △ 3 notes
│ └── [drawer: collapsed by default]
│ ├── Summary line (auto or manual)
│ ├── Recent notes (last 3-5)
│ ├── Input field + mic button
│ └── [expand: full history with timestamps]
│
├── Section 2: [content] ✓ approved
│ └── [drawer]
│
└── Section N: [content] ? 1 question
└── [drawer]
↓ all data flows to ↓
Supabase (page_collaboration table)
│
├── Real-time subscriptions (live updates)
├── REST API (query, push, reconcile)
└── Webhooks (on note/approval → external systems)
├── → Forge (reconciliation)
├── → CRM (lead engagement)
└── → Analytics (section-level metrics)
| Component | Role |
|---|---|
| NowPage Publisher | Injects Pulse JS into pages with collab: true metadata |
| Supabase | Stores notes, approvals, history. Real-time subscriptions. |
| NowPage API | Exposes collab data per page (dashboards, analytics, export) |
| Pulse Widget JS | Client-side: drawer UI, name entry, note input, mic, realtime sync |
| Mode | Behavior | Use Case |
|---|---|---|
internal | Timestamps at first expand | Planning/working docs |
external | Timestamps behind second expand | Client deliverables |
locked | Read-only, no new input | Archived/finalized pages |
| Action | What | Data |
|---|---|---|
| Note | Free-text reaction | page, section, author, content, timestamp |
| Approve | Mark section accepted | page, section, author, type="approve" |
| Question | Flag needs clarification | page, section, author, type="question", content |
| Needs Work | Flag needs revision | page, section, author, type="needs_work", content |
| Voice Note | Speech-to-text | page, section, author, content (transcribed), type="voice" |
v1: Name entry on first visit. localStorage. No login. Good for 2-10 people.
v2: Optional NowPage account. Persistent identity. Avatar. Notifications.
Notes → Summarize (aggregate per section) → Push (send to Forge, CRM, webhook) → Implemented (ref back to what changed).
Status lifecycle: draft → pushed → implemented
Meta-page per domain: all notes across all pages, grouped by section. Stats, canonical log, filter by page/author/status/date. Auto-refreshes.
-- Core collaboration table CREATE TABLE page_collaboration ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, domain TEXT NOT NULL, page_slug TEXT NOT NULL, section TEXT NOT NULL, author TEXT NOT NULL, type TEXT DEFAULT 'note', -- note|approve|question|needs_work|voice content TEXT DEFAULT '', parent_id UUID REFERENCES page_collaboration(id), -- threaded replies v2 created_at TIMESTAMPTZ DEFAULT NOW() ); -- Summary + push tracking CREATE TABLE page_collaboration_summaries ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, domain TEXT NOT NULL, page_slug TEXT NOT NULL, section TEXT NOT NULL, summary TEXT NOT NULL, note_ids UUID[], status TEXT DEFAULT 'draft', -- draft|pushed|implemented|rejected pushed_to TEXT, pushed_at TIMESTAMPTZ, implemented_at TIMESTAMPTZ, implemented_ref TEXT, created_by TEXT, created_at TIMESTAMPTZ DEFAULT NOW() );
page_collaboration Supabase table with RLS + realtimeDone: Widget drops onto any HC page, collaboration works multi-user real-time.
collab: true flag to NowPage page metadataDone: Pages with collab: true auto-include Pulse.
Done: Full note → summary → pushed → implemented lifecycle.
Done: Publishers have actionable per-section engagement data.
| Component | Monthly |
|---|---|
| Supabase (free tier sufficient for v1) | $0 |
| Realtime connections (200 concurrent free) | $0 |
| Widget hosting (CDN or bundled) | $0 |
| LLM summarization v2 | ~$0.01/summary |
| Total v1 | $0/mo |
page_collaboration table in Supabase with RLS + realtimecollab: true auto-include widget