cocottetech/@platform/codebase/@features/ai-copilot/docs/calendar-drawer.screen.md
natalie 1b719e1fd7 chore(bootstrap): initial V4 commit
Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac
working tree at ~/Code/@projects/@cocottetech/. node_modules and build
artifacts excluded via .gitignore.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 08:11:41 -07:00

7.5 KiB
Raw Blame History

Calendar drawer · screen

The weekly/monthly view over content_plans — every post Cocotte has drafted, scheduled, or run, across all surfaces. Pairs with brief B §B1 (drawer spec), brief A (chat-card swipe-approve semantics inherited here), brief R (tour pages render as plan tiles), brief F §F5 (24-surface color-coding inherits here — every tile borrows its surface's accent).

Voice register: working on tile bodies and conflict surfaces · hearth on the empty state.

Layout (iPhone, week view default)

┌────────────────────────────────────────┐
│  ←   Calendar              [W] [M]  ⋯  │
├────────────────────────────────────────┤
│  May 11  17 · this week        ◀  ▶   │
├────────────────────────────────────────┤
│  Mon 11                                │
│   09:00 ◉ OF   "morning tease"     ▸   │
│   13:00 ◉ X    cross-post of ↑     ▸   │
│   21:00 ◉ OF   PPV drop (drafted)  ▸   │
│  Tue 12                                │
│   11:00 ◉ Tryst  tour-tease Berlin ▸   │
│   18:00 ◌ IG    (draft, hold)      ▸   │
│  Wed 13   — Berlin tour begins —       │
│   ╭──────────────────────────────╮     │
│   │ R · tour leg · Berlin Oct 37│     │
│   │ 4 announcements simmering    │     │
│   ╰──────────────────────────────╯     │
│  Thu 14                                │
│   (no plans)                           │
│  Fri 15                                │
│   20:00 ◉ OF   weekend drop        ▸   │
│  Sat 16 · Sun 17 — vacation —          │
│    auto-actions paused                │
├────────────────────────────────────────┤
│  [ + plan ]   strategist · draft week  │
└────────────────────────────────────────┘

Month view collapses each day to a row of surface dots (one per planned tile, colored per F5). Tapping a day expands inline to the week-row treatment above.

Components

Component Source brief Notes
Drawer chrome (back, title, ⋯ overflow) B SwiftUI full-height sheet, swipe-down dismiss, returns to chat scroll.
Week/Month toggle [W][M] B §B1 Segmented control; persists per-user.
Date-range header + chevrons B §B1 Tap to jump (month picker on long-press).
Day section header B §B1 Inline tour/vacation badges per R, H.
Plan tile (row) A swipe-cards Surface dot (F §F5 color), time, surface name, title, status glyph.
Tour-leg block R Spans Wed-Sun of leg; tap → tour-leg-detail screen.
Vacation strip H §H1 Greys the day, suppresses bump-policy tiles.
+ plan / strategist-draft FABs B §B1, L strategist Primary = new plan; secondary = "draft a week" prompt to strategist.
Conflict chip (on tile) brief K + H Renders ⚠ when tile collides with vacation or tour blackout.

States to render

  1. Week view default — current week, mixed plan tiles + day headers.
  2. Month toggle — calendar grid, each day shows up to 5 surface dots; overflow indicator (+3).
  3. Empty — no plans in the window: hearth-register prompt to strategist.
  4. Drag-to-reschedule (web companion only — see G1) — tile lifts under cursor, drop targets highlight; mobile uses tap-to-edit.
  5. Plan-tile expanded — tap a tile inline-expands to show draft body, asset thumbnail, surface, scheduled-by, swipe-approve affordance.
  6. Conflict-with-vacation — tile shows ⚠ + working-register inline note; approval blocked until Quinn resolves.
  7. Locked-by-active-tour — tiles inside a live tour-leg get a 🔒 dot and "managed by tour producer" subline; edits route through R.
  8. Multi-plan-cluster — 3+ tiles within 15 minutes get visually collapsed into a single "cluster" row that expands on tap (prevents N1 surface stack overflow per H §H5).
  9. Cold-load skeleton — shimmered day rows; no chrome flicker.
  10. Offline — last-cached view rendered with thin banner: "showing what we had — last synced 12m ago"; approve-buttons disabled.

Gestures

  • Swipe-right on plan tile: approve in place (same semantics as chat approval cards, brief A).
  • Swipe-left on plan tile: set aside (hold draft; does not delete).
  • Drag-to-reschedule (web companion only, per G1): pick-up + drop on a different day/timeslot; iOS uses tap-to-edit time sheet instead (touch-target pressure).
  • Tap on plan tile: inline expand (state 5).
  • Tap on expanded tile body: opens plan-edit drawer (drawer-on-drawer; B §B1 back-stack of one).
  • Long-press on plan tile: enter multi-select; bulk actions = "approve all" / "set aside all" / "reschedule cluster".
  • Pinch on week header: toggle to month view (alt path to [M]).

In-the-wild copy

Empty state (hearth):

No plans yet. Want strategist to draft a week?

Plan-tile expanded body (working):

OnlyFans · 21:00 · PPV drop "weekend tease". Drafted by producer. Approve to schedule, edit before, or set aside.

Conflict-with-vacation tile (working, leans plain):

This drops Sat 16 — your vacation runs Sat-Sun. Move to Fri or hold until Mon?

Locked-by-active-tour tile (working):

Tour producer holds this one — Berlin leg, day 2. Edit in the tour drawer.

Edge cases

  • Cross-midnight tile — a plan scheduled 23:50 Mon for a 00:10 Tue cross-post: renders on both day-headers with a thin link line; approval applies to the whole cluster.
  • Surface paused mid-week — tiles for that surface grey out but stay visible (don't disappear); footer note: "Tryst is paused — tiles will run when you resume."
  • Strategist-drafted week pending review — banner above day rows: "Strategist drafted 7 plans for next week — review batch." Tap → batch-approval sheet.
  • Plan referencing an asset that was deleted — tile shows ⚠ "asset missing"; tap routes to asset-library drawer (B §B2).
  • Timezone change mid-tour — day headers respect the tour leg's local tz; small subline notes shift ("Berlin local").
  • Conflict with cooperative blocklist (per K, N) — a planned post on a surface currently coop-blocked: tile is 🔒, approval disabled; chip routes to coop-drawer.
  • brief B §B1 — source spec.
  • brief A — swipe-approve semantics inherited on tile.
  • brief R — tour pages render here as plan tiles; locked state routes back to tour-leg-detail.
  • brief G §G1 — content-portal web companion (drag-to-reschedule lives there).
  • brief T §T5 — tour ledger ties plan tiles to revenue rows.
  • brief F §F5 — 24-surface color/icon source.
  • brief H §H1 — vacation strip + bump-policy interaction.