From 0b3e7c5f13faf8a68a038b007ae1c91c4959d410 Mon Sep 17 00:00:00 2001 From: Benoit TRAVERS Date: Mon, 10 Aug 2026 16:04:32 +0200 Subject: [PATCH 1/2] feat(website): add @btravstack/di to the stack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit di is published (0.1.0) with its docs live, so it joins the landing as the fifth panel. It sits third, after entity and before the two contract packages: the row now reads as the stack does — errors, the domain built on them, the wiring that assembles it, then the transports that carry it. Third place is also what keeps the two blues apart. In the three-column grid the panels wrap as unthrown · entity · di / amqp · temporal, so di's blue never touches temporal's indigo; appending it last would have put them side by side in the second row. New --pkg-di token, blue #3E7FD4: blue is plumbing — the connections behind the wall that everything visible runs on, which is what a wiring container is. It is the logo's own lighter blue, the one on the barrel rim and the plunger, so chrome and artwork stay one color. 4.72 on the dark card, 7.10 as darkened text on white (AA). Not di's docs accent #2A62B8, which is the logo's deep blue and measures 3.22 on the dark card, well under the 5.00–7.25 the other four occupy; btravstack/di#6 moves that half. The mark needed a light/dark pair, which di does not yet ship — logos/di-dark is its logo.svg unchanged, and logos/di-light inverts the three values that read against the canvas rather than against the artwork: the glass barrel, the plunger head and the needle shaft. Everything else is untouched. Elsewhere in the org these files are byte-identical copies of the docs originals, so btravstack/di#7 moves them back upstream. The install line names unthrown too — it is a peer dependency, and the panel would otherwise show a command that leaves the package unusable. The hero count and the footer link lists derive from the array, so only the section heading and lead needed the four-to-five edit. --- .changeset/di-accent-token.md | 16 +++++++++++ apps/website/.vitepress/theme/Landing.vue | 21 ++++++++++---- apps/website/public/logos/di-dark.svg | 30 ++++++++++++++++++++ apps/website/public/logos/di-light.svg | 34 +++++++++++++++++++++++ design.md | 17 +++++++----- packages/theme/src/tokens.css | 1 + 6 files changed, 106 insertions(+), 13 deletions(-) create mode 100644 .changeset/di-accent-token.md create mode 100644 apps/website/public/logos/di-dark.svg create mode 100644 apps/website/public/logos/di-light.svg diff --git a/.changeset/di-accent-token.md b/.changeset/di-accent-token.md new file mode 100644 index 0000000..0bdfcbf --- /dev/null +++ b/.changeset/di-accent-token.md @@ -0,0 +1,16 @@ +--- +"@btravstack/theme": minor +--- + +Add `--pkg-di`, blue `#3E7FD4`, for `@btravstack/di`. + +Blue is plumbing — the connections behind the wall that everything visible runs +on, which is what a wiring container is. The hex is the logo's own lighter blue +(the barrel rim, the plunger, the needle hub), so chrome and artwork stay one +color. + +di's docs site currently sets `--accent: #2a62b8`, the logo's *deep* blue. That +hex scores 3.22 against `--card` on the dark scheme, below the 5.00–7.25 band +the other four package accents occupy, so the landing takes the lighter blue +instead: 4.72 on the dark card, 7.10 as darkened text on white (AA). Repointing +di's docs to match is btravstack/di's half. diff --git a/apps/website/.vitepress/theme/Landing.vue b/apps/website/.vitepress/theme/Landing.vue index 9994b12..07f5069 100644 --- a/apps/website/.vitepress/theme/Landing.vue +++ b/apps/website/.vitepress/theme/Landing.vue @@ -44,8 +44,9 @@ interface Project { docs: string; } -// Ordered as the stack reads — errors, the domain built on them, then the -// transports that carry it. unthrown leads: the other three build on it. +// Ordered as the stack reads — errors, the domain built on them, the wiring +// that assembles it, then the transports that carry it. unthrown leads: the +// other four build on it. const projects: Project[] = [ { key: "unthrown", tag: "Errors", name: "unthrown", pkg: "unthrown", npm: "unthrown", @@ -63,6 +64,14 @@ const projects: Project[] = [ install: "pnpm add @btravstack/entity", repo: "https://github.com/btravstack/entity", docs: "https://btravstack.github.io/entity/", }, + { + key: "di", tag: "Wiring", name: "di", pkg: "@btravstack/di", npm: "@btravstack/di", + logo: "/logos/di", repoFull: "btravstack/di", stars0: 1, + blurb: "A module-based container. Ports are the vocabulary your application defines, providers bind them at one edge, and modules declare what they import and export — so internals stay private in a graph that is one flat map at runtime.", + points: ["Ports named by the domain, not the adapter", "Unmet dependencies are compile errors", "Scoped resources release themselves"], + install: "pnpm add @btravstack/di unthrown", + repo: "https://github.com/btravstack/di", docs: "https://btravstack.github.io/di/", + }, { key: "amqp", tag: "Messaging", name: "amqp-contract", pkg: "@amqp-contract/contract", npm: "@amqp-contract/contract", logo: "/logos/amqp-contract", repoFull: "btravstack/amqp-contract", stars0: 18, @@ -186,8 +195,8 @@ onMounted(() => {
-

Four libraries, one stack.

-

Errors, domain, messaging and workflows — four focused packages that compose into one coherent backend.

+

Five libraries, one stack.

+

Errors, domain, wiring, messaging and workflows — five focused packages that compose into one coherent backend.

- +