astro-components

UI component library for Astro lead generation sites. Buttons, forms, cards, badges. Requires design-tokens skill.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "astro-components" with this command: npx skills add soborbo/claudeskills/soborbo-claudeskills-astro-components

Astro Components Skill

Purpose

Provides reusable UI components. Does NOT handle sections, layouts, or business logic.

Scope

✅ Use For❌ NOT For
Marketing sitesWeb apps
Lead gen pagesDashboards
Service websitesE-commerce carts

Core Rules

  1. All styling via design-tokens — No hardcoded colors/spacing
  2. Token missing = build error — Never fallback to arbitrary values
  3. Mobile-first — Base styles for mobile, md: for larger
  4. 44px minimum touch targets — All interactive elements
  5. Zero external dependencies — Pure Astro + Tailwind only

Semantic HTML Rules

ElementUseNever
<button>Actions, toggles<div onclick>
<a>Navigation<span onclick>
<input>Form dataContenteditable div

Rule: If it does something → <button>. If it goes somewhere → <a>.

Component Variants

Fixed variants only. Claude cannot invent new variants.

ComponentAllowed Variants
Buttonprimary, secondary, outline, ghost
Carddefault, elevated, outlined
Badgedefault, success, warning, error, info
Alertinfo, success, warning, error

New variant needed? → Update this skill first, then use.

Props Pattern (All Components)

interface Props {
  variant?: 'primary' | 'secondary';  // Explicit union, no string
  size?: 'sm' | 'md' | 'lg';          // Fixed sizes only
  class?: string;                      // Allow extension
  // ... component-specific
}

const { variant = 'primary', size = 'md' } = Astro.props;

JavaScript Rules

AllowedForbidden
client:visible islandsInline onclick
Astro actions<script> in component
Separate .ts filesAny DOM manipulation

Exception: None. If JS needed, use island architecture.

Icon Handling

// If icon name not found → render nothing + console.warn
const path = icons[name];
if (!path) {
  console.warn(`Icon "${name}" not found`);
  return null;
}

No silent failures. Missing icon = visible warning in dev.

Form Components

RuleRequirement
LabelAlways visible, linked via for
PlaceholderHint only, never replaces label
ErrorBelow input, role="alert"
RequiredVisual indicator (*) + required attr

Component Boundaries

Components must NOT:

  • Fetch data
  • Format/transform data
  • Access global state
  • Import other components (except Icon)
  • Contain business logic

Rule: Component receives props → renders UI. Nothing else.

File Structure

src/components/ui/
├── Button.astro
├── Input.astro
├── Card.astro
├── Badge.astro
├── Alert.astro
├── Icon.astro
└── index.ts

Forbidden

  • ❌ External UI libraries
  • ❌ Hardcoded colors/spacing
  • ❌ Touch targets under 44px
  • ❌ Missing focus states
  • ❌ Inline JavaScript
  • ❌ Inventing new variants
  • ❌ Silent failures

References

Definition of Done

  • Uses design-tokens only
  • All interactive: focus states + 44px touch
  • TypeScript Props interface
  • No inline JavaScript
  • Tested on mobile 375px

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

astro-seo

No summary provided by upstream source.

Repository SourceNeeds Review
General

astro-ux

No summary provided by upstream source.

Repository SourceNeeds Review
General

astro-architecture

No summary provided by upstream source.

Repository SourceNeeds Review