diff --git a/COPY.md b/COPY.md index 672cbd1b..9f4f6c00 100644 --- a/COPY.md +++ b/COPY.md @@ -39,8 +39,12 @@ These exact strings. Do not paraphrase them per page. | Agents way: terminal | From a terminal · Teaches your agent to search and run Skills in every project. | guidance only: the second way, over `npx skilld install skilld --global` | | Agents way: MCP | In ChatGPT, Claude, and other MCP apps · Add the server once. Then ask the chat to find a Skill. | guidance only: the third way, over the MCP server URL. Its link, "Setup steps for each app", opens `/developers?setup=mcp` | | Home section: demos | See what skills make. · Each demo is one recorded run: the prompt, and what the Agent built with the Skill. | guidance only: the homepage demo section heading and line. The section hides below three demos | +| Nav: demos | Skill Demos | guidance only: the header link after Trending Skills, and the same item in the mobile menu. Links `/skills/demos` | +| Demos link | All {n} demos | guidance only: under the homepage demo section. Links `/skills/demos` | +| Demos page | See what skills make · Each demo is one recorded run: the prompt, and what the Agent built with the Skill. Pick a prompt to see the output, or open it live. | guidance only: the `/skills/demos` H1 and line. The meta title is "Claude skill examples: see what each one makes" for the admitted query | +| Demo groups | Films and launch videos · Landing pages · UI components · Diagrams and explainers | guidance only: `DEMO_GROUPS` in `shared/demo-groups.ts`: the `/skills/demos` group headings and their lines | | Demo stage | Open the demo | guidance only: the homepage demo stage link to the Skill page Demo panel | -| Demo panel | Demo · You say · Open live demo · Open in a new tab · Run it yourself | guidance only: the Skill page Demo panel. "Show screenshots" replaces "Open live demo" while the live output shows | +| Demo panel | Demo · Prompt · Open live demo · Open in a new tab · Run it yourself | guidance only: the Skill page Demo panel. "Show screenshots" replaces "Open live demo" while the live output shows | | Demo provenance | {Agent logo} {model}, such as Opus 5.5 | guidance only: the recording line on the Skill page panel and the homepage stage. Screen readers and the title get "Recorded with {agent}, {model}". No date and no GitHub link: the Skill page is where visitors inspect a Skill | | Demo outdated | Recorded on an older version of this Skill. | guidance only: under the Demo panel when the Skill moved past the recorded commit | | Home section: changes | Keep up with skill changes. | guidance only: the homepage section heading for watching and the digest | diff --git a/GLOSSARY.md b/GLOSSARY.md index 3a991e98..f2f78383 100644 --- a/GLOSSARY.md +++ b/GLOSSARY.md @@ -94,6 +94,8 @@ Collisions **Rule:** a demo shows the Agent's output, never the Skill author's work. It always names how it was recorded. +**Groups:** demos group by what the Skill makes, on `/skills/demos`: films and launch videos, landing pages, UI components, and diagrams and explainers. A group is not a track: tracks sort Skills by kind of work. + ### install **Is:** `skilld install`. Skill files land in the project and the lockfile records them. The opt-in second step. diff --git a/app/app.vue b/app/app.vue index 64b9c320..cbcd246b 100644 --- a/app/app.vue +++ b/app/app.vue @@ -177,6 +177,14 @@ watch(() => route.fullPath, () => { Trending Skills + +import type { HomeDemoItem } from '~/utils/home-demos' +import { githubAvatarProxyUrl } from '#shared/image-proxy' +import { demoKey } from '~/utils/home-demos' +import { resolveAuthorName } from '~/utils/skill-byline' +import DemoStage from './DemoStage.vue' + +/** + * Demos as a prompt index. The prompts are the menu: pick one and the stage + * shows what the Agent made from it, scrollable to the end of the page, or its + * film playing. Each prompt carries a stone dot, and the picked one turns rose. + * On a phone the stage opens under the picked prompt. + */ +const { demos, initialKey, surface = 'demos' } = defineProps<{ + demos: HomeDemoItem[] + /** `owner/repo/name` of the demo to show first, such as one from a shared link. */ + initialKey?: string + /** The analytics surface for the run chip, such as `home-demos`. */ + surface?: string +}>() + +const emit = defineEmits<{ pick: [demo: HomeDemoItem] }>() + +const stageId = useId() + +const picked = ref(Math.max(0, demos.findIndex(demo => demoKey(demo) === initialKey))) +const current = computed(() => demos[Math.min(picked.value, demos.length - 1)]) + +function pick(index: number): void { + picked.value = index + const demo = demos[index] + if (demo) + emit('pick', demo) +} + +function author(demo: HomeDemoItem): string { + return resolveAuthorName(demo.owner, demo.authorName) ?? demo.owner +} + + + + + diff --git a/app/components/DemoStage.vue b/app/components/DemoStage.vue new file mode 100644 index 00000000..e0acb53c --- /dev/null +++ b/app/components/DemoStage.vue @@ -0,0 +1,176 @@ + + +