From edc826a8f1ce206c117f8ea23c503931e35c1189 Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Tue, 13 Oct 2026 02:21:46 +1100 Subject: [PATCH] fix(email): rename digest wording to Skill updates --- COPY.md | 30 +++++++++++-------- GLOSSARY.md | 18 ++++++----- VISION.md | 24 +++++++-------- app/components/HomeLifecycle.vue | 2 +- app/components/WeeklyEmailPreview.vue | 2 +- app/pages/@[login]/liked.vue | 2 +- app/pages/index.vue | 4 +-- app/utils/why-skilld.ts | 2 +- layers/identity/app/pages/me/index.vue | 6 ++-- .../identity/app/pages/onboarding/email.vue | 8 ++--- layers/identity/server/api/digest/demo.get.ts | 2 +- .../server/routes/digest/preview.get.ts | 2 +- layers/identity/server/utils/unsubscribe.ts | 10 +++---- .../identity/server/utils/weekly-template.ts | 14 ++++----- .../app/components/skills/_DirectoryCta.vue | 2 +- .../marketing/app/pages/developers/index.vue | 2 +- layers/marketing/content/pages/privacy.md | 6 ++-- layers/marketing/content/pages/vs/context7.md | 2 +- shared/welcome-email-copy.ts | 2 +- test/unit/digest-template.test.ts | 9 ++++++ test/unit/email-form-submit.nuxt.test.ts | 2 +- test/unit/me-watchlist.nuxt.test.ts | 6 ++-- test/unit/unsubscribe-preferences.test.ts | 4 +-- test/unit/weekly-template.test.ts | 8 ++--- test/unit/welcome-email.test.ts | 2 +- 25 files changed, 94 insertions(+), 77 deletions(-) diff --git a/COPY.md b/COPY.md index ef6e2fdb..6bab4966 100644 --- a/COPY.md +++ b/COPY.md @@ -20,18 +20,22 @@ Replies go to `harlan@harlanzw.com`. Its one main action is "Open your account", linking to `/me`. Its footer is "Stop welcome emails", linking to a signed welcome unsubscribe URL. Signup sends one welcome email automatically when GitHub supplies an email address. -Onboarding has no welcome checkbox. It offers previews of the welcome, weekly, and digest emails. -Preview labels are "Preview the welcome", "Preview the weekly", and "Preview the digest". +Onboarding has no welcome checkbox. It offers previews of the welcome, weekly, and Skill updates emails. +Preview labels are "Preview the welcome", "Preview the weekly", and "Preview Skill updates". The welcome preview footer says "Email preferences" and links to `/me`. Preview loading says "Loading email preview". Failure says "Could not load the email preview. Try again." The weekly footer says "Your account is set to receive the weekly email." -The digest heading is "Skill updates". Its introduction is "Recent commits from repos you watch." +The Skill updates email uses "Skill updates" in its subject prefix, branding, and plain-text heading. +Account settings use "Monthly Skill updates" and "Send me monthly Skill updates". +Its heading is "Skill updates". Its introduction is "Recent commits from repos you watch." Its changes section is "Recent commits". Show author commit subjects, never generated summaries or Skill descriptions. If commit details are missing, say "Commit details are unavailable." Link "View commits" to the Skill file's GitHub history. -New accounts start with the weekly and digest choices unchecked. Saved choices stay as selected. +New accounts start with the weekly and Skill updates choices unchecked. Saved choices stay as selected. Onboarding and the welcome email say "We’ll only send other emails if you’ve opted in." The missing-address message is "Add an email address, or turn off all email choices." -Welcome unsubscribe says "You will not get welcome emails. Your weekly and digest settings are unchanged." +The Skill updates footer says "You get this because you enabled Skill updates." +Unsubscribe actions use "Stop Skill updates emails" and "Restore Skill updates emails". +Welcome unsubscribe says "You will not get welcome emails. Your weekly and Skill updates settings are unchanged." Skill validation in `/me` uses "Skill validation" and "Some of your Skills have validation issues." The action is "View validation issues". Source links use "Open SKILL.md". @@ -48,7 +52,7 @@ These exact strings. Do not paraphrase them per page. | Name | `skilld` lowercase by default, `Skilld` only at a sentence start, `skilld.dev` for the domain. Never SKILLD, Skill'd, Skill-d, SkillD. | guidance only (applies everywhere, not one placement) | | Tagline | Curated agent skills by humans. | guidance only: the five-word product summary. The homepage and its OG card use the Home H1 instead | | 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) | +| 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 Skill updates when it changes. | guidance only: no page ships it yet (use it where two sentences fit) | | Home H1 | Agent skills for you and your agent | index H1, index OG image alt | | Home caption | Try any skill before you install it. Your agent can search for its own. | guidance only: the homepage caption under the H1. 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. The homepage OG card uses it as its description | | Home claims line | Open-source CLI, no telemetry · A skills.sh alternative | guidance only: the homepage claims line under the search. The second item links to `/vs/skills-sh`, and the promo label closes the line | @@ -58,7 +62,7 @@ These exact strings. Do not paraphrase them per page. | Hero Agent logos | The seven `AGENT_LOGOS` icons, then `+66` | guidance only: the quiet row under the homepage claims line. Links `#agents`. Its label names each Agent. 66 is `AGENT_TARGETS` minus `AGENT_LOGOS` | | Step 1: find | Find Skills · Curated, plus what devs talk about. | guidance only: the first step of the homepage lifecycle band. The step name comes first, then one line. Links `/skills` | | Step 2: run | Run, Fork or Install · Run leaves nothing on disk. Fork or install to keep it. | guidance only: a homepage lifecycle step. Links `/cli#run`. It carries the band's one rose dot, because run is the default | -| Step 3: update | Keep up to date · Watch repos and get a digest when Skills change. | guidance only: a homepage lifecycle step. Links `/cli#update` | +| Step 3: update | Keep up to date · Watch repos and get Skill updates when Skills change. | guidance only: a homepage lifecycle step. Links `/cli#update` | | Pitch lines | Stay hyped. · No more skill bloat. · Keep updated. · Built to be built on. | guidance only: approved pitch lines for find, run, update and build on. The DESIGN.md motifs pair with them | | Home section: trending | Trending skills this week. | guidance only: the homepage trending section heading | | Home section: agents | Works with your agent. · The CLI installs into 73 Agents. ChatGPT, Claude, and other MCP apps search the registry from the chat. | guidance only: the homepage Agents section heading and line. 73 is `AGENT_TARGETS.length` | @@ -81,7 +85,7 @@ These exact strings. Do not paraphrase them per page. | Demo token usage | {n} tokens · Input: {input}; cached input: {cached}; output: {output} | guidance only: recording metadata. Counts come from recorded usage. Cached input is included in input. Omit unavailable counts. | | Demo provenance | {Agent logo} {model}, {effort} effort | guidance only: the recording line on the Skill page panel and the homepage stage. Screen readers and the title get "Recorded with {agent}, {model}, {effort} effort". Omit effort when the recording has no evidence for it. 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 | +| Home section: changes | Keep up with skill changes. | guidance only: the homepage section heading for watching and Skill updates | | Home section: why | What skilld does differently. | guidance only: the homepage Why band heading, after trending. No line under it: the three columns from `HOME_WHY_REASONS` follow directly, each a title, `summary`, and picture. Their skills.sh lines stay on `/vs/skills-sh` | | Why trust line | Built by Harlan Wilton · Compare with skills.sh | guidance only: the line that closes the homepage Why band. The avatar and name link Harlan's GitHub, and the button opens `/vs/skills-sh`. The columns carry every claim, so the line carries none | | Why reasons | Human first · Preview the output · Independent and open source · Open trending weights · No more skill bloat · Know what it runs · Know what it costs · No telemetry | guidance only: the reason titles. Each has a one-line `summary` for the homepage and a full `line` for the comparison. The homepage shows the first three, which Harlan chose on 2026-10-07. `WHY_REASONS` in `app/utils/why-skilld.ts` holds each title, its line, and the sourced skills.sh line, and both surfaces read it. The Preview line opens with the Demos line above. Open trending weights links the ranking code, so its weights must match `shared/trending-skill-score.ts`. Know what it runs never claims a Skill is safe | @@ -123,16 +127,16 @@ The homepage deck has no collection section. Its old heading, "Install a collect **1 sentence:** Skilld is a curated registry of agent skills written by real people in the GitHub repos you already depend on. -**2 sentences:** 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. +**2 sentences:** 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 Skill updates when it changes. -**1 paragraph:** Skilld is a curated registry of agent skills written by real people in the GitHub repos developers already depend on. Every skill stays in its author's repo with a link back to the source, so you can see who wrote it and read it before you run it. The platform tracks those skill files, surfaces what changed, and ships them through one install command that works across every agent. Sign in with GitHub to watch the repos you depend on; we send a monthly digest when their skills change so your agent stays current as the underlying packages evolve. +**1 paragraph:** Skilld is a curated registry of agent skills written by real people in the GitHub repos developers already depend on. Every skill stays in its author's repo with a link back to the source, so you can see who wrote it and read it before you run it. The platform tracks those skill files, surfaces what changed, and ships them through one install command that works across every agent. Sign in with GitHub to watch the repos you depend on; we send monthly Skill updates when their skills change so your agent stays current as the underlying packages evolve. ### Value propositions | For... | Value | |--------|-------| | Developers picking skills | Skills written by people who know the tool, with the source one click away, and one install command across every agent | -| Developers staying current | Watch the repos you depend on, get a monthly digest when their skills change | +| Developers staying current | Watch the repos you depend on, get monthly Skill updates when their skills change | | Teams standardizing | Hand-picked collections install a stack in one command | ### Skill fork requests @@ -148,9 +152,9 @@ Check existing files before fetching. Keep licence and provenance checks. ### Watch and weekly promotions -The watch promotion says: `Watch a repo. Each month the digest lists what changed. If nothing changed, we send nothing.` +The watch promotion says: `Watch a repo. Get monthly Skill updates with commits affecting its Skills. If nothing changed, we send nothing.` The link to `/weekly/preview` says: `Preview the weekly`. -The comparison table says: `Watch for changes, monthly digest`. +The comparison table says: `Watch for changes, monthly Skill updates`. ### Ranked boards diff --git a/GLOSSARY.md b/GLOSSARY.md index 46c2af39..3a4051cb 100644 --- a/GLOSSARY.md +++ b/GLOSSARY.md @@ -25,7 +25,7 @@ Shared terms match the skilld CLI glossary (`skilld-dev/skilld/GLOSSARY.md`). Th | curator | `layers/collections`, `/@login` | curator 1—N collection | "curator" | | collection | `layers/collections`, `/@login/slug` | collection N—N Skill | "collection" | | watch | `layers/identity` | account N—N Repository or collection | "watch" | -| digest | `layers/identity` email | account 1—1 digest schedule | "digest" | +| Skill updates | `layers/identity` email | account 1—1 monthly email schedule | "Skill updates" | | track | `/skills/`, `layers/registry`, MCP `list_tracks` and `get_track` | track 1—N Skill | "track" | | comparison | `/compare/`, `layers/marketing` | comparison N—N Skill | "comparison" | | trending | `/skills/trending`, ADR-0004 | Repository 1—N social mention | "trending" | @@ -191,15 +191,19 @@ UI fixtures are labelled Example data. They are not recorded runs or evaluation ### watch -**Is:** subscribing to a Repository or collection so the digest reports its changes. The Loop 2 verb. +**Is:** subscribing to a Repository or collection so the Skill updates email reports its changes. The Loop 2 verb. **Never:** follow, star, subscribe, sync. -### digest +### Skill updates -**Is:** the monthly email that summarises changes to watched Repositories. The user can turn it off. +**Is:** the monthly email showing commits affecting Skills in watched Repositories. The user can turn it off. -**Never:** newsletter, notification, alert. "the weekly" is the separate weekly email. +**Use for:** the email, its preview, and account email settings. Add "monthly" when stating its schedule. + +**Never:** digest, newsletter, notification, alert as names for this email. "The weekly" is the separate weekly email. + +**Identifiers:** existing `digest` routes, database fields, and API values keep their technical names. Cryptographic digests name a separate concept. ### trending @@ -380,9 +384,9 @@ Existing route paths, table names, and protocol fields keep their identifiers. **Is:** the weekly email with distinct trending Skills. New accounts choose during onboarding; both recurring email choices start unchecked. Existing accounts keep their saved choices. -**Use for:** "the weekly", lowercase. It sits beside **digest**, which is the separate watched-Repository email. They are not the same send. +**Use for:** "the weekly", lowercase. It sits beside **Skill updates**, which is the separate watched-Repository email. They are not the same send. -**Never:** newsletter, roundup, trending digest. +**Never:** newsletter, roundup, trending Skill updates. ### task search diff --git a/VISION.md b/VISION.md index 68294f13..99e6fc0f 100644 --- a/VISION.md +++ b/VISION.md @@ -1,5 +1,5 @@ --- -scope: skilld.dev (registry site, skilld CLI, discovery MCP server (planned, see docs/work/README.md), digest emails) +scope: skilld.dev (registry site, skilld CLI, discovery MCP server (planned, see docs/work/README.md), Skill updates emails) distilled-from: two-loop product model (AGENTS.md), COPY.md + DESIGN.md, ADR-0001 (URL pillars) + ADR-0002 (frozen identity) + ADR-0004 (self-sourced trending signal) + ADR-0005 (v3 product boundary), 2026-06 catalog hard-retire to indexable-only (~2.1k) + semantic search, 2026-06-16 deindex remediation (scaled-content suppression, 0.6% indexed), 2026-07-15 design engineer beachhead, Context7/skills.sh differentiation, 2026-08-04 posture decisions (free strategic asset; destination = curation authority + watch moat; beachhead framing), 2026-08-04 grill vs code audit + landscape research (installs never rank or trust; stars as the verifiable popularity signal; leaderboard kept as reviewed showcase; review-not-audit safety claim; watch asset broadened beyond the email; SEO carve-out for agent-name queries; `skilld author` as maintainer authoring aid; guides layer culled), 2026-08-20 v3 direction (Rust skilld CLI, skilld-maintained Skills, Harness, attested Artifact delivery) last-reviewed: 2026-08-20 hard-cap: 7 principles, ~280 lines. Adding a principle requires removing one. @@ -15,12 +15,12 @@ What skilld is, why it exists, and how the pieces grow each other. This doc exis **Curated agent skills by humans.** Skills are knowledge, and knowledge has an author. A skill is worth installing because a person who knows the tool wrote it, so provenance is the quality signal: which repository contains it, and whether you can read it before you run it. skilld is the registry that treats this as the organizing fact. Every skill is a SKILL.md a maintainer wrote and still owns, surfaced with a link back to the source, usable with one command that works with every agent. -**Transient by default.** A Skill is knowledge, not a dependency, so the default is to use it, not to keep it. `skilld run` hands the Agent the Skill for one session and writes no file, no lockfile entry, and no Agent target. Installing stays one command away and earns its place: it is for the Skill you want in every session, and it is the only path the digest watches. This lowers the cost of trying a Skill to nothing, which is exactly the cost curation needs to be cheap to act on. +**Transient by default.** A Skill is knowledge, not a dependency, so the default is to use it, not to keep it. `skilld run` hands the Agent the Skill for one session and writes no file, no lockfile entry, and no Agent target. Installing stays one command away and earns its place: it is for the Skill you want in every session, and it is the only path Skill updates watches. This lowers the cost of trying a Skill to nothing, which is exactly the cost curation needs to be cheap to act on. **The two loops are the whole product.** Every change must serve one; if a feature serves neither, cut it. - **Loop 1, Activation:** anonymous discovery → run. Land on skilld.dev, see curated Skills and recent changes, open a Skill detail, copy `npx skilld run owner/repository/skill`, give it to the Agent. The Agent reads the Skill and follows it, and nothing lands in the repository. Installing is the second step, taken only for a Skill worth keeping in every session. No auth, no email, no friction. This is the SEO-bearing surface and the top of funnel. -- **Loop 2, Retention:** sign in with GitHub, bulk-import starred repositories that have Skills, watch collections, receive a digest when watched repositories change. The lifecycle hook and the moat. +- **Loop 2, Retention:** sign in with GitHub, bulk-import starred repositories that have Skills, watch collections, receive Skill updates when watched repositories change. The lifecycle hook and the moat. They live on the same site but are sold separately: Loop 1 is the headline, Loop 2 is a CTA strip and a "Watch for changes" affordance. Identity is one namespace, the GitHub login; collection URLs are `/@/`. @@ -30,7 +30,7 @@ They live on the same site but are sold separately: Loop 1 is the headline, Loop **Safety, claimed carefully.** In the year registries shipped malicious Skills by the hundreds (ClawHavoc; 13.4% of scanned public Skills critically flawed), "is this safe to run" became the first question. Every admitted Skill has provenance and readable source. Artifact attestations add source and integrity verification with exact check results. We never claim that a Skill is safe. "Secure", "scanned", and "verified safe" remain banned claims. -**Destination (north star).** Two linked bets, and pointedly not a third. First, **curation authority**: skilld becomes the place whose taste decides which Skills are worth installing, the Wirecutter of Agent Skills, where "featured on skilld" means something because most things aren't. Second, the **watch moat**: skilld is how a developer's Agent stack stays current. The asset is the revision history, diff intelligence, and freshness data, which power the registry pages, the SEO surface, and the digest alike; the email is one output of the asset, never the asset itself. A vendor shipping `skills update --all` syncs files blindly; only the party holding the diffs can say what changed and whether it matters, so the bet survives that feature. Nobody else is building this, and it compounds with every watched repository. The rejected third bet: becoming "the npm of Skills." GitHub is the source of truth and should stay so; we build no publish flow, own no namespace, and hold no Skill hostage. Being the trusted layer on top of GitHub is the position; being the infrastructure underneath is a fight we don't need and a capture we don't want. +**Destination (north star).** Two linked bets, and pointedly not a third. First, **curation authority**: skilld becomes the place whose taste decides which Skills are worth installing, the Wirecutter of Agent Skills, where "featured on skilld" means something because most things aren't. Second, the **watch moat**: skilld is how a developer's Agent stack stays current. The asset is the revision history, diff intelligence, and freshness data, which power the registry pages, the SEO surface, and Skill updates alike; the email is one output of the asset, never the asset itself. A vendor shipping `skills update --all` syncs files blindly; only the party holding the diffs can say what changed and whether it matters, so the bet survives that feature. Nobody else is building this, and it compounds with every watched repository. The rejected third bet: becoming "the npm of Skills." GitHub is the source of truth and should stay so; we build no publish flow, own no namespace, and hold no Skill hostage. Being the trusted layer on top of GitHub is the position; being the infrastructure underneath is a fight we don't need and a capture we don't want. --- @@ -72,8 +72,8 @@ Each surface feeds the next. A change that strengthens a loop edge is high-lever 1. **The skilld CLI** (`npx skilld run owner/repository/skill`) solves the day-1 problem: use a Skill right now, across every Agent, with nothing to clean up. `npx skilld install` is the second command, for a Skill worth keeping as local files and keeping current. The CLI is the trust anchor and the distribution unit; the run command itself travels in READMEs, tweets, and docs, and it is cheaper to share because trying it is free. 2. **The registry site** converts search intent into installs. Skill, repository, and owner pages under `/gh/*` rank for the queries our users search; npm-guides pSEO and marketing pages extend the surface. Every indexable page is a curated page (principle 2), which is what makes the surface recover and hold rank after the 2026-06 suppression. 3. **Collections and curators** are the people layer. A curator assembles a stack at `/@login/slug`, installable in one command. Collections are the shareable artifact: a curator promoting their own collection is distribution we don't pay for, and people-first discovery (Letterboxd energy: people first, counts as context) is the brand. -4. **Watch and digest** convert a visitor into a returner. Sign in with GitHub, import starred repositories, watch what you depend on; the digest arrives when something actually changed. This edge feeds itself: digest links land back on Skill pages, freshness data makes the registry pages better. -5. **Back-edge: freshness is shareable.** "X updated their skill, here's the diff that matters" is a screenshot and a post. The digest, the changelog view, and the collection page are all artifacts a developer shares unprompted, feeding edges 1 and 2. +4. **Watch and Skill updates** convert a visitor into a returner. Sign in with GitHub, import starred repositories, watch what you depend on; Skill updates arrives when something actually changed. This edge feeds itself: Skill updates links land back on Skill pages, freshness data makes the registry pages better. +5. **Back-edge: freshness is shareable.** "X updated their skill, here's the diff that matters" is a screenshot and a post. Skill updates, the changelog view, and the collection page are all artifacts a developer shares unprompted, feeding edges 1 and 2. **Channels.** Named so channel ideas can be rejected too. Founder audience first: build-in-public posts from Harlan's account are first-class work. Then: registry SEO (edge 2), the install command spreading through maintainers' own READMEs, curator-shared collection links (edge 3), MCP registry listings. **Rejects:** paid ads; engagement-bait; badge-farming programs for maintainers; any channel whose copy fails the brand guidelines' banned-language list. @@ -97,7 +97,7 @@ The filter for skilld-scoped work, precise enough to hold a proposal next to it A Skill is trustworthy because you can see who wrote it and read it before you run it. Every surface that shows a Skill names the author. The Skill page links the exact source file in its repository; other surfaces link the Skill page, which is where a visitor inspects a Skill. When GitHub moves a Repository, its Skills move to the new name and every old URL answers 301 (ADR-0015), so provenance URLs never rot. Machine-generated metadata is labeled as such and never dressed as authorship. -**How to apply:** no Skill card, search result, or digest entry ships without its author and a link to its Skill page or its source. A layout that drops provenance to save space fails review. Trust signals (official repository, owner-verified) are earned facts, never editorial favors. +**How to apply:** no Skill card, search result, or Skill updates entry ships without its author and a link to its Skill page or its source. A layout that drops provenance to save space fails review. Trust signals (official repository, owner-verified) are earned facts, never editorial favors. **Test:** from any surface showing a Skill, can the user reach its Skill page in one click, and the exact SKILL.md in the author's repository from there? If not, fail. @@ -117,13 +117,13 @@ Loop 1 admits no gate, and the first command costs the user nothing. Anonymous v **Test:** can a first-time anonymous visitor go from landing to a working run command inside a minute, and does that command change nothing on their disk? If any step demands identity first, fail. -### 4. The digest earns its send +### 4. Skill updates earns its send -Loop 2 lives or dies on one email being worth opening. A digest says what changed and why it matters: the diff that affects usage, not commit noise. The revision and diff pipeline behind it is the deep asset; digest quality is the proof that watching skilld beats watching GitHub notifications. +Loop 2 lives or dies on one email being worth opening. Skill updates says what changed and why it matters: the diff that affects usage, not commit noise. The revision and diff pipeline behind it is the deep asset; Skill updates quality is the proof that watching skilld beats watching GitHub notifications. -**How to apply:** digest content is curated by the same bar as the site: material changes summarized, noise dropped, silence when nothing meaningful happened. An empty month sends nothing. Watched changes arrive monthly; the user can turn the digest off. The separate weekly email covers trending Skills. Never increase digest frequency without the user's choice. The bet is instrumented, not assumed: digest opens, clicks, and forwards are the evidence that decides further Loop 2 investment (bar lives in docs/work/README.md). +**How to apply:** Skill updates content is curated by the same bar as the site: material changes summarized, noise dropped, silence when nothing meaningful happened. An empty month sends nothing. Watched changes arrive monthly; the user can turn Skill updates off. The separate weekly email covers trending Skills. Never increase Skill updates frequency without the user's choice. The bet is instrumented, not assumed: Skill updates opens, clicks, and forwards are the evidence that decides further Loop 2 investment (bar lives in docs/work/README.md). -**Test:** would a developer forward this digest to a teammate? Does it link back to a page that shows the change? A digest that exists to remind users we exist fails. +**Test:** would a developer forward this Skill updates email to a teammate? Does it link back to a page that shows the change? A Skill updates email that exists to remind users we exist fails. ### 5. Local files, never a runtime dependency @@ -158,7 +158,7 @@ The interface recedes; the content speaks. Warm stone, rare rose, mono chrome, b 3. **No pay-to-play, ever.** No sponsored listings, promoted skills, paid placement, or ads. This is the money posture made permanent: curation that can be bought is not curation. 4. **Popularity is never the quality signal.** Unverifiable third-party counts (installs scraped from skills.sh) never order a surface, never feed trust tiers, and never appear as our numbers; we cannot vouch for a figure we cannot source. GitHub stars are the one sanctioned popularity signal: verifiable at the canonical source, synced for free, honest to display. Stars may order browse surfaces (catalog sort, the human-reviewed leaderboard) and may feed trust as a supporting input (a well-starred repository has earned community evidence), but stars alone never grant the top trust tier: admission and the highest trust signals stay human judgments, the homepage's organizing principle stays curation and freshness, and no star count ever substitutes for review. **Likes carve-out (ADR-0003, 2026-08-10):** Skill likes are first-party (a row we wrote, keyed to a GitHub-authenticated user, so we can state exactly what the number counts) and Skill-grained (stars measure a repository and lend the same count to all twenty Skills inside it). Like counts may be displayed and may back an opt-in `?sort=likes`. They never feed trust, never affect admission, never become a default order, and never order a trending surface: a board ranked by our own users' taste is a mirror. The carve-out covers display and that one sort key; every other clause above holds unchanged. **Trending carve-out (ADR-0004, 2026-08-19):** `/skills/trending` and the weekly email are ordered by social mentions we record ourselves from the public X and Bluesky APIs, and by star surges on repositories holding exactly one Skill. Both pass the test that admitted stars and rejected installs: we can state what the number counts, and a reader can check it, because every socially attributed row ships the post that named the Skill with its author and link. Each row states which route named it; a heading may never claim people named something when a star count did. Neither signal feeds trust or admission, and installs stay barred. **Track carve-out (ADR-0010, 2026-10-06):** a track page may lead with the Skills devs talked about, by posts alone and under the same rules, once at least five qualify; every other section names its own order. **Awards carve-out (ADR-0011, 2026-10-06):** a trending award keeps the best rank an evidenced row reached on the week or month board, dated to its period, on the Skill page and on an opt-in README badge. It repeats a claim the board already made with its evidence, so no one can buy or farm it. Star filler and the all-time range earn none, and awards never feed trust, admission, indexability, or order. 5. **We are not the npm of skills.** No publish flow and no namespace ownership. GitHub is the registry of record. Artifact delivery may cache immutable signed bytes for installation. It never becomes the source of truth. Protocol work serves the skilld CLI and requires a dated ADR. -6. **We do not optimize engagement.** Sessions per week is not a goal. Time-to-install and digest usefulness are. No streaks, no notification escalation, no re-engagement campaigns beyond the digest the user asked for. +6. **We do not optimize engagement.** Sessions per week is not a goal. Time-to-install and Skill updates usefulness are. No streaks, no notification escalation, no re-engagement campaigns beyond the Skill updates email the user asked for. 7. **We are not an enterprise product.** No private registries, SSO, seats, or compliance surface. Private GitHub Artifact delivery is transient and account scoped. The free posture cannot carry enterprise support obligations. --- diff --git a/app/components/HomeLifecycle.vue b/app/components/HomeLifecycle.vue index cab14a71..034a1da3 100644 --- a/app/components/HomeLifecycle.vue +++ b/app/components/HomeLifecycle.vue @@ -35,7 +35,7 @@ const steps: LifecycleStep[] = [ id: 'update', name: 'Keep up to date', to: '/cli#update', - text: 'Watch repos and get a digest when Skills change.', + text: 'Watch repos and get Skill updates when Skills change.', }, ] diff --git a/app/components/WeeklyEmailPreview.vue b/app/components/WeeklyEmailPreview.vue index 57f4c636..44674816 100644 --- a/app/components/WeeklyEmailPreview.vue +++ b/app/components/WeeklyEmailPreview.vue @@ -36,7 +36,7 @@ const card = computed(() => -->

- Example digest · real source changes + Example Skill updates · real commits