superlore-canvas
/superlore-canvas
Buduje w bazie wiedzy superlore diagramy Canvas: architektury, przepływy i mapy myśli, widoczne jako tablica i graf.
- Autor
- krishnansg ↗
- Repozytorium
- superlore ↗
- Licencja
- Apache-2.0
- Ostatnia zmiana repozytorium
- 04.07.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 1
Brak sygnałów. Repozytorium zmienione 04.07.2026, bez odwołań do wycofanych modeli i API.
Apache-2.0, otwarta: można używać i zmieniać, z zachowaniem licencji i informacji o zmianach.
Co robi i kiedy
Buduje w bazie wiedzy superlore diagramy Canvas: architektury, przepływy i mapy myśli, widoczne jako tablica i graf.
Wyzwalacze z opisu
Oryginalny opis (EN)
Author rich, well-structured superlore Canvas diagrams — the `superlore-canvas` block in MDX that renders as a FigJam-grade interactive whiteboard AND a typed knowledge graph. Use whenever creating or editing a visual, diagram, whiteboard, board, architecture map, flow, mind-map, or brainstorm in a superlore knowledge base, or when asked to "visualize", "draw", "diagram", "map out", or "whiteboard" a concept.
Jak działa
- The golden workflow — think before you draw
- The spec (exact)
- Templates — start from a ready structure (prefer this)
- Recipes (copy, then adapt)
- Quality bar (a board is good when…)
- Common mistakes
- Remember
Podgląd SKILL.md
---
name: superlore-canvas
description: Author rich, well-structured superlore Canvas diagrams — the `superlore-canvas` block in MDX that renders as a FigJam-grade interactive whiteboard AND a typed knowledge graph. Use whenever creating or editing a visual, diagram, whiteboard, board, architecture map, flow, mind-map, or brainstorm in a superlore knowledge base, or when asked to "visualize", "draw", "diagram", "map out", or "whiteboard" a concept.
metadata:
author: superlore
version: "1.0.0"
---
# Authoring superlore Canvas
A **superlore Canvas** is a whiteboard you write as data. You drop a fenced ` ```superlore-canvas ` block
(a JSON object) into any `.mdx` file and it renders as a polished, interactive board — _and_ the
same JSON is the knowledge graph the MCP serves. So you are never drawing a picture an agent has to
interpret; you are authoring `{ nodes, edges, groups }` that is simultaneously the human view and
the machine view. **Author semantics, not pixels** — colours, sizes and layout are auto-designed.
This is the move that extends FigJam: a FigJam board is pixels; a superlore Canvas is a _typed graph_
(nodes, typed relations, sections) that happens to render beautifully. Lean into the structure.
## The golden workflow — think before you draw
Do not start emitting nodes. Plan first, in this order:
1. **What is the one thing this board must communicate?** A system's shape? A decision? A flow? A
brainstorm? The answer picks the layout and the story.
2. **What are the sections?** Almost every good board is organized into 2–6 **sections** (frames).
Name them as the beats of the story (e.g. _Ingress → Services → Data_, or _Symptoms →
Hypotheses → Decision → Rollout_). Sections are first-class — use them.
3. **What goes in each section, and what kind is each thing?** Pick the shape that _means_ the
thing (see the vocabulary). A datastore is a `cylinder`, a decision is a `diamond`, an idea is a
`sticky`, an aside is an `annotation`.
4. **How do things relate?** Draw edges for real relationships and give the important ones a typed
`rel` (`depends-on`, `blocks`, `links`…) — that is what makes the board queryable, not just
pretty.
5. **What's the register?** A precise architecture diagram is clean (`sketch` off). A brainstorm or
an explainer for the team is warmer (`sketch: true`).
Then write the JSON. Trust auto-layout: do **not** set `x`/`y` unless you genuinely need an exact
placement — ELK lays everything out with no overlaps.
## The spec (exact)
A board is a JSON object. Only `nodes` is required.
```jsonc
{
"title": "Optional board title",
// "auto" (default, tidy layered) | "flow" | "tree" | "free" (organic scatter)
// | "board" (a poster of disconnected sections, placed in authored order — see Layouts)
// | "manual" (FigJam-style absolute placement — honour every x/y/width/height)
"layout": "auto",
"direction": "right", // "right" (default) | "down" — flow direction for auto-layout
"height": 520, // optional px number or CSS string; otherwise the board hugs its content
"sketch": false, // true → hand-drawn connectors + handwritten section titles + dotted sections
"groups": [
/* sections */
],
"nodes": [
/* the things */
],
"edges": [
/* the relationships */
],
}
```
### Nodes
```jsonc
{
"id": "api", // required, unique; referenced by edges + `to`
"kind": "rounded", // see the vocabulary below (default "rounded")
"label": "API gateway", // short text on the node
"body": "line one\nline two", // longer text for `note` cards (\n = line break)
"intent": "blue", // OPTIONAL colour — omit and auto-design picks a harmonious one
"icon": "shield", // lucide icon name (kebab-case) — for `icon` kind or a leading glyph
"src": "https://…/x.png", // image source for kind:"image"
"hand": false, // true → render this node's text in the handwriting face (text/heading/note/sticky)
"dashed": false, // true → dashed border (a tentative / proposed / optional box)
"count": 3, // for kind:"stack" — how many cards read in the pile (2–4)
"group": "ingress", // section membership (a group id)
"to": ["svc", "db"], // sugar: outgoing edges to these ids (no labels)
"x": 40,
"y": 0,
"width": 220,
"height": 80, // OPTIONAL exact placement — overrides auto-layout (required in `manual`)
}
```
**Node kinds — pick the one that carries meaning:**
| Kind | Use it for |
| ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rounded` (default), `rect`, `card` | a service, component, step, generic box |
| `circle`, `ellipse` | a start/end, an actor, an endpoint |
| `diamond` | **a decision / branch** (the one "this matters" shape) |
| `cylinder` | **a datastore** — DB, cache, queue, bucket |
| `sticky` | **an idea / note on a brainstorm** (a wall of these reads as designed) |
| `note` | a titled multi-line note (`label` + `body`) |
| `annotation` | **a handwritten margin aside** — a caveat, a "watch this", a question |
| `stack` | **a pile of cards** — "many of these": records, stories, a dataset, a backlog (`count`) |
| `heading` | **big free display text** — a board title/verdict/question (`hand` → handwritten) |
| `embed` | **a live superlore component** — `component` + `props` (Timeline, Comparison, StatGrid, Board, Decision, KeyFacts, EntityCard, Releases, Roster, Schedule); its data rides into the graph |
| `icon` | **an architecture component** with a big glyph (`icon: "cloud"`, `"server"`, `"shield"`…) |
| `image` | an embedded image (`src`) |
| `pill`, `text` | a tag/label; or bare text (add a `body` for a multi-line aside paragraph) |
| `process`, `document`, `parallelogram`, `trapezoid`, `callout` | flowchart semantics (process, doc, I/O, manual op, speech bubble) |
| `triangle`, `triangle-down`, `pentagon`, `hexagon`, `octagon`, `star`, `cross`, `arrow-left`, `arrow-right`, `chevron` | basic shapes when you need a specific glyph |
**Intents (colour) — earn them, don't spray them.** Omit `intent` and auto-design gives plain boxes
a calm, harmonious hue and stickies a lively rotation, so a board with _no_ colours still looks
designed. Set `intent` to make a point: semantic — `accent` (the brand violet, for the key thing),
`success`, `warning`, `danger`, `info`, `neutral`, `muted`; or a FigJam colour —
`gray`, `red`, `orange`, `yellow`, `green`, `teal`, `blue`, `purple`, `pink`. Tip: give each
**section** a colour family and let its cards share it.
### Edges
```jsonc
{
"from": "api",
"to": "db",
"label": "writes",
"kind": "arrow",
"intent": "blue",
"rel": "depends-on",
}
```
- `kind`: `arrow` (default) · `line` (no head) · `bidirectional` · `dashed` (fallback/async/best-effort) · `curved` · `sketch` (hand-drawn).
- `intent` (optional colour): tint the connector + its arrowhead — a FigJam/semantic colour to read
a flow by colour (e.g. the "happy path" in `teal`), or `neutral` for a strong foreground line.
Omit for the calm default. Earn it like node colour; don't make a rainbow of arrows.
- `rel` (the important one): a **typed relationship** the knowledge graph keeps —
`links`, `depends-on`, `blocks`, `parent`/`child`, `part-of`, `owned-by`, `defines`, `mentions`,
`supersedes`/`superseded-by`, `related`, `see-also`. Use it on edges that carry real meaning;
it's what lets an agent answer "what depends on X?" without reading the picture.
- Short edge labels (1–3 words) read best. Or use node `to:` sugar for unlabeled edges.
### Groups (sections) — the backbone of a good board
```jsonc
{
"id": "data",
"label": "Data tier",
"frame": true, // true → a titled section (pill-tab header, clear border); false/omit → a soft tinted region
"dashed": true, // a dashed section border — a loose / working / proposed grouping
"intent": "green", // optional; otherwise the section tints to the colour family of its contents
"parent": "vpc", // nest this section inside another (sections within sections)
"dotted": true, // a dotted ground inside the section (on by default when the board is `sketch`)
// "x"/"y"/"width"/"height" — absolute placement/size (honoured in `manual` layout)
}
```
Put nodes in a section with the node's `group` field. Sections can **nest** (`parent`) — e.g.
_Cloud account → VPC → Subnet_. Prefer `frame: true` for the main structural sections.
### Layouts — not every board is one flow
- **`auto`** (default) / `flow` / `tree` — a tidy layered diagram from your edges. The everyday choice.
- **`free`** — an organic scatter (a wall of stickies). Brainstorms.
- **`board`** — a **poster of disconnected sections**. Each top-level section (and each ungrouped
node) is laid out on its own, then the blocks are packed **in the order you declare them**,
wrapping into rows. No edges between sections required. Reach for this when the board is several
independent diagrams + notes + headings side by side (a review board, a "today → target" study).
You author reading order; the poster falls out. Reorder the spec → the poster re-flows.
- **`manual`** — **absolute placement.** Every node `x`/`y` (and a frame's `width`/`height`) is
honoured verbatim, FigJam-style; nothing moves. A frame with no explicit size hugs its members.
Use it only when you need a hand-arranged board pixel-for-pixel; otherwise prefer `board`/`auto`
so you author semantics, not coordinates.
### Embedding a live component (`kind: "embed"`)
A node can _be_ a superlore component — a `Comparison`, `StatGrid`, `Timeline`, `Board`, `Decision`,
`KeyFacts`, `EntityCard`, `Releases`, `Roster`, or `Schedule` — so a whiteboard can hold real,
typed data beside the boxes. Give the node `"component"` (the name) and `"props"` (its authored
data). The node sizes itself to the component, and the component's own knowledge rides into the
canvas graph — so the MCP sees the comparison's cells or the timeline's items, not "a box".
```jsonc
{
"id": "opts",
"kind": "embed",
"component": "Comparison",
"props": { "options": ["A", "B"], "rows": [{ "criterion": "Managed", "cells": [true, false] }] },
}
```
### Sketch mode — for brainstorms & team explainers
Set board-level `"sketch": true` and the whole board turns hand-drawn: connectors waver like a
marker, section titles + edge labels render in a handwriting face, and sections get a dotted ground.
It's one flag that turns a clean diagram into a FigJam-style whiteboard. Use it for ideation,
explainers, and "let me walk you through this" boards; keep it **off** for precise reference
diagrams. Per-edge `"kind": "sketch"` and per-group `"dotted"` still override.
## Templates — start from a ready structure (prefer this)
When the ask matches a known framework, **don't hand-build the frames — set `template`** and drop
your nodes into its named frames. You get the correct, designed structure (icons, colours, layout)
for free, and it's reproducible. Add nodes with `group: "<frame id>"`; rename scaffold nodes by
reusing their id.
```jsonc
{ "template": "swot", "nodes": [{ "kind": "sticky", "group": "strengths", "label": "…" }] }
```
| `template` | Frame / node ids to fill |
| ----------------------- | ---------------------------------------------------------------------------------------------------- |
| `swot` | `strengths` · `weaknesses` · `opportunities` · `threats` |
| `business-model-canvas` | `partners` `activities` `resources` `value` `relationships` `channels` `segments` `costs` `revenue` |
| `lean-canvas` | `problem` `solution` `metrics` `uvp` `advantage` `lc-channels` `lc-segments` `lc-costs` `lc-revenue` |
| `2x2` (impact/effort) | `quick-wins` · `big-bets` · `fill-ins` · `money-pits` |
| `user-journey` | `awareness` · `consideration` · `decision` · `onboarding` · `retention` |
| `rca` | `symptoms` · `hypotheses` · `cause` · `fix` |
| `system-architecture` | frames `client`/`edge`/`services`/`data`; rename nodes `svc-a`,`svc-b`,`db`,… |
| `okr-tree` | rename nodes `objective`,`kr1`,`kr2`,`kr3` |
| `org-chart` | rename nodes `ceo`,`cto`,`cpo`,`cro`,`eng`,`design`,`sales` |
| `mind-map` | rename `center`,`b1`…`b4` (hand-drawn) |
**Not a whiteboard?** Use the right component instead of Canvas: a **sprint/sales/hiring board or
retro** → `<Board>`; a **RICE / ICE / RACI / decision matrix** → `<Comparison>`; a **roadmap** →
`<Timeline>`. Same typed knowledge graph, better fit.
## Recipes (copy, then adapt)
### 1 — System architecture (clean, sectioned, typed)
Tiers as frames, the right shape per thing, typed `rel` on the meaningful edges.
```superlore-canvas
{
"title": "Checkout — request to settlement",
"direction": "down",
"groups": [
{ "id": "edge", "label": "Edge", "frame": true, "intent": "gray" },
{ "id": "svc", "label": "Services", "frame": true, "intent": "blue" },
{ "id": "data", "label": "Data", "frame": true, "intent": "green" }
],
"nodes": [
{ "id": "client", "kind": "circle", "label": "Shopper" },
{ "id": "cdn", "kind": "icon", "icon": "globe", "label": "CDN + WAF", "group": "edge" },
{ "id": "gw", "kind": "icon", "icon": "shield", "label": "API gateway", "group": "edge" },
{ "id": "cart", "kind": "rounded", "label": "Cart service", "group": "svc" },
{ "id": "order", "kind": "rounded", "label": "Order service", "group": "svc" },
{ "id": "pay", "kind": "diamond", "label": "Payment authorized?", "group": "svc" },
{ "id": "db", "kind": "cylinder", "label": "Orders DB", "group": "data" },
{ "id": "cache", "kind": "cylinder", "label": "Redis", "group": "data" }
],
"edges": [
{ "from": "client", "to": "cdn", "label": "HTTPS" },
{ "from": "cdn", "to": "gw" },
{ "from": "gw", "to": "cart", "rel": "links" },
{ "from": "cart", "to": "cache", "label": "read/write", "rel": "depends-on" },
{ "from": "gw", "to": "order", "rel": "links" },
{ "from": "order", "to": "pay" },
{ "from": "pay", "to": "db", "label": "yes", "rel": "depends-on" }
]
}
```
### 2 — Brainstorm / ideation board (warm, hand-drawn)
`sketch: true`, sticky notes for ideas, an annotation aside, a decision diamond.
```superlore-canvas
{
"title": "Cutting checkout p99 latency",
"sketch": true,
"direction": "down",
"groups": [
{ "id": "symptoms", "label": "Symptoms", "frame": true, "intent": "red" },
{ "id": "options", "label": "Options", "frame": true, "intent": "purple" },
{ "id": "decision", "label": "Decision", "frame": true, "intent": "teal" }
],
"nodes": [
{ "id": "slo", "kind": "card", "label": "p99 = 2.4s — SLO breached", "group": "symptoms" },
{ "id": "peak", "kind": "sticky", "label": "Worst at the 8pm sale peak", "group": "symptoms" },
{ "id": "idx", "kind": "sticky", "label": "Add composite index", "group": "options" },
{ "id": "batch", "kind": "sticky", "label": "Batch the line-item reads", "group": "options" },
{ "id": "cache", "kind": "sticky", "label": "Cache hot carts", "group": "options" },
{ "id": "aside", "kind": "annotation", "label": "cache adds invalidation risk — park it", "group": "options" },
{ "id": "pick", "kind": "diamond", "label": "Index + batch first?", "group": "decision" },
{ "id": "ship", "kind": "rounded", "label": "Ship index + batched reads", "group": "decision" }
],
"edges": [
{ "from": "slo", "to": "idx", "label": "dig in" },
{ "from": "idx", "to": "pick" },
{ "from": "batch", "to": "pick" },
{ "from": "pick", "to": "ship", "label": "cheapest win" }
]
}
```
### 3 — Decision / trade-off flow
Question → options → criteria → outcome; the chosen path stands out.
```superlore-canvas
{
"title": "Pick a job queue",
"direction": "down",
"nodes": [
{ "id": "q", "kind": "diamond", "intent": "accent", "label": "Which queue?" },
{ "id": "a", "kind": "card", "intent": "blue", "label": "Managed (SQS)" },
{ "id": "b", "kind": "card", "intent": "purple", "label": "Self-host (Redis)" },
{ "id": "pick", "kind": "rounded", "intent": "green", "label": "Chosen: SQS" }
],
"edges": [
{ "from": "q", "to": "a" },
{ "from": "q", "to": "b" },
{ "from": "a", "to": "pick", "label": "no ops", "rel": "links" }
]
}
```
### 4 — A poster of disconnected sections (`layout: "board"`)
Several independent diagrams + notes + a heading on one surface, placed in the order you declare
them. No edges between sections. Each section is laid out internally; the blocks wrap into rows.
```superlore-canvas
{
"title": "Search relevance — where we are",
"layout": "board",
"direction": "down",
"groups": [
{ "id": "today", "label": "Today", "frame": true, "intent": "blue" },
{ "id": "gaps", "label": "Gaps", "frame": true, "dashed": true, "intent": "red" }
],
"nodes": [
{ "id": "q", "kind": "rect", "group": "today", "label": "Query" },
{ "id": "bm25", "kind": "rect", "group": "today", "label": "BM25 ranker" },
{ "id": "store", "kind": "cylinder", "group": "today", "label": "Index" },
{ "id": "docs", "kind": "stack", "group": "today", "label": "Results" },
{ "id": "g1", "kind": "note", "intent": "red", "group": "gaps", "body": "No semantic recall — synonyms miss." },
{ "id": "g2", "kind": "note", "intent": "red", "group": "gaps", "body": "No personalization signal." },
{ "id": "ask", "kind": "heading", "label": "What if ranking were learned?" },
{ "id": "idea", "kind": "note", "intent": "gray", "hand": true, "body": "Add a vector recall stage, then a learned re-ranker over BM25 + embeddings." }
],
"edges": [
{ "from": "q", "to": "bm25", "intent": "blue" },
{ "from": "bm25", "to": "store", "intent": "blue", "label": "lookup" },
{ "from": "store", "to": "docs", "intent": "blue" }
]
}
```
## Quality bar (a board is good when…)
- It is **organized by sections** with clear, story-shaped names.
- Every node's **kind carries meaning** (decision=diamond, store=cylinder, idea=sticky, aside=annotation, component=icon).
- **Colour is earned** — sections share a family; the one key thing may use `accent`; the rest can be auto-coloured (omit `intent`).
- The important edges carry a typed **`rel`** so the graph is queryable.
- It **reads as a story** in the flow direction; nothing is orphaned.
- Brainstorms/explainers use **`sketch: true`**; reference diagrams stay clean.
## Common mistakes
- **Pixel-pushing.** Don't set `x`/`y`/`width`/`height` unless you truly need an exact layout — let
auto-layout work. Reserve explicit coordinates for the rare "place this exactly here" case.
- **No sections.** A flat soup of boxes reads as noise. Group into 2–6 frames.
- **Spraying colour.** A rainbow board looks undesigned. Omit `intent` to let auto-design harmonise,
or give each section one family.
- **Untyped relationships.** Edges with no `rel` are just lines; add `rel` to the meaningful ones so
the knowledge graph is real.
- **Overcrowding.** If a board has > ~25 nodes, split the concept across sections or multiple boards.
- **Wrong register.** A precise architecture diagram in `sketch` mode looks sloppy; a team explainer
in clean mode looks cold. Match the mode to the intent.
## Remember
The board is the knowledge graph. A great superlore Canvas is one where an agent calling
`get_component_data` gets clean, typed `{ nodes, edges, groups }` with real `rel`s — and a human
gets a board they actually want to read. Author for both at once.
Wersje
W bazie nie ma innych skilli o nazwie superlore-canvas.
Migawka bazy z 28.10.2026 · wersja paczki 64b1377dab2a (skrót SHA-256 całej paczki)
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 100superlore-author
Pisze i redaguje strony bazy wiedzy w MDX, łącząc czytelne strony z typowanymi komponentami dla agentów. - 100superlore-scaffold
Zakłada nową bazę wiedzy superlore: pyta o podstawowe ustawienia, uruchamia CLI, konfiguruje MCP i dodaje startową treść. - 100flow-diagram
Tworzy statyczne diagramy: schematy blokowe, drzewa zależności, mapy architektury, maszyny stanów i widoki potoków. - 95excalidraw-diagram-generator
Generuje diagramy Excalidraw z opisu w języku naturalnym: schematy blokowe, diagramy relacji, mapy myśli i architektury systemów, zapisane jako pliki .excalidraw. - 95excalidraw-diagram-generator
Generuje diagramy Excalidraw z opisów w języku naturalnym: schematy blokowe, diagramy relacji, mapy myśli i architektury systemów, zapisane jako pliki .excalidraw. - 100visualize
Generuje diagramy z dokumentu, tematu lub pojęcia: mapy myśli w Markmap, pozostałe diagramy w Mermaid.