PRD v1.0 · Aug 22 2026 · wenmeet-prd.netlify.app
wenmeet — scheduling that shows its thinking
A when2meet-class scheduler where the AI's certainty is visible as motion: a living nebula that swirls fast when nothing is known, densifies with every response, and settles into a slow gold breath when the meeting locks. Deterministic under the hood, honest on the surface.
1 · The one principle
Motion is uncertainty made visible. The nebula is a certainty gauge, never a mascot. Open meeting → fast chaotic swirl (teal). Each acceptance adds mass and calm. Locked → slow breathing (gold). Conflict → amber flicker until re-locked. Every state the backend can be in has exactly one motion signature, so users read system state without reading text.
2 · v1 scope
Committed in the grill (round 1). CUJ ids reference the wireframe canvas.
| Ships v1 | CUJ | Notes |
|---|---|---|
| Core schedule loop | 1b–1d | Create → paint → propose → lock. Reveal pattern: 2b grid-anchored (answer lands on the winning cell; grid never leaves the screen). |
| Reschedule loop | 1e | Decline destabilizes the lock; re-compute reuses existing paints; history kept visible. |
| No-common-slot negotiation | 2f | AI names the cheapest flex ask; human sends it. Best-5 exit cut (depended on 2e, which is v2) — the only fallback is re-widening the window. |
| Add-after-lock | 2g | Calendar check on add; conflict routes to 1e. |
| Meeting-space graph | 1f | Star + attendee nodes, co-location halos, drag physics, semantic drop zones, artifact squares. |
| Mobile invitee | 2d | One-day-per-screen thumb paint; long-press = if-need-be; ≥44px targets. |
| Landing page | 1g | Team-voices nebula hero; features told as the three states. |
Deferred
| Item | Target | Why |
|---|---|---|
| Keep-partial / async contract (2e) | v2 | Needs recap + task plumbing. |
| Recurring series (2h) | v2 | Per-occurrence orbs build on a stable single-lock loop. |
| Breakout blobs (t3) | v2 — groundwork in v1 | See v2 setup and the media-layer decision. |
| Invitee conflict nudges (1C-3) | v1.1 | Guests have no OAuth in v1; organizer-side nudges only. |
3 · Success metrics & non-goals
- Lock quality (primary): a lock counts as successful only if all tagged decision-makers attend and, for meetings with >3 invitees, ≥50% of invitees attend.
- Quorum is a soft rule: scoring heavily weights DM presence + attendance ratio, but the AI may propose below-quorum with an explicit warning chip.
- Secondary: time-to-lock < 24h median; invitee response rate ≥80%; zero silent reschedules (every change is announced with history).
- Non-goals v1: being a video-call product (blobs are v2 and the media layer is deferred), replacing calendars (we write to Google, we don't render a calendar app), chat/LLM personality (the AI writes nothing free-form — see scoring).
4 · Team & timeline — Fast plan
Chosen in round 2: 4 eng + 1 designer + motion contractor · v1 in 6 weeks. (Alternatives logged: Lean 2-eng/10-wk; Balanced 3-eng/8-wk.)
| Weeks | Workstream |
|---|---|
| 1–2 | Core loop (1b–1d) + deterministic scoring engine + Supabase schema; guest-token auth. |
| 2–3 | 2b grid-anchored reveal; realtime orb channel; Resend invite/reveal emails. |
| 3–4 | Reschedule (1e), negotiation (2f), add-after-lock (2g); Google Calendar write + decline webhooks. |
| 4–5 | Meeting-space graph (1f) + mobile invitee (2d) in parallel. v2 media spike starts wk 4 (Daily vs LiveKit prototypes in the graph). |
| 5–6 | Landing (1g), motion contractor pass on all nebula states, hardening, launch. Wk 6: media-layer decision (see Integrations §4). |
5 · Document map
Product PRD
Personas, CUJ specs with acceptance criteria, nebula state machine, reveal spec, privacy model, v2 blob groundwork.
Backend Infrastructure PRD
Netlify + Supabase architecture, data model, API surface, scoring engine, realtime, auth, security & retention.
Integration PRD
Google Calendar OAuth + webhooks, Resend email flows, magic-link claim, v2 media-layer evaluation.
Decision Log
Every decision, its source (grill round or assumed), and status. Nothing in this PRD is undecided.