diff --git a/COPY.md b/COPY.md index ad7a51e3..9351d523 100644 --- a/COPY.md +++ b/COPY.md @@ -28,10 +28,12 @@ These exact strings. Do not paraphrase them per page. | 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 | | 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` | -| Tile: run | No more skill bloat: Run skills once off, fork, or install. | guidance only: a homepage tile, with the title before the colon. The run chip motif pairs with it | -| Tile: trending | Stay hyped: What devs talk about on X and Bluesky, weekly and monthly. | guidance only: a homepage tile. The braille spark motif pairs with it | -| Tile: changes | Keep updated: Watch repos and get a digest when their skills change. | guidance only: a homepage tile. The change grid motif pairs with it | -| Tile: platform | Built to be built on: CLI, API, SDK and MCP. | guidance only: a homepage tile | +| 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 | +| Step 03: install | Install or fork · One install writes to 19 Agents, pinned to a commit and checked before files land. Fork for an editable copy. | guidance only: a homepage lifecycle step. Links `/cli#install`. 19 is `AGENT_TARGETS` in the CLI's `crates/skilld-core/src/target.rs`. If that count changes, change this string | +| Step 04: update | Keep current · Keep updated. Watch repos and get a digest when their Skills change, or run `npx skilld outdated`. | guidance only: a homepage lifecycle step. Links `/cli#update`. The page prints the command through `skillOutdatedCmd`. The change grid motif pairs with the pitch line | +| Step 05: make | Make · Guides and three authoring Skills to write and review your own. | guidance only: a homepage lifecycle step. Links `/make-skill`. The three are `generate-package-skill`, `generate-project-skill` and `review-skill` | +| Step 06: build | Build on · Built to be built on. CLI, API, SDK, MCP and the Claude Code plugin. | guidance only: a homepage lifecycle step. Links `/developers` | | Home section: trending | Trending skills this week. | guidance only: the homepage trending section heading | | Home section: changes | Keep up with skill changes. | guidance only: the homepage section heading for watching and the digest | | Home section: authoring | Write a skill for your project. | guidance only: the homepage section heading for making a Skill | @@ -172,8 +174,8 @@ technical sense: npm, PyPI, crates, RubyGems. That names a category, not a commu the scoped ban above does not cover it. **Exception, "hyped".** Harlan approved "hyped" for the homepage H1 and "Stay hyped" for the -trending tile. 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. +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. ## Open questions diff --git a/DESIGN.md b/DESIGN.md index c9ad56e5..1b3b194d 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -459,3 +459,4 @@ These are editorial sets, not necessarily database collections yet. If a set has - **Run and install read as different materials**: run is a dashed border with a hollow dot, because nothing stays; install is a solid border with a filled dot, because files land. Run is preselected. Confirmed 2026-10-06. - **Trending shares the /skills shell**: `/skills/trending` uses the full-width layout from `/skills`. Its heading replaces `CompactPageHeader` and lines up with the results column. A sticky 14rem sidebar holds the range links, then the weekly CTA and the skilld install. Nothing sits right of the board, so the board takes every column the sidebar leaves. Rows switch on their own width, and the post carousel shows two cards where it has room. On narrow screens the ranges are a compact row above the board, and the CTA stays after the fifth row. Harlan asked for this on 2026-10-06. It supersedes the 2026-10-01 call that dropped the 9/3 sidebar for taking a quarter of the board's width: that sidebar sat right of a 64rem board, and this one sits left of a board that runs the full page width. - **Trending rows scan in one pass**: the rank is a plain mono number, and the first three are a step darker. Each metadata line runs source, stars, then the signal that ranked the row, and an empty slot renders nothing. Descriptions stop at two lines, the run chip is as wide as its command, and the post carousel shows whole cards only. The sidebar invitation drops the email preview and the card. Its button is the rail's one solid rose element, so the install chip beside it inks its dot. Harlan asked for this polish on 2026-10-06. +- **A six-step lifecycle band replaces the four tiles**: under the hero, one band maps the whole product in its real order: find, run, install or fork, keep current, make, build on. The site and the CLI share one line. Each step is one link: a mono `01` marker and step name, then one sans line that opens with its pitch line where COPY.md has one. A line of stone dots joins the steps. Run, the default, carries the band's one rose dot, so no step lights rose on hover. Six columns from 1024px; below that a vertical list with the dots down the left. Keep the band no taller than the tiles it replaced: the hero and the band must fit a 1440×900 viewport. Harlan approved it on 2026-10-06. diff --git a/GLOSSARY.md b/GLOSSARY.md index 483376ef..4500aba5 100644 --- a/GLOSSARY.md +++ b/GLOSSARY.md @@ -150,7 +150,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" tile. It names the same social signal. +**Marketing phrase:** "hyped", as in the homepage H1 and the "Stay hyped" step. It names the same social signal. **Never:** popular, hot, top, leaderboard. diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 301c25c6..3c9659aa 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -1019,147 +1019,6 @@ background: color-mix(in oklab, var(--ui-bg) 88%, transparent); } -/* the homepage doors: three things you can do here. Rose mark, mono arrow, a rule that lights on hover. */ -.home-doors { - background: var(--ui-bg); -} - -.home-door { - position: relative; - display: flex; - flex-direction: column; - gap: 0.5rem; - min-width: 0; - padding: 2.5rem 1.25rem; - color: inherit; - text-decoration: none; - border-top: 1px solid var(--ui-border); - transition: background-color 200ms ease-out; -} - -/* The rose rule: drawn from the left on hover, 300ms. */ -.home-door::before { - content: ''; - position: absolute; - top: -1px; - left: 0; - width: 0; - height: 2px; - background: var(--ui-primary); - transition: width 300ms ease-out; -} - -.home-door:hover, -.home-door:focus-visible { - background: var(--ui-bg-muted); -} - -.home-door:hover::before, -.home-door:focus-visible::before { - width: 100%; -} - -@media (min-width: 48rem) { - .home-door { - border-top: 0; - border-inline-start: 1px solid var(--ui-border); - } - - .home-door:first-child { - border-inline-start: 0; - padding-inline-start: 0; - } - - .home-door::before { - top: 0; - } -} - -/* A bare stroke icon, like the track tiles below. It takes the rose on hover. */ -.home-door-mark { - display: block; - width: 1.25rem; - height: 1.25rem; - margin-bottom: 0.5rem; - color: var(--ui-text-muted); - transition: color 200ms ease-out; -} - -.home-door:hover .home-door-mark, -.home-door:focus-visible .home-door-mark { - color: var(--ui-primary); -} - -.home-door-title { - display: inline-flex; - align-items: center; - gap: 0.4rem; - font-size: 1.125rem; - font-weight: 600; - letter-spacing: -0.02em; - line-height: 1.3; -} - -.home-door-arrow { - width: 1rem; - height: 1rem; - color: var(--ui-primary); - opacity: 0; - transform: translateX(-0.25rem); - transition: opacity 200ms ease-out, transform 200ms ease-out; -} - -.home-door:hover .home-door-arrow, -.home-door:focus-visible .home-door-arrow { - opacity: 1; - transform: translateX(0); -} - -.home-door-text { - font-size: 0.9375rem; - line-height: 1.6; - color: var(--ui-text-muted); - text-wrap: pretty; -} - -/* Phones get three one-line jump links. Each section intro below repeats the door text, - and the full doors cost a screen of scroll before the first section. Touch has no - hover, so the arrow stays visible. */ -@media (max-width: 47.999rem) { - .home-door { - flex-direction: row; - align-items: center; - gap: 0.75rem; - padding: 1rem 0; - } - - .home-door-mark { - margin-bottom: 0; - } - - .home-door-title { - flex: 1; - justify-content: space-between; - font-size: 1rem; - } - - .home-door-arrow { - opacity: 1; - transform: none; - } - - .home-door-text { - display: none; - } -} - -@media (prefers-reduced-motion: reduce) { - .home-door::before, - .home-door-arrow { - transition: none; - } -} - /* The H1 full stop is the brand dot, the hero's rose element. */ .home-hero-dot { display: inline-block; diff --git a/app/components/HomeLifecycle.vue b/app/components/HomeLifecycle.vue new file mode 100644 index 00000000..4d18e90b --- /dev/null +++ b/app/components/HomeLifecycle.vue @@ -0,0 +1,304 @@ + + + + + diff --git a/app/pages/index.vue b/app/pages/index.vue index 70780694..4fa1e270 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -173,13 +173,6 @@ const authoringEcosystems = [ { id: 'rubygems', label: 'RubyGems', icon: 'i-simple-icons-rubygems' }, ] as const -/** - * The trending band hides itself below MIN_TRENDING_TO_SHOW, so the door has - * to fall back to the page that always exists. An anchor to a section that did - * not render is a link that does nothing. - */ -const trendingDoorTarget = computed(() => (showTrending.value ? '#trending' : '/skills/trending')) - const renderNow = useState('render:now', () => Number(new Date())) function formatRelative(ts: number): string { @@ -293,30 +286,7 @@ function recentUpdateDescription(item: RecentUpdateCard): string { - +