artifacts-builder

v2026.09.24

Use when the user needs standalone HTML/CSS/JS artifacts — interactive demos, prototypes, single-file applications, or visual tools that run independently in a browser. Triggers: user says "artifact", "demo", "prototype", "single-file app", "HTML tool", "interactive widget", "standalone page", building something that runs in a browser without a build step.

GitHub
安装命令
npx skhub add pixel-process-ug/artifacts-builder
Markdown
SKILL.md

Artifacts Builder

Overview

Generate self-contained, production-quality HTML/CSS/JS artifacts that run in any modern browser without a build step. Each artifact is a single file (or minimal file set) containing everything needed for an interactive demo, prototype, data visualization, or utility tool. Emphasis on progressive enhancement, responsive design, and clean code.

Phase 1: Scope Definition

  1. Clarify the artifact's purpose (demo, prototype, tool, visualization)
  2. Determine interactivity level (static, interactive, data-driven)
  3. Identify required dependencies (none, CDN-loaded, embedded)
  4. Define responsive requirements (mobile, desktop, both)
  5. Set constraints (file size, browser support, offline capability)

STOP — Confirm scope and constraints with user before architecture decisions.

Artifact Type Decision Table

PurposeComplexityDependenciesExample
Static demoLowNoneProduct mockup, landing page
Interactive widgetMediumNone or Alpine.jsCalculator, form builder
Data visualizationMedium-HighD3.js or Chart.jsDashboard, chart explorer
PrototypeMediumAlpine.js or Petite-VueClickable UI prototype
Utility toolMedium-HighVariesJSON formatter, color picker
Generative artMediumNoneCanvas animation, pattern generator
PresentationMediumNone or MermaidSlide deck, diagram viewer

Phase 2: Architecture

  1. Choose single-file or multi-file approach
  2. Select CDN dependencies (if any)
  3. Plan component structure within the file
  4. Define state management approach
  5. Plan progressive enhancement layers

STOP — Present architecture and dependency choices for approval.

Architecture Decision Table

ConstraintSingle-FileMulti-File
Easy sharing (email, paste)YesNo
File size < 100KBYesEither
Multiple pages/viewsPossible (SPA)Better
Team collaborationDifficultBetter
Offline useYes (self-contained)Needs bundling
SEO requirementsN/AN/A (artifacts are tools)

Dependency Decision Table

NeedRecommendedCDN URLSize
Lightweight reactivityAlpine.jscdn.jsdelivr.net/npm/alpinejs@3~15KB
Minimal Vue-likePetite-Vueunpkg.com/petite-vue~6KB
ChartsChart.jscdn.jsdelivr.net/npm/chart.js@4~65KB
Data visualizationD3.jscdn.jsdelivr.net/npm/d3@7~90KB
DiagramsMermaidcdn.jsdelivr.net/npm/mermaid@10~120KB
CSS framework (proto)Tailwind Play CDNcdn.tailwindcss.comRuntime
IconsLucideunpkg.com/lucide@latestOn-demand
No dependency neededVanilla JSN/A0KB

CDN Usage Rules

RuleRationale
Pin to major version (@3, @7)Prevent breaking changes
Maximum 3 CDN dependenciesKeep artifacts lightweight
Add integrity and crossoriginSecurity against CDN compromise
Provide graceful degradationWork if CDN fails
Prefer smaller alternativesAlpine over React, Petite-Vue over Vue

Phase 3: Implementation

  1. Build semantic HTML structure
  2. Add CSS (inline <style> or embedded)
  3. Implement JavaScript functionality
  4. Add error handling and fallbacks
  5. Test across viewports and browsers

STOP — Verify the artifact works correctly before delivering to user.

Template Structure

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>[Artifact Title]</title>
  <style>
    /* Reset */
    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

    /* Design Tokens */
    :root {
      --color-bg: #ffffff;
      --color-text: #1a1a2e;
      --color-primary: #3b82f6;
      --color-border: #e2e8f0;
      --radius: 0.5rem;
      --space: 1rem;
      --font: system-ui, -apple-system, sans-serif;
    }

    @media (prefers-color-scheme: dark) {
      :root {
        --color-bg: #0f172a;
        --color-text: #e2e8f0;
        --color-primary: #60a5fa;
        --color-border: #334155;
      }
    }

    /* Base Styles */
    body {
      font-family: var(--font);
      background: var(--color-bg);
      color: var(--color-text);
      line-height: 1.6;
    }

    /* Component Styles */
    /* ... */
  </style>
</head>
<body>
  <!-- Semantic HTML content -->

  <script>
    // Application logic
    (function() {
      'use strict';
      // ...
    })();
  </script>
</body>
</html>

Responsive Design Patterns

Container-Based Layout

.container {
  width: min(100% - 2rem, 1200px);
  margin-inline: auto;
}

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr));
  gap: var(--space);
}

Mobile-First Media Queries

/* Base: mobile */
.layout { display: flex; flex-direction: column; }

/* Tablet and up */
@media (min-width: 768px) {
  .layout { flex-direction: row; }
  .sidebar { width: 280px; flex-shrink: 0; }
}

Progressive Enhancement

LayerPurposeRequirement
HTMLContent accessible and meaningfulWorks without CSS or JS
CSSVisual presentation and layoutWorks without JS
JavaScriptEnhanced interactivityAdds dynamic behavior

Feature Detection

// Check before using modern APIs
if ('IntersectionObserver' in window) {
  // Use lazy loading
} else {
  // Load all images immediately
}

if (CSS.supports('backdrop-filter', 'blur(10px)')) {
  element.classList.add('glass-effect');
}

State Management (No Framework)

Simple State Pattern

function createStore(initialState) {
  let state = { ...initialState };
  const listeners = new Set();

  return {
    getState: () => ({ ...state }),
    setState(updates) {
      state = { ...state, ...updates };
      listeners.forEach(fn => fn(state));
    },
    subscribe(fn) {
      listeners.add(fn);
      return () => listeners.delete(fn);
    },
  };
}

URL-Based State (for shareable artifacts)

function syncStateWithURL(store) {
  const params = new URLSearchParams(location.search);
  for (const [key, value] of params) {
    store.setState({ [key]: JSON.parse(value) });
  }
  store.subscribe(state => {
    const params = new URLSearchParams();
    Object.entries(state).forEach(([k, v]) => params.set(k, JSON.stringify(v)));
    history.replaceState(null, '', `?${params}`);
  });
}

Export Formats

FormatUse CaseMethod
Single HTML fileSharing, embeddingSelf-contained <style> and <script>
HTML + assetsComplex artifactsSeparate CSS/JS files
Data URLInline embeddingdata:text/html;base64,...
Screenshot/PNGDocumentationhtml2canvas or browser screenshot
PDFPrint/reportwindow.print() with print styles

Quality Checklist

  • Valid HTML5 (<!DOCTYPE html>, lang attribute)
  • Responsive viewport meta tag
  • Works without JavaScript (content visible)
  • Dark mode support (prefers-color-scheme)
  • Keyboard navigable
  • No console errors
  • File size under 100KB (excluding images)
  • Cross-browser tested (Chrome, Firefox, Safari)
  • Print styles if applicable
  • Semantic HTML elements used appropriately

Anti-Patterns / Common Mistakes

Anti-PatternWhy It Is WrongWhat to Do Instead
React/Vue/Angular in single-file artifactMassive overhead for simple interactionsUse Alpine.js or vanilla JS
Heavy framework from CDN for simple UISlow load, wasted bandwidthMatch dependency weight to need
Inline styles instead of CSS custom propertiesCannot theme, cannot dark-modeUse CSS custom properties (tokens)
No error handling on user inputCrashes on bad inputValidate and provide feedback
Fixed pixel dimensionsBreaks on mobile, tabletsUse responsive units (%, rem, vw)
Missing <meta viewport>Mobile renders desktop-zoomedAlways include viewport meta tag
Blocking <script> in <head>Delays page renderingUse defer attribute or put at end of body
No IIFE wrapper for scriptGlobal scope pollutionWrap in (function() { ... })()
Hardcoded colors without tokensCannot switch themesUse CSS custom properties

Integration Points

SkillIntegration
ui-ux-pro-maxStyle selection and UX guidelines
ui-design-systemDesign tokens for consistent theming
canvas-designCanvas/SVG visualizations within artifacts
senior-frontendComplex component patterns
mobile-designMobile-responsive artifact design
planningArtifact scope is defined during planning

Skill Type

FLEXIBLE — Adapt the architecture, dependencies, and complexity to the artifact's requirements. Simple demos should remain as minimal as possible; complex tools may use lightweight frameworks and multiple CDN dependencies.

发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

MIT

源路径

templates/skills/artifacts-builder

默认分支

main

最新提交

cc7fcb7

Tree SHA

7a49a40