Worksheet view
Skill codeeater/where-to-plai-plugin/plugins/where-to-plai/skills/worksheet-view
This skill renders the team's filled Market Opportunity Navigator as a set of self-contained HTML pages that look exactly like the Where-to-Play web app. Triggers include "visualize the worksheets", "render the navigator", "show our results like the web app", "present the where-to-play worksheets as HTML", "make the navigator page", "build the worksheet view", "show the dartboard and map". Use it to turn the `where-to-play/*.md` files into a read-only `navigator/` folder with Overview / WS1 / WS2 / WS3 tabs.From its SKILL.md
npx -y skills add codeeater/where-to-plai-plugin --skill worksheet-viewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.7 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
Worksheet View — render the Navigator as web pages
Produce a one-way, read-only visual of the team's Market Opportunity Navigator in the
exact visual language of the Where-to-Play web app — using the real app's HTML, CSS, fonts
and images. This is presentation, not editing: it shows what the team has already written
in their worksheets — it never changes the worksheets, scores anything, or invents content.
Human-in-the-loop is preserved: the .md files stay the single source of truth.
The output is a small folder (where-to-play/navigator/) of four cross-linked pages plus a
shared css/ fonts/ assets/. The pages open by double-click — no server, no network. (They are
relative-path linked, so keep the folder together.)
Two stages (this is the whole design)
where-to-play/*.md ──①──▶ wtp-data.json ──②──▶ navigator/ (overview, ws1, ws2, ws3)
YOU, with judgment render.py, deterministic
- ① Compaction is YOUR job (needs reading + judgment): read the worksheets and emit a compact
wtp-data.jsonthat fits the fixed slots. - ② Rendering is
render.py's job (deterministic): it maps that JSON to the real app's markup — text into slots, scores into the exact CSS classes. You never hand-write HTML.
What it reads
From the project's where-to-play/ folder (tolerate missing files — that tab renders empty):
01_opportunity-set.md— Worksheet 1 (abilities + the screened opportunity set)02_attractiveness-map/*.md— Worksheet 2, one file per opportunity (the 6-factor scoring)02_map-overview.md— Worksheet 2 placements (each opportunity's zone/bands on the map)03_agile-focus.md— Worksheet 3 (Primary, candidates, relatedness, investment, dartboard)
Procedure
-
Read the worksheets. Load every file above that exists. Read them in full; do not guess at content that is not written down.
-
Compact faithfully into
wtp-data.json. Build one JSON object that matchesrenderer/schema.mdexactly — every field and only the allowed enum values. The worksheet layout has fixed slots (≤8 ability columns, ≤50-char customer segments, 4-segment factor scales, the dartboard rings, etc.), so shorten the team's prose to fit using their own words and meaning — never rewrite intent, never add claims. Map qualitative scores to the enums (Low/Mid/High/Super High, band names,pursueNow/keepOpen/placeInStorage, …). If a field is blank in the.md, omit it — the slot renders empty. Write the object towhere-to-play/wtp-data.json. -
Render. Run the deterministic renderer (this system uses
uv):uv run --with jinja2 python <skill-dir>/renderer/render.py where-to-play/wtp-data.json where-to-play/navigatorThis writes
where-to-play/navigator/{overview,ws1,ws2,ws3}.htmland copies in the sharedcss/ fonts/ assets/. Change nothing inrenderer/— the templates already carry the real app's exact markup, classes, and the band/score→class logic. -
Tell the user to open
where-to-play/navigator/overview.html(double-click) and that the nav tabs switch between Overview / Worksheet 1 / Worksheet 2 / Worksheet 3.
What this view deliberately is not
The web app also lets you log in, edit fields, autosave, share, comment, download a PDF, and chat
with a GPT bubble. None of that is built here — this is a static mirror of the .md files.
The header chrome and GPT bubble are intentionally removed; the only interactivity is the tab nav
(and a small WS2 dropdown to switch between scored opportunities). Inline editing + write-back is a
plausible v2, intentionally not part of this skill — keeping the worksheets editable keeps the
team in the loop.
Boundaries
- Never fabricate. Render only what the worksheets contain — no invented scores, zones, abilities, or opportunities.
- Empty stays empty. Unfilled fields are omitted from the JSON and render as the app's faint placeholders, not as guesses or "TBD".
- Compaction ≠ authorship. Shorten to fit the layout; preserve the team's wording and meaning.
- Enums only. Use exactly the values in
renderer/schema.md. For a half-step (e.g. "Low–Mid"), snap the factor to the nearer segment; theoverall*bands have finer steps (lowmid,midhigh). - No write-back. This skill writes only
where-to-play/wtp-data.jsonand thewhere-to-play/navigator/folder. It never edits the worksheet.mdfiles.
Additional resources
renderer/schema.md— the precisewtp-data.jsonschema (every field, all enum values) and the stage-② enum→markup mapping.renderer/wtp-data.example.json— a complete worked example (the wireless-PdM venture) to copy the shape from.renderer/render.py+renderer/templates/+renderer/static/— the deterministic renderer (real app HTML/CSS/fonts/images). Do not modify when running the skill.- A complete filled navigator to model the compaction on:
../where-to-play/references/examples/inergio-full-navigator.md.
What ships with it: 68 files
3229.6 KB alongside SKILL.md, 1 of them executable
renderer/
- render.pyruns7.6 KB
- schema.md4.6 KB
- static/assets/icons/add-icon.png3.0 KB
- static/assets/icons/basket-icon.png598 B
- static/assets/icons/box-icon.png8.6 KB
- static/assets/icons/box.png15.4 KB
- static/assets/icons/challenge-1.png33.5 KB
- static/assets/icons/challenge-2.png13.1 KB
- static/assets/icons/challenge-3.png24.1 KB
- static/assets/icons/customer.png23.3 KB
- static/assets/icons/customers-icon.png5.6 KB
- static/assets/icons/delete-icon.png5.3 KB
- static/assets/icons/gear.png4.7 KB
- static/assets/icons/overall-challenge.png9.6 KB
- static/assets/icons/overall-potential.png9.6 KB
- static/assets/icons/potential-1.png28.9 KB
- static/assets/icons/potential-2.png38.5 KB
- static/assets/icons/potential-3.png21.4 KB
- static/assets/icons/question-mark.png21.5 KB
- static/assets/icons/sheet-icon-1.png563 B
- static/assets/icons/sheet-icon-2.png719 B
- static/assets/icons/sheet-icon-3.png4.7 KB
- static/assets/images/agile-focus-big.png15.2 KB
- static/assets/images/agile-focus.png722 B
- static/assets/images/attractiveness-map-arrows.png8.2 KB
- static/assets/images/attractiveness-map-big.png28.5 KB
- static/assets/images/attractiveness-map.png565 B
- static/assets/images/gpt-btn-icon.png152.7 KB
- static/assets/images/login-image.png4.6 KB
- static/assets/images/opportunity-set-big.png13.2 KB
- static/assets/images/opportunity-set.png2.2 KB
- static/assets/images/overview.png2.0 KB
- static/assets/images/send-icon.png11.8 KB
- static/assets/images/worksheet-1-heading-image.png6.7 KB
- static/assets/images/worksheet-2-heading-image.png8.0 KB
- static/assets/images/worksheet-3-heading-image.png9.1 KB
- static/css/main.css304.9 KB
- static/fonts/open-sans-700.043771c999cd4d47d9f3.ttf219.3 KB
- static/fonts/open-sans-700.0bfdf521b67b1f06b0e0.woff223.1 KB
- static/fonts/open-sans-700.369d1af520a0a1b52036.woff33.1 KB
28 more files not listed here. See all 68 in the repository.