Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill by KylinMountain · Pull Request #101 · VectifyAI/OpenKB · GitHub
Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill by KylinMountain · Pull Request #101 · VectifyAI/OpenKB · GitHub
Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill by KylinMountain · Pull Request #101 · VectifyAI/OpenKB · GitHub
Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill by KylinMountain · Pull Request #101 · VectifyAI/OpenKB · GitHub
Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill by KylinMountain · Pull Request #101 · VectifyAI/OpenKB · GitHub
Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill by KylinMountain · Pull Request #101 · VectifyAI/OpenKB · GitHub
Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill by KylinMountain · Pull Request #101 · VectifyAI/OpenKB · GitHub
Skip to content

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill - #101

Merged
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill
Jun 16, 2026
Merged

feat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skill#101
KylinMountain merged 7 commits into
mainfrom
feat/deck-neon-skill

Conversation

@KylinMountain

@KylinMountainKylinMountain commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a new built-in deck skill openkb-deck-neon — a dark, neon / glassmorphism visual direction ("Aurora Glass") — and makes it the default for openkb deck new.

  • Plain openkb deck new <name> "<intent>" now uses it.
  • The previous default is still available via --skill openkb-deck-editorial.

What's in it

  • Fixed design system: near-black canvas (#080b11), teal / sky / magenta / amber neon accents, aurora-gradient + grain atmosphere, glassmorphism panels, glowing bottom signature bar.
  • Local font stacks only (no web fonts) — decks stay fully self-contained.
  • Scale-to-fit 16:9 stage (1280×720 design size + JS transform:scale) that letterbox-fills any window size and fullscreen — no fixed-width card.
  • Reuses the existing deck grammar (cover / chapter / thesis / quote / compare / data / closing) and engine. The only engine-side change is flipping DEFAULT_DECK_SKILL (+ matching CLI/chat help & labels); the editorial skill is untouched and still selectable.

Testing

Generated a real deck from this repo's own KB (effective-agents, no --skill → routes to neon by default):

  • ✅ deck validator passes (self-contained, zero external links, 10 slides, 7 distinct slide types)
  • ✅ uses real KB concepts (augmented-llm, agentic-systems, agent-harness, tool-calling-architecture) with source citations
  • ✅ Aurora Glass styling renders correctly and fills a 2560px-wide viewport (verified in Chrome, no console errors)
  • ✅ default switch verified: DEFAULT_DECK_SKILL == "openkb-deck-neon", affected modules import cleanly

Authored following the writing-skills RED → GREEN → REFACTOR flow.

A neon / glassmorphism deck visual direction parallel to
openkb-deck-editorial: near-black canvas, teal/sky/magenta accents,
aurora atmosphere, glass panels, and a scale-to-fit 16:9 stage that
letterbox-fills any viewport (no fixed 1280px card).
Reuses the existing deck engine and grammar (od.mode: deck) — no code
changes. Invoke with:
openkb deck new <name> "<intent>" --skill openkb-deck-neon
openkb deck new (and chat /deck) now route to openkb-deck-neon when no
--skill is given; openkb-deck-editorial stays available via
--skill openkb-deck-editorial. Updates DEFAULT_DECK_SKILL plus the
matching CLI/chat help text and skill labels.
@KylinMountainKylinMountain changed the title feat(skills): add openkb-deck-neon — dark Aurora Glass deck skillfeat(skills): add openkb-deck-neon (dark Aurora Glass) + make it the default deck skillJun 16, 2026
…ayout
- Frame: slides are position:fixed;inset:0 — no letterbox / no fixed card
- Type scale uses clamp() so it scales with the viewport
- Content wraps in an .inner with an explicit max-width: centered/data slides
no longer collapse into a narrow sliver on wide screens; big numbers nowrap;
compare uses a capped 2-col grid
- Guard against the invalid SVG height="auto" attribute
Verified by regenerating the effective-agents deck at 2560px wide: cover, data,
compare and closing all fill edge-to-edge with stable layout.
…ayouts
Replaces the left-aligned narrow column (which left a large empty right half)
with three width-filling layouts: split (text + a first-class visual filling
the other column), full-bleed headline (title ~70vw + full-width detail row),
and centered focus. Adds a per-slide 'no empty right half' self-test and the
matching failure mode.
Verified by regenerating effective-agents at 2560px wide: cover (full-width
info strip), thesis (left text + node-graph visual), compare (two columns),
data (centered big number), closing (left text + layered-stack visual) — all
balanced edge-to-edge, console clean.
- SKILL.md: replace stale fixed-px sizes in the slide-grammar table
(chapter 120px/40px, data 120-160px, copied from the fixed-1280px editorial
skill) with clamp()/relative values, matching this skill's own clamp()
mandate; de-ambiguate the --type-label scale row (letter-spacing was in the
line-height slot); add a 'content must fit one screen, no scroll' rule since
overflow:hidden + justify-center silently clips tall slides top and bottom
- cli.py / chat.py: derive the deck label from DEFAULT_DECK_SKILL instead of a
hardcoded literal (the label could silently report the wrong skill after a
future default change); note the --help default must track the constant
- tests: add test_deck_neon_prompt.py guarding the now-default neon skill's
frontmatter + od contract (previously only deck-editorial was pinned)
A data comparison number (A -> B / A vs B) at the single-number font size
overran its centered container; the trailing % fell outside the
background-clip:text gradient and smeared under the glow. Give the number
width:max-content + max-width:92vw, and a smaller font clamp
(clamp(2.4rem,7vh,5.5rem)) for comparison numbers. Verified by regenerating:
data number renders at 82px / 562px wide, no overflow, % fully painted.
The split-layout visual column let the LLM place labels in <svg><text>, which
does not wrap or reflow — multiple labels in the narrow column overlapped into
an unreadable smear (node captions, timeline stage labels). Require the visual
to be built in HTML/CSS with each label in its own auto-spaced box; reserve SVG
for lines/shapes only; cap at <=4 nodes with short labels, else a vertical
stack of full-width rows. Verified by regenerating the founder-playbook deck:
0 svg <text>, 0 overlapping labels across all 10 slides; the chapter visual is
now clean stacked HTML cards.
@KylinMountain
KylinMountain merged commit 26f8b13 into mainJun 16, 2026
1 check passed
@KylinMountain
KylinMountain deleted the feat/deck-neon-skill branch June 22, 2026 09:53
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
…enkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
KylinMountain added a commit that referenced this pull request Jun 22, 2026
… radial) (#103)
* fix(test): align stale deck default-skill expectation with shipped openkb-deck-neon
#101 made openkb-deck-neon the default deck skill (creator.py
DEFAULT_DECK_SKILL) but left this test asserting the old
openkb-deck-editorial, so it was red on main. Unrelated to visualize.
* feat(visualize): build the wikilink graph + render the self-contained HTML
build_graph(wiki_dir) walks summaries/concepts/entities, collects nodes
(id/label/type/description/sources + in/out degree), resolves [[wikilinks]]
to edges (reusing lint._extract_wikilinks/_normalize_target and
frontmatter.parse; dirs from schema.PAGE_CONTENT_DIRS), and drops
broken/self/duplicate links. render_html injects the graph as JSON into
the template (escaping </ so it can't break out of <script>).
* feat(cli): add the visualize command
Thin read-only command mirroring the other commands' decorators + KB lock:
resolve KB -> build_graph -> render_html -> write output/visualize/graph.html.
Opens in the browser by default (--no-open for headless), resolve()s the
path for a valid file URI, and degrades with a hint if no browser launches.
* feat(visualize): self-contained interactive graph template (3D / mind-map / radial)
One offline HTML page (canvas + DOM, no CDN/network) with three switchable
views of the same KB: a 3D force 'nebula' (default; glow, degree-sized
nodes, flow particles, idle auto-rotation), an OpenKB-rooted horizontal
mind-map (collapsible provenance tree), and a radial OpenKB-centred circle
with faint cross-references. Shared: glass inspector panel, search, legend
type-filter, spacing slider, reset, smooth auto-fit. Neon-on-dark aurora.
* test(visualize): build_graph + render_html + CLI tests
build_graph (nodes/edges/types, broken-link drop, orphan, degree, provenance
sources incl. summary full_text); render_html self-contained (canvas, JSON
embedded, no http(s), unicode round-trip); CLI writes output/visualize/
graph.html, opens by default, --no-open suppresses, empty wiki writes nothing.
* docs(readme): document openkb visualize
Add it to the Layer 2 generators table and a '(iii) Visualize' subsection
matching the existing (i)/(ii) generator sections: a self-contained
interactive knowledge graph (3D / mind-map / radial) written to
output/visualize/graph.html.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@KylinMountain