mcpField
A
artifacts-builder

artifacts-builder

github.com/pixel-process-ugDevelopment385 installsUpdated 33w ago
Repository

About artifacts-builder

A skill for creating self-contained HTML/CSS/JS artifacts for browser-based demos, prototypes, visualizations and utility tools. It guides scope and architecture decisions, then emphasizes responsive design and progressive enhancement without requiring a build step.

Key features

  1. 01Single-file or minimal-file artifacts
  2. 02Scope and dependency planning
  3. 03Responsive browser interfaces
  4. 04Progressive enhancement
  5. 05Input handling and fallbacks
  6. 06Browser and viewport checks

Use cases

  1. 01Building an interactive prototype
  2. 02Creating a browser-based data visualization
  3. 03Making a shareable utility tool

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/pixel-process-ug/superkit-agents --skill artifacts-builder

After installing, type/artifacts-builderin Claude Code to confirm it loaded.

Details

From the project README

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.

Comments

Markdown supported