From 281d00d0b5af1dbbe30c9ce73f28c132c3b4eeed Mon Sep 17 00:00:00 2001 From: replynodes Date: Mon, 28 Sep 2026 17:21:53 +0200 Subject: [PATCH] feat: migrate brand kit to scoped npm package --- .github/workflows/release.yml | 2 +- CHANGELOG.md | 5 +++++ README.md | 18 ++++++++++-------- SKILL.md | 16 ++++++++++++++++ examples/brand-reference-package/README.md | 12 ++++++++++++ .../build-landing-page-with-agent/README.md | 13 +++++++++++++ examples/css-token-handoff/README.md | 12 ++++++++++++ examples/design-handoff-audit/README.md | 12 ++++++++++++ examples/generate-brand-kit/README.md | 12 ++++++++++++ llms.txt | 5 +++++ package-lock.json | 8 ++++---- package.json | 4 ++-- 12 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 SKILL.md create mode 100644 examples/brand-reference-package/README.md create mode 100644 examples/build-landing-page-with-agent/README.md create mode 100644 examples/css-token-handoff/README.md create mode 100644 examples/design-handoff-audit/README.md create mode 100644 examples/generate-brand-kit/README.md create mode 100644 llms.txt diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index adbd657..548a935 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,7 @@ jobs: main_commit="$(git rev-parse refs/remotes/origin/main^{commit})" git merge-base --is-ancestor "$tag_commit" "$main_commit" test -z "$(git status --porcelain=v1)" - node --input-type=module -e 'import fs from "node:fs"; const p = JSON.parse(fs.readFileSync("package.json", "utf8")); if (p.version !== process.env.VERSION) process.exit(1)' + node --input-type=module -e 'import fs from "node:fs"; const p = JSON.parse(fs.readFileSync("package.json", "utf8")); const l = JSON.parse(fs.readFileSync("package-lock.json", "utf8")); if (p.name !== "@replynodes/brand-kit" || p.version !== process.env.VERSION || l.name !== p.name || l.version !== p.version || l.packages?.[""].name !== p.name || l.packages?.[""].version !== p.version || p.bin?.["brand-kit"] !== "bin/brand-kit.mjs") process.exit(1)' grep -Fx -- "## $VERSION" CHANGELOG.md test "$(git rev-parse "refs/tags/$expected_tag^{commit}")" = "$tag_commit" - run: npm ci diff --git a/CHANGELOG.md b/CHANGELOG.md index 80477b5..fbfbb81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.1.1 + +- Migration target: publish the package as the public npm package `@replynodes/brand-kit`. +- npm publication is the v0.1.1 release target and has not yet occurred. + ## 0.1.0 - Initial public dependency-free CLI and deterministic six-file brand package. diff --git a/README.md b/README.md index 8fb5ccb..88fdb4e 100644 --- a/README.md +++ b/README.md @@ -5,26 +5,28 @@ Turn a public domain into a deterministic, agent-ready brand context package in ## 10-second demo ```sh -npx brand-kit linear.app +npx @replynodes/brand-kit linear.app cat brand/brand.json ``` ## Install and run ```sh -npm install -g brand-kit +npm install -g @replynodes/brand-kit brand-kit example.com ``` +The package is scoped as `@replynodes/brand-kit`, while the installed executable remains `brand-kit`. + Pass exactly one bare domain. The client supports Node.js `>=20.19.0` on Linux x64/arm64, macOS x64/arm64, and Windows x64. CI verifies Node 20.x and 22.x; that does not claim every OS combination is tested. ## Approved use cases -- Agent-ready brand context: `npx brand-kit linear.app` -- On-brand landing-page bootstrap: `npx brand-kit vercel.com` -- CSS/token handoff: `npx brand-kit stripe.com` -- Reusable reference package for slides/reports/email: `npx brand-kit github.com` -- Portable design handoff/audit: `npx brand-kit notion.so` +- Agent-ready brand context: `npx @replynodes/brand-kit linear.app` +- On-brand landing-page bootstrap: `npx @replynodes/brand-kit vercel.com` +- CSS/token handoff: `npx @replynodes/brand-kit stripe.com` +- Reusable reference package for slides/reports/email: `npx @replynodes/brand-kit github.com` +- Portable design handoff/audit: `npx @replynodes/brand-kit notion.so` ## Artifacts @@ -44,4 +46,4 @@ The client in this repository is MIT-licensed. The hosted aggregate service at ` ## Contribution and release notes -See `CONTRIBUTING.md` for checks and contribution boundaries. CI runs smoke/contract checks on Node 20.x and 22.x. A future release workflow is manually triggerable for SemVer npm trusted publishing with provenance; this initial issue does not publish a release. +See `CONTRIBUTING.md` for checks and contribution boundaries. CI runs smoke/contract checks on Node 20.x and 22.x. The v0.1.1 release target is publication of the scoped package to npm as a public package using trusted publishing with provenance; it has not yet been published. diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..c3611b1 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,16 @@ +# @replynodes/brand-kit + +Use the public npm package with one bare domain: + +```sh +npx @replynodes/brand-kit example.com +``` + +The package is scoped, but its installed executable remains `brand-kit`: + +```sh +npm install -g @replynodes/brand-kit +brand-kit example.com +``` + +The client makes one HTTPS GET to `https://brand.replynodes.com/{bare-domain}` and writes the deterministic brand artifacts locally. It requires no API key or signup, does not download binary assets, and does not claim capabilities beyond this service boundary. The v0.1.1 npm publication is the release target and has not yet occurred. diff --git a/examples/brand-reference-package/README.md b/examples/brand-reference-package/README.md new file mode 100644 index 0000000..a49d81f --- /dev/null +++ b/examples/brand-reference-package/README.md @@ -0,0 +1,12 @@ +# Reusable brand reference package for github.com + +Prepare local brand references for GitHub slides, reports, or email work: + +```sh +npx @replynodes/brand-kit github.com +``` + +The package is scoped as `@replynodes/brand-kit`. Version `0.1.1` publication is +the release target and has not happened. Runtime is one GET to +`https://brand.replynodes.com/github.com`; no API key or signup is required, and +no binary downloads are involved. diff --git a/examples/build-landing-page-with-agent/README.md b/examples/build-landing-page-with-agent/README.md new file mode 100644 index 0000000..e7f4a8b --- /dev/null +++ b/examples/build-landing-page-with-agent/README.md @@ -0,0 +1,13 @@ +# Build a landing page with an agent for vercel.com + +Give an agent a local, deterministic brand reference package for a Vercel +landing page: + +```sh +npx @replynodes/brand-kit vercel.com +``` + +The package is scoped as `@replynodes/brand-kit`. Version `0.1.1` publication is +the release target and has not happened. Runtime is one GET to +`https://brand.replynodes.com/vercel.com`; no API key or signup is required, and +no binary downloads are involved. diff --git a/examples/css-token-handoff/README.md b/examples/css-token-handoff/README.md new file mode 100644 index 0000000..a94c232 --- /dev/null +++ b/examples/css-token-handoff/README.md @@ -0,0 +1,12 @@ +# CSS and token handoff for stripe.com + +Generate local CSS and design-token references for a Stripe handoff: + +```sh +npx @replynodes/brand-kit stripe.com +``` + +The package is scoped as `@replynodes/brand-kit`. Version `0.1.1` publication is +the release target and has not happened. Runtime is one GET to +`https://brand.replynodes.com/stripe.com`; no API key or signup is required, and +no binary downloads are involved. diff --git a/examples/design-handoff-audit/README.md b/examples/design-handoff-audit/README.md new file mode 100644 index 0000000..0aae6be --- /dev/null +++ b/examples/design-handoff-audit/README.md @@ -0,0 +1,12 @@ +# Design handoff audit for notion.so + +Create a portable set of brand references for auditing a Notion design handoff: + +```sh +npx @replynodes/brand-kit notion.so +``` + +The package is scoped as `@replynodes/brand-kit`. Version `0.1.1` publication is +the release target and has not happened. Runtime is one GET to +`https://brand.replynodes.com/notion.so`; no API key or signup is required, and +no binary downloads are involved. diff --git a/examples/generate-brand-kit/README.md b/examples/generate-brand-kit/README.md new file mode 100644 index 0000000..6ff2ee1 --- /dev/null +++ b/examples/generate-brand-kit/README.md @@ -0,0 +1,12 @@ +# Generate a brand kit for linear.app + +Create an agent-ready local brand context package from Linear’s public domain: + +```sh +npx @replynodes/brand-kit linear.app +``` + +The package is scoped as `@replynodes/brand-kit`. Version `0.1.1` publication is +the release target and has not happened. At runtime, the client makes one GET to +`https://brand.replynodes.com/linear.app`; no API key or signup is required, and +no binary downloads are involved. diff --git a/llms.txt b/llms.txt new file mode 100644 index 0000000..282f744 --- /dev/null +++ b/llms.txt @@ -0,0 +1,5 @@ +# @replynodes/brand-kit + +Run `npx @replynodes/brand-kit ` with exactly one bare domain. A global install uses `npm install -g @replynodes/brand-kit`, then the executable is `brand-kit `. + +The client makes one HTTPS GET to `https://brand.replynodes.com/{bare-domain}` and writes local brand references and design artifacts. It requires no API key or signup and does not download binary assets. The v0.1.1 npm publication is the release target; the package is intended to be public on npm but is not yet published. diff --git a/package-lock.json b/package-lock.json index fbb27ed..23807f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "brand-kit", - "version": "0.1.0", + "name": "@replynodes/brand-kit", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "brand-kit", - "version": "0.1.0", + "name": "@replynodes/brand-kit", + "version": "0.1.1", "license": "MIT", "bin": { "brand-kit": "bin/brand-kit.mjs" }, "engines": { "node": ">=20.19.0" } diff --git a/package.json b/package.json index 24411de..2415eba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "brand-kit", - "version": "0.1.0", + "name": "@replynodes/brand-kit", + "version": "0.1.1", "description": "Generate a deterministic, agent-ready brand context package from a public brand aggregate.", "type": "module", "bin": { "brand-kit": "bin/brand-kit.mjs" },