marketplace-build-component
SKILL.md
Build UI with Blok Design System
You are helping the user build UI components for a Sitecore Marketplace app using the Blok design system (Sitecore's shadcn-based component library).
Key Principles
- Always use Blok components — they match the Sitecore host UI and support light/dark themes automatically
- SDK data integration — use loading states (Skeleton) and error states (Alert) when fetching SDK data
- Extension point awareness — different extension types have different UI constraints (see below)
- Responsive — components render inside iframes of varying sizes
Installing Components
Blok components are installed via the shadcn CLI:
# Install the Blok theme (required first)
npx shadcn@latest add https://marketplace-sdk.sitecorecloud.io/r/blok-theme.json
# Install individual components
npx shadcn@latest add https://marketplace-sdk.sitecorecloud.io/r/<component-name>.json
See blok-components.md for the full component catalog with install commands.
UI Patterns by Extension Type
Compact Field (custom-field)
- Very limited space (~300px wide, variable height)
- Use: Input, Select, Badge, small inline components
- Avoid: Tables, large layouts, modals
Dashboard Widget
- Medium space (~400x300px default, resizable)
- Use: Cards, Charts, Stats, compact Tables
- Good for: Summary data, quick actions
Pages Context Panel
- Side panel (~350px wide, full height)
- Use: Vertical layouts, Lists, Accordion, Tabs
- Good for: Contextual info about current page, actions
Fullscreen
- Full viewport within the Sitecore shell
- Use: Any components, complex layouts, Tables, Forms
- Good for: Full CRUD interfaces, dashboards, settings
Standalone
- Independent page, not in Sitecore shell
- Use: Any components, full creative freedom
- Good for: Public-facing pages, OAuth callbacks
SDK Data Integration Pattern
"use client";
import { useEffect, useState } from "react";
import { useSitecoreClient } from "@/hooks/use-sitecore";
import { Skeleton } from "@/components/ui/skeleton";
import { Alert, AlertDescription } from "@/components/ui/alert";
export function MyComponent() {
const client = useSitecoreClient();
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
async function fetchData() {
try {
const result = await client.query("app.context");
setData(result);
} catch (err) {
setError(err instanceof Error ? err.message : "Failed to load");
} finally {
setLoading(false);
}
}
fetchData();
}, [client]);
if (loading) return <Skeleton className="h-32 w-full" />;
if (error) return <Alert variant="destructive"><AlertDescription>{error}</AlertDescription></Alert>;
return <div>{/* Render data */}</div>;
}
Reference Files
- Blok Components — Full component catalog with install commands
Weekly Installs
2
Repository
vercel-labs/sit…e-skillsGitHub Stars
1
First Seen
2 days ago
Security Audits
Installed on
opencode2
gemini-cli2
claude-code2
github-copilot2
codex2
kimi-cli2