{"slug":"frontend-5","title":"frontend","summary":"Frontend: UI design, distinctive visual styles, HTML artifacts, Three.js 3D.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-20T08:04:45.985938Z","repo":{"url":"https://github.com/notque/vexjoy-agent","stars":425,"forks":48,"license":"MIT","updatedAt":"2026-09-26T21:45:15Z"},"bodyHtml":"<h1>Saved templates — named, frozen HTML layouts</h1>\n<p>A named starting layout the builder clones and fills, instead of regenerating\nstructure from scratch. One skill, many template files: add a layout here to\ngrow the gallery — never add a skill per template.</p>\n<h2>How a saved template works</h2>\n<p>Each entry is two files sharing a base name:</p>\n<table>\n<thead>\n<tr>\n<th>File</th>\n<th>Role</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>&lt;name&gt;.html</code></td>\n<td>Frozen layout. Content slots are <code>{{SLOT_NAME}}</code> markers.</td>\n</tr>\n<tr>\n<td><code>&lt;name&gt;.slots.json</code></td>\n<td>Slot manifest: each slot's name, whether it is required, and a one-line description.</td>\n</tr>\n</tbody>\n</table>\n<p>The layout (CSS, structure, chrome) is fixed. Only slot text changes.</p>\n<h2>Fill a template (deterministic)</h2>\n<pre><code>python3 skills/meta/html-artifact/scripts/fill-template.py \\\n  --template business-review \\\n  --slots slots.json \\\n  --out artifact.html\n</code></pre>\n<p><code>slots.json</code> maps slot names to HTML/text values. The script:</p>\n<ul>\n<li>Refuses if a required slot is missing (exit 1).</li>\n<li>Refuses if a provided slot name is not declared in the manifest (exit 1) — no silent typos.</li>\n<li>Substitutes every declared slot, then verifies no <code>{{...}}</code> markers remain (exit 1).</li>\n<li>Never edits layout, CSS, or chrome. Content-vs-layout authority is enforced by the script, not by prompt discipline.</li>\n</ul>\n<h2>Gallery</h2>\n<table>\n<thead>\n<tr>\n<th>Template</th>\n<th>Shape</th>\n<th>Use</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>business-review</code></td>\n<td>report</td>\n<td>Performance/KPI review with segments, decisions, outlook</td>\n</tr>\n<tr>\n<td><code>system-design</code></td>\n<td>report</td>\n<td>Architecture doc: requirements, components, data flow, tradeoffs</td>\n</tr>\n<tr>\n<td><code>github-issues</code></td>\n<td>data-viz</td>\n<td>Rendered GitHub issue set (pre-existing)</td>\n</tr>\n</tbody>\n</table>\n<h2>Add a template</h2>\n<ol>\n<li>Author <code>&lt;name&gt;.html</code> in the Birchline design system, marking content spots with <code>{{SLOT}}</code>.</li>\n<li>Author <code>&lt;name&gt;.slots.json</code> declaring every slot.</li>\n<li>Run <code>fill-template.py --template &lt;name&gt; --slots &lt;sample&gt;.json --out /tmp/check.html</code> and confirm no markers remain.</li>\n<li>Add a row to the gallery table above.</li>\n</ol>\n","files":[{"path":"agents/html-builder.md","sizeBytes":5916,"isText":true},{"path":"assets/base-template.html","sizeBytes":495,"isText":false},{"path":"references/design-refs/accessibility-review.md","sizeBytes":13336,"isText":true},{"path":"references/design-refs/design-critique.md","sizeBytes":10696,"isText":true},{"path":"references/design-refs/design-handoff.md","sizeBytes":10098,"isText":true},{"path":"references/design-refs/design-systems.md","sizeBytes":9519,"isText":true},{"path":"references/design-refs/llm-design-failure-modes.md","sizeBytes":9284,"isText":true},{"path":"references/design-refs/ux-copy.md","sizeBytes":9774,"isText":true},{"path":"references/distinctive-frontend-design-refs/animation-patterns.md","sizeBytes":10803,"isText":true},{"path":"references/distinctive-frontend-design-refs/background-techniques.md","sizeBytes":10705,"isText":true},{"path":"references/distinctive-frontend-design-refs/balatro-shader-breakdown.md","sizeBytes":15215,"isText":true},{"path":"references/distinctive-frontend-design-refs/card-shader-patterns.md","sizeBytes":11156,"isText":true},{"path":"references/distinctive-frontend-design-refs/color-inspirations.json","sizeBytes":9672,"isText":true},{"path":"references/distinctive-frontend-design-refs/css-audit-patterns.md","sizeBytes":4854,"isText":true},{"path":"references/distinctive-frontend-design-refs/font-catalog.json","sizeBytes":9942,"isText":true},{"path":"references/distinctive-frontend-design-refs/game-ui-polish.md","sizeBytes":6483,"isText":true},{"path":"references/distinctive-frontend-design-refs/honest-placeholders.md","sizeBytes":3320,"isText":true},{"path":"references/distinctive-frontend-design-refs/implementation-examples.md","sizeBytes":7837,"isText":true},{"path":"references/distinctive-frontend-design-refs/macrostructure-catalog.md","sizeBytes":9487,"isText":true},{"path":"references/distinctive-frontend-design-refs/oklch-color-harmony.md","sizeBytes":7447,"isText":true},{"path":"references/distinctive-frontend-design-refs/performance-budgets.md","sizeBytes":10819,"isText":true},{"path":"references/distinctive-frontend-design-refs/phase-details.md","sizeBytes":4892,"isText":true},{"path":"references/distinctive-frontend-design-refs/pptx-conversion.md","sizeBytes":9942,"isText":true},{"path":"references/distinctive-frontend-design-refs/roll-text.md","sizeBytes":7329,"isText":true},{"path":"references/distinctive-frontend-design-refs/shader-integration-react.md","sizeBytes":17067,"isText":true},{"path":"references/distinctive-frontend-design-refs/slide-controller.md","sizeBytes":9632,"isText":true},{"path":"references/distinctive-frontend-design-refs/text-animation-patterns.md","sizeBytes":4365,"isText":true},{"path":"references/html-artifact-refs/design-system.md","sizeBytes":8693,"isText":true},{"path":"references/html-artifact-refs/diagram-layering.md","sizeBytes":4026,"isText":true},{"path":"references/html-artifact-refs/infographic-layouts.md","sizeBytes":5014,"isText":true},{"path":"references/html-artifact-refs/pdf-export.md","sizeBytes":6020,"isText":true},{"path":"references/html-artifact-refs/pptx-export.md","sizeBytes":10396,"isText":true},{"path":"references/html-artifact-refs/shape-diagram-illustration.md","sizeBytes":4362,"isText":true},{"path":"references/threejs-builder-refs/advanced-animation.md","sizeBytes":12424,"isText":true},{"path":"references/threejs-builder-refs/advanced-topics.md","sizeBytes":11299,"isText":true},{"path":"references/threejs-builder-refs/build-recipes.md","sizeBytes":7610,"isText":true},{"path":"references/threejs-builder-refs/game-architecture.md","sizeBytes":10656,"isText":true},{"path":"references/threejs-builder-refs/game-patterns.md","sizeBytes":12814,"isText":true},{"path":"references/threejs-builder-refs/gltf-loading.md","sizeBytes":8771,"isText":true},{"path":"references/threejs-builder-refs/performance-patterns.md","sizeBytes":12090,"isText":true},{"path":"references/threejs-builder-refs/react-three-fiber.md","sizeBytes":18197,"isText":true},{"path":"references/threejs-builder-refs/shader-patterns.md","sizeBytes":15357,"isText":true},{"path":"references/threejs-builder-refs/visual-polish.md","sizeBytes":16673,"isText":true},{"path":"references/threejs-builder-refs/webgpu.md","sizeBytes":20884,"isText":true},{"path":"scripts-distinctive-frontend-design/css_slop_rules.py","sizeBytes":15682,"isText":true},{"path":"scripts-distinctive-frontend-design/tests/test_css_slop_rules.py","sizeBytes":7026,"isText":true},{"path":"scripts-distinctive-frontend-design/tests/test_validate_design_advisory.py","sizeBytes":3389,"isText":true},{"path":"scripts-distinctive-frontend-design/tests/test_validate_design_macro.py","sizeBytes":4434,"isText":true},{"path":"scripts-distinctive-frontend-design/validate_design.py","sizeBytes":22747,"isText":true},{"path":"scripts-html-artifact/assemble-template.py","sizeBytes":7425,"isText":true},{"path":"scripts-html-artifact/css_slop_rules.py","sizeBytes":15804,"isText":true},{"path":"scripts-html-artifact/detect-shape.py","sizeBytes":7127,"isText":true},{"path":"scripts-html-artifact/fill-template.py","sizeBytes":5683,"isText":true},{"path":"scripts-html-artifact/pptx-bridge/extract_slides.py","sizeBytes":13838,"isText":true},{"path":"scripts-html-artifact/pptx-bridge/__init__.py","sizeBytes":490,"isText":true},{"path":"scripts-html-artifact/pptx-bridge/_pptx_engine.py","sizeBytes":27015,"isText":true},{"path":"scripts-html-artifact/pptx-bridge/render_pptx.py","sizeBytes":7046,"isText":true},{"path":"scripts-html-artifact/pptx-bridge/run-unified.py","sizeBytes":11878,"isText":true},{"path":"scripts-html-artifact/render-github-issues.py","sizeBytes":7711,"isText":true},{"path":"scripts-html-artifact/tests/test_assemble_template.py","sizeBytes":29460,"isText":true},{"path":"scripts-html-artifact/tests/test_css_slop_emission.py","sizeBytes":7746,"isText":true},{"path":"scripts-html-artifact/tests/test_detect_shape.py","sizeBytes":5421,"isText":true},{"path":"scripts-html-artifact/tests/test_fill_template.py","sizeBytes":5320,"isText":true},{"path":"scripts-html-artifact/tests/test_to_pdf.py","sizeBytes":13601,"isText":true},{"path":"scripts-html-artifact/tests/test_validate_artifact.py","sizeBytes":11072,"isText":true},{"path":"scripts-html-artifact/to-pdf.py","sizeBytes":12797,"isText":true},{"path":"scripts-html-artifact/validate-artifact.py","sizeBytes":9936,"isText":true},{"path":"SKILL.md","sizeBytes":19831,"isText":true},{"path":"SPEC.md","sizeBytes":4445,"isText":true},{"path":"templates/base-reset.css","sizeBytes":1215,"isText":false},{"path":"templates/components/collapsible.css","sizeBytes":1119,"isText":false},{"path":"templates/components/collapsible.js","sizeBytes":516,"isText":true},{"path":"templates/components/copy-button.css","sizeBytes":534,"isText":false},{"path":"templates/components/copy-button.js","sizeBytes":334,"isText":true},{"path":"templates/components/drag-drop.css","sizeBytes":612,"isText":false},{"path":"templates/components/drag-drop.js","sizeBytes":1076,"isText":true},{"path":"templates/components/filter.css","sizeBytes":1100,"isText":false},{"path":"templates/components/filter.js","sizeBytes":987,"isText":true},{"path":"templates/components/keyboard-nav.css","sizeBytes":249,"isText":false},{"path":"templates/components/keyboard-nav.js","sizeBytes":900,"isText":true},{"path":"templates/components/scrollytelling.css","sizeBytes":1493,"isText":false},{"path":"templates/components/scrollytelling.js","sizeBytes":2096,"isText":true},{"path":"templates/components/slider.css","sizeBytes":848,"isText":false},{"path":"templates/components/tabs.css","sizeBytes":770,"isText":false},{"path":"templates/components/tabs.js","sizeBytes":508,"isText":true},{"path":"templates/components/theme-toggle.css","sizeBytes":1242,"isText":false},{"path":"templates/components/theme-toggle.js","sizeBytes":178,"isText":true},{"path":"templates/print/code-review-print.css","sizeBytes":1977,"isText":false},{"path":"templates/print/data-viz-print.css","sizeBytes":1494,"isText":false},{"path":"templates/print/deck-print.css","sizeBytes":1560,"isText":false},{"path":"templates/print/default-print.css","sizeBytes":1609,"isText":false},{"path":"templates/print/diagram-print.css","sizeBytes":1666,"isText":false},{"path":"templates/print/editor-print.css","sizeBytes":2162,"isText":false},{"path":"templates/print/prototype-print.css","sizeBytes":1457,"isText":false},{"path":"templates/print/report-print.css","sizeBytes":1857,"isText":false},{"path":"templates/print/spec-print.css","sizeBytes":1459,"isText":false},{"path":"templates/saved/business-review.html","sizeBytes":3479,"isText":false},{"path":"templates/saved/business-review.slots.json","sizeBytes":1508,"isText":true},{"path":"templates/saved/github-issues.html","sizeBytes":20762,"isText":false},{"path":"templates/saved/project-kickoff.html","sizeBytes":3657,"isText":false},{"path":"templates/saved/project-kickoff.slots.json","sizeBytes":1737,"isText":true},{"path":"templates/saved/README.md","sizeBytes":1874,"isText":true},{"path":"templates/saved/system-design.html","sizeBytes":3313,"isText":false},{"path":"templates/saved/system-design.slots.json","sizeBytes":1637,"isText":true},{"path":"templates/shapes/code-review.css","sizeBytes":2733,"isText":false},{"path":"templates/shapes/data-viz.css","sizeBytes":2347,"isText":false},{"path":"templates/shapes/deck.css","sizeBytes":1916,"isText":false},{"path":"templates/shapes/diagram.css","sizeBytes":2812,"isText":false},{"path":"templates/shapes/editor.css","sizeBytes":2838,"isText":false},{"path":"templates/shapes/prototype.css","sizeBytes":2754,"isText":false},{"path":"templates/shapes/report.css","sizeBytes":2982,"isText":false},{"path":"templates/shapes/spec.css","sizeBytes":3024,"isText":false},{"path":"templates/themes/birchline.css","sizeBytes":2417,"isText":false},{"path":"templates/themes/dark-focus.css","sizeBytes":2646,"isText":false},{"path":"templates/themes/interactive-warm.css","sizeBytes":4595,"isText":false},{"path":"templates/themes/minimal-document.css","sizeBytes":2652,"isText":false}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-27T20:56:48.821557Z","sha256":"A94CC58A3F508647A4F19C25EAF119C6B12109144E4DF8477970653385AFCC7C","sizeBytes":304383},"review":null,"source":{"repositoryUrl":"https://github.com/notque/vexjoy-agent","path":"skills/frontend/frontend","license":"MIT","commit":"da9d20e59e671820e3562285cc1f4ec2d8666aa1","subtreeSha":"1FE29E6BBDC034A4EF18705AF4B45EF2486527F58985CD2E2914CEC06C0DB797","lastSyncedAt":"2026-09-27T20:55:45.609916Z"},"reviewedAt":"2026-09-27T21:03:46.730786Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/notque/vexjoy-agent/tree/main/skills/frontend/frontend"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install notque-vexjoy-agent@llmmart"},{"target":"git","command":"git clone https://github.com/notque/vexjoy-agent.git"}]}