---
name: workshop-week-map
description: Build a private, unpublished weekly map from a supplied working model during a timed workshop.
---
# Workshop week map
## Scope and time
Before the workshop, confirm Sites access and local file tools.
Prefer a supplied, tested, blank single-file starter; change only its embedded data.
Without a starter, state that a fresh implementation has lower timing confidence, then proceed.
Use only the supplied model; preserve personal wording and label inferred importance or ownership.
Keep the Site owner-private and unpublished unless the user explicitly requests deployment; never change access or enable publish-on-push.
Use this skill and only the necessary Sites setup/save instructions.
Skip Impeccable, design-taste-frontend, frontend-skill, gpt-taste, image generation, research, and review agents.
Do not generate PRODUCT.md, DESIGN.md, design tokens, a test framework, or a long test report.
## Single-file implementation
Author dist/index.html with inline CSS, JavaScript, data, SVG, and a data-URL favicon.
No frameworks, installs, build tools, remote fonts, accounts, analytics, APIs, or runtime fetches.
Use system fonts and graphite surfaces. Render branch colors from data: purple projects/accounts, pink people/relationships, blue commitments, green recurring work, and amber blockers in the sample.
Use a small deterministic spring/repulsion layout, bounded settling, pointer dragging, pan, and button/wheel zoom.
Render a root, five branch nodes, and every supplied item; connect them with short labelled edges.
Provide details, exactly three ranked priorities, search, branch/owner filters, and a text outline, closed by default.
Under Start here, render a Patterns panel from embedded data. Each native button shows type, sentence, inference flag and referred node labels; retain IDs in data. Clicking toggles highlighting of exactly those nodes in the map and outline, revealing them if filters hid them. Offer Clear highlight. Keep node selection independent. Support keyboard activation.
Details show description, status, source, why it matters, ownership, and linked items; identify inferences.
Presentation mode renders only safe variants everywhere, including statuses, patterns, referenced node labels, details, accessibility labels, and print. Root/branch/edge text and tagline must always be presentation-safe.
Exclude contact details, email subjects, and message bodies from the embedded data; use roles and summaries.
Print the full five-branch outline and three priorities plus every pattern regardless of active filters; use white paper.
Use labelled native controls, 44px targets, visible focus, readable contrast, responsive stacking, and reduced motion.
Keyboard: Enter selects; map arrows pan; +/− zoom; offer the outline as the complete navigation alternative.
## Reading limits
Keep panels brief: no prose paragraphs. Use a short sentence, compact line, or bullet per idea; put sources on separate lines and split ownership details into short bullets without changing assignments.
Start here: one reason line of at most 12 words and one handoff line of at most 10 words per item.
Patterns: one sentence of at most 18 words per insight; retain type, inference flag and node references.
Node summaries: at most 15 words each. Preserve meaning using the existing title, status, ownership, source and linked-node context; never truncate text or hide overflow to meet limits.
Apply every word limit to both ordinary and Presentation copies. Count whitespace-separated words; punctuation alone is not a word. Allow natural wrapping on narrow screens rather than clipping text.
The Explore the outline disclosure starts closed on load and reload, remains keyboard-operable, and does not affect the complete print outline.
## Embedded data contract (TypeScript notation; plain objects at runtime)
```ts
type Owner = 'Person' | 'Tool' | 'AI';
type Source = { kind: 'answer' | 'notes' | 'email_thread' | 'calendar_event' | 'drive_folder' | 'file'; ref: string };
type Branch = { id: string; title: string; color: string; rootLabel: string; itemLabel: string };
type Copy = { title: string; summary: string; why: string; ownerDetail: string; status: string };
type Node = Copy & { id: string; branchId: string; owner: Owner; ownerInferred: boolean; whyInferred: boolean; statusInferred: boolean; sources: Source[]; verbatim?: string; safe: Copy };
type Edge = { from: string; to: string; label: string; inferred: boolean };
type Start = { rank: 1 | 2 | 3; nodeId: string; whyFirst: string; owner: Owner; handoff: string; safeWhyFirst: string; safeHandoff: string };
type Pattern = { id: string; type: 'spread thin' | 'single point of failure' | 'neglected relationship' | 'cluster' | 'recurring vs on fire'; sentence: string; nodeIds: string[]; inferred: boolean; safeSentence: string };
type Week = { tagline: string; root: { id: 'me'; title: 'Me, this week' }; branches: Branch[]; nodes: Node[]; edges: Edge[]; start: Start[]; patterns: Pattern[] };
```
`tagline` is presentation-safe text for the page subtitle and model/sample label, rendered from embedded data on load and after Presentation mode changes. The starter value is `Sample week · Generic projects, people and work; replace with your model.`; replace it when supplying a real working model. Keep sample labels out of fixed UI text.
Use exactly five named branches: Projects and accounts, People and relationships, Commitments to people, Recurring work, Blockers. Give each a distinct color. Render labels, filters, colors, anchors and branch edge labels from data; do not hardcode three-branch assumptions.
Every active project/account and key relationship in the supplied model is its own node with source and status, connected to the commitments/blockers it touches. Do not turn folder names, old notes, absent replies or scheduled events into proof of active or unfinished work. Preserve confirmed facts and mark inference separately for status, ownership, importance and edges.
IDs must be unique; edges may reference root, branch, or item IDs; Start ranks must be 1, 2, 3. Pattern IDs must be unique, with 3–6 insights and nonempty nodeIds referencing item nodes. Each insight is one sentence with an allowed type; mark inferred interpretations.
Sources must come from the supplied working model; do not read apps during the build. Start ranking is proposed.
## Minimum pre-save tests: one browser, one batched pass
1. Load: all supplied items, five branches, three priorities, and 3–6 patterns; valid references; no script errors or extra requests. Verify the outline starts closed, all ordinary/safe copy respects the word limits, and panels contain no prose paragraphs. Check unique IDs, distinct branch colors, status/safe fields and valid pattern references; activate each pattern and verify exact highlights plus clearing.
2. Drag one node; select it; verify its source and connections; pan, zoom in/out, and Fit.
3. Toggle each branch and each owner option; verify matching results and restoration across all five data-driven branches.
4. Search one known term and one absent term; verify matches, empty state, and clearing.
5. Toggle Presentation mode; verify safe labels/statuses/details/patterns/referenced labels/print and restored wording when off; confirm the same reading limits in both modes.
6. Invoke print; inspect print-media outline, priority and pattern counts. Mark native printing untested if unavailable.
7. Reload; verify a working map and correct counts, with no unintended completion claims.
8. Use Tab and Enter to select from the outline; verify visible focus and keyboard pan/zoom.
9. At 390px, check page overflow, labelled controls and selection; check reduced-motion behavior.
Fix failures and rerun only affected checks; report blocked checks instead of calling them passed.
## Save and stop
Reuse a Site ID or register once; preserve private access; obtain fresh source credentials near the push.
Push the exact source, verify its full commit SHA, package static output, and save through Sites without deploying by default. If explicitly requested, deploy that exact saved version through the owner-private operation and verify the audience remains unchanged.
Open the local preview; report saved version, preview link, passed checks, and untested items concisely.
Defer until requested after first save: visual polish, reviewer agents, docs, extra browsers/devices, physical printing, pinch, position persistence, and live integrations.
