Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions COPY.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ These exact strings. Do not paraphrase them per page.
| Tagline | Curated agent skills by humans. | index OG image alt |
| Site description | Curated agent skills by humans, written by real maintainers in their own GitHub repos | `nuxt.config.ts` site description (feeds every page's meta description) |
| Elevator pitch | Skilld is a curated registry of agent skills written by real people in the GitHub repos you already depend on. One install command, every agent; watch your stack and get a digest when it changes. | guidance only: no page ships it yet (use it where two sentences fit) |
| Home H1 | Hyped agent skills, no bloat | guidance only: the homepage H1. The page draws the rose brand dot as its full stop, so never type a period |
| Home H1 | Agent skills for you and your agent | guidance only: the homepage H1. The page draws the rose brand dot as its full stop, so never type a period |
| Home verb line | search Β· run Β· install Β· keep current | guidance only: the homepage line under the H1. Each verb links to its `/cli` section: `#search`, `#run`, `#install`, `#update` |
| Home CLI link | The skilld CLI β†’ | guidance only: the homepage link to `/cli` at the end of the verb line. The arrow is an icon |
| Home caption | skilld.dev finds and tracks skills. The CLI runs or installs them in 19 agents. | guidance only: the homepage caption under the verb line. 19 is `AGENT_TARGETS` in the CLI's `crates/skilld-core/src/target.rs`. If that count changes, change this string |
| Home claims line | Open-source CLI Β· Analytics without cookies or IPs Β· A skills.sh alternative | guidance only: the homepage claims line under the search. The third item links to `/vs/skills-sh`, and the promo label closes the line |
| Home caption | Try any skill before you install it. Your agent can search for its own. | guidance only: the homepage caption under the verb line. It assumes the reader knows what a Skill is, so it names only what sets skilld apart. "Search for its own" is the skilld Skill behind the promo label |
| Home claims line | Open-source CLI, no telemetry Β· Analytics without cookies or IPs Β· A skills.sh alternative | guidance only: the homepage claims line under the search. The third item links to `/vs/skills-sh`, and the promo label closes the line |
| Promo label | Teach your agent skilld | guidance only: the last item of the homepage claims line. It opens a popover with `npx skilld install skilld --global` |
| Step 01: find | Find Β· Stay hyped. A curated registry, plus what devs talk about on X and Bluesky. | guidance only: the first step of the homepage lifecycle band. The step name comes first, then the pitch line, then the description. Links `/skills/trending`. The braille spark motif pairs with the pitch line |
| Step 02: run | Run Β· No more skill bloat. Your Agent reads the Skill now. Nothing lands on disk. | guidance only: a homepage lifecycle step. Links `/cli#run`. It carries the band's one rose dot, because run is the default. The run chip motif pairs with the pitch line |
Expand All @@ -44,6 +44,7 @@ These exact strings. Do not paraphrase them per page.
| CLI claims line | Open-source CLI Β· No telemetry Β· 19 Agent targets | guidance only: the `/cli` claims line. The page counts the `--agent` values of `skilld install --help` |
| CLI install label | Install the CLI | guidance only: the label beside `npm install --global skilld` on `/cli` |
| Claim: open source | open-source CLI | guidance only: the CLI. Never call skilld.dev or its site open source |
| Claim: telemetry | no telemetry | guidance only: the CLI. Its README states that it sends no telemetry or analytics. Never say it of the site, which keeps anonymous analytics |
| Claim: privacy | analytics without cookies or IPs | guidance only: analytics and privacy copy. Never the bare "privacy-friendly" |
| Claim: comparison | skills.sh alternative | guidance only: always a link to `/vs/skills-sh` |

Expand Down Expand Up @@ -192,9 +193,8 @@ above is about naming our audience, not about the provenance claim.
technical sense: npm, PyPI, crates, RubyGems. That names a category, not a community size, so
the scoped ban above does not cover it.

**Exception, "hyped".** Harlan approved "hyped" for the homepage H1 and "Stay hyped" for the
find step of the homepage lifecycle band. Both name what devs talk about on X and Bluesky,
which we measure and show. Use them only for social trending. "Hot", "popular" and "top" stay banned.
**Exception, "hyped".** Harlan approved "Stay hyped" for the find step of the homepage
lifecycle band. It names what devs talk about on X and Bluesky, which we measure and show. Use "hyped" only for social trending. "Hot", "popular" and "top" stay banned.

## Open questions

Expand Down
2 changes: 1 addition & 1 deletion GLOSSARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ Collisions

**Is:** Skills ranked by devs talking about them on X and Bluesky (ADR-0004). Never by installs.

**Marketing phrase:** "hyped", as in the homepage H1 and the "Stay hyped" step. It names the same social signal.
**Marketing phrase:** "hyped", as in the "Stay hyped" step. It names the same social signal.

**Never:** popular, hot, top, leaderboard.

Expand Down
27 changes: 17 additions & 10 deletions app/pages/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import { avatarProxyUrl, githubAvatarProxyUrl } from '#shared/image-proxy'
import { TRENDING_RANGES } from '#shared/trending-range'
import OutcomeClusterGrid from '../components/OutcomeClusterGrid.vue'

const title = 'Taste-tested agent skills ecosystem Β· skilld'
const description = 'Agent skills written by their maintainers and read by a person before they go in. See what devs are sharing this week, find what your agent needs, and keep up when it changes.'
const title = 'Agent skills for you and your agent Β· skilld'
const description = 'Try any agent skill before you install it, and let your agent search for its own. Open-source CLI, no telemetry. A skills.sh alternative.'

useSeoMeta({
title,
Expand Down Expand Up @@ -232,8 +232,8 @@ function recentUpdateDescription(item: RecentUpdateCard): string {
<div class="home-hero__content mx-auto max-w-4xl px-4 text-center sm:px-6">
<!-- The rose dot is the full stop. Screen readers get a typed one. -->
<h1 id="hero-heading" class="home-hero-title font-semibold tracking-[-0.045em] text-highlighted text-balance">
Hyped agent skills,<br class="hidden sm:inline">
no bloat<span class="sr-only">.</span><span class="home-hero-dot" aria-hidden="true" />
Agent skills for you<br class="hidden sm:inline">
and your agent<span class="sr-only">.</span><span class="home-hero-dot" aria-hidden="true" />
</h1>
<!-- The product map: the CLI's own four verbs, each a door into /cli,
then the one quiet link to the whole CLI page. -->
Expand All @@ -250,18 +250,18 @@ function recentUpdateDescription(item: RecentUpdateCard): string {
The skilld CLI<UIcon name="i-lucide-arrow-right" class="size-3.5 shrink-0" aria-hidden="true" />
</NuxtLink>
</nav>
<!-- Both halves in one caption: the site finds and tracks, the CLI runs
and installs. 19 is AGENT_TARGETS in the CLI's
crates/skilld-core/src/target.rs. -->
<!-- What sets skilld apart, so the caption assumes the reader knows
what a Skill is. Run comes before install, and the skilld Skill
behind the promo below lets the agent search on its own. -->
<p class="home-hero__caption mx-auto mt-3 text-base leading-relaxed text-muted text-balance">
skilld.dev finds and tracks skills. The CLI runs or installs them in 19 agents.
Try any skill before you install it. Your agent can search for its own.
</p>

<HomeSearch class="mx-auto mt-8 max-w-xl text-left" />

<ul class="home-hero__claims home-hero-claims data-label mx-auto mt-5 list-none p-0" aria-label="About skilld">
<li>
<a href="https://github.com/skilld-dev/skilld" target="_blank" rel="noopener">Open-source CLI</a>
<a href="https://github.com/skilld-dev/skilld" target="_blank" rel="noopener">Open-source CLI, no telemetry</a>
</li>
<li>Analytics without cookies or IPs</li>
<li>
Expand Down Expand Up @@ -819,11 +819,18 @@ function recentUpdateDescription(item: RecentUpdateCard): string {
max-width: 48rem;
}

/* Separators only where the line fits on one row. */
/* A claim wraps as a whole, never mid phrase. */
.home-hero__claims > li {
white-space: nowrap;
}

/* Separators only where the line fits on one row. At 12px the four claims
measure about 830px, inside the 848px hero column. */
@media (min-width: 64rem) {
.home-hero__claims {
flex-wrap: nowrap;
column-gap: 0;
max-width: none;
}

.home-hero__claims > li + li::before {
Expand Down
2 changes: 1 addition & 1 deletion scripts/lib/production-smoke.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ export const ASSET_COHERENCE_PATH = '/skills/trending'
export const PRODUCTION_SMOKE_EXPECTATIONS: SmokeExpectation[] = [
// The hero words are asserted, not just an h1: the error branch renders an
// h1 too, so a homepage that lost its data would otherwise pass.
{ path: '/', status: 200, bodyContains: ['<h1', 'Hyped agent skills'] },
{ path: '/', status: 200, bodyContains: ['<h1', 'Agent skills for you'] },
{ path: '/alt', status: 301, location: '/' },
{ path: '/skills', status: 200, bodyContains: ['<h1'] },
// Exercise Skill data and behavior rules, which category pages do not read.
Expand Down
2 changes: 1 addition & 1 deletion test/unit/production-smoke.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ describe('production smoke contract', () => {
expect(PRODUCTION_SMOKE_EXPECTATIONS).toEqual(expect.arrayContaining([
// The homepage asserts its own hero words, because the page's error
// branch renders an h1 too.
{ path: '/', status: 200, bodyContains: ['<h1', 'Hyped agent skills'] },
{ path: '/', status: 200, bodyContains: ['<h1', 'Agent skills for you'] },
{ path: '/alt', status: 301, location: '/' },
{ path: '/skills', status: 200, bodyContains: ['<h1'] },
{ path: '/community', status: 200, bodyContains: ['<h1'] },
Expand Down