@@ -44,8 +44,9 @@ interface Project {
4444 docs: string ;
4545}
4646
47- // Ordered as the stack reads — errors, the domain built on them, then the
48- // transports that carry it. unthrown leads: the other three build on it.
47+ // Ordered as the stack reads — errors, the domain built on them, the wiring
48+ // that assembles it, then the transports that carry it. unthrown leads: the
49+ // other four build on it.
4950const projects: Project [] = [
5051 {
5152 key: " unthrown" , tag: " Errors" , name: " unthrown" , pkg: " unthrown" , npm: " unthrown" ,
@@ -63,6 +64,14 @@ const projects: Project[] = [
6364 install: " pnpm add @btravstack/entity" ,
6465 repo: " https://github.com/btravstack/entity" , docs: " https://btravstack.github.io/entity/" ,
6566 },
67+ {
68+ key: " di" , tag: " Wiring" , name: " di" , pkg: " @btravstack/di" , npm: " @btravstack/di" ,
69+ logo: " /logos/di" , repoFull: " btravstack/di" , stars0: 1 ,
70+ 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." ,
71+ points: [" Ports named by the domain, not the adapter" , " Unmet dependencies are compile errors" , " Scoped resources release themselves" ],
72+ install: " pnpm add @btravstack/di unthrown" ,
73+ repo: " https://github.com/btravstack/di" , docs: " https://btravstack.github.io/di/" ,
74+ },
6675 {
6776 key: " amqp" , tag: " Messaging" , name: " amqp-contract" , pkg: " @amqp-contract/contract" , npm: " @amqp-contract/contract" ,
6877 logo: " /logos/amqp-contract" , repoFull: " btravstack/amqp-contract" , stars0: 18 ,
@@ -186,8 +195,8 @@ onMounted(() => {
186195
187196 <!-- The stack — each package in its own color -->
188197 <section id =" packages" class =" btv-section" >
189- <h2 class =" btv-h2" >Four libraries, one stack.</h2 >
190- <p class =" btv-section-lead" >Errors, domain, messaging and workflows — four focused packages that compose into one coherent backend.</p >
198+ <h2 class =" btv-h2" >Five libraries, one stack.</h2 >
199+ <p class =" btv-section-lead" >Errors, domain, wiring, messaging and workflows — five focused packages that compose into one coherent backend.</p >
191200 <div class =" btv-panels" >
192201 <article v-for =" p in projects" :key =" p.name" class =" btv-panel" :style =" { '--pkg': `var(--pkg-${p.key})` }" >
193202 <div class =" btv-panel-top" >
@@ -263,7 +272,7 @@ onMounted(() => {
263272 <a href =" https://github.com/btravstack" target =" _blank" rel =" noopener" class =" btv-cta btv-cta--big" >View on GitHub <span aria-hidden =" true" >↗</span ></a >
264273 </section >
265274
266- <!-- Ft3 · index footer (genuine hub for the four docs sites) -->
275+ <!-- Ft3 · index footer (genuine hub for the five docs sites) -->
267276 <footer class =" btv-foot" >
268277 <div class =" btv-foot-grid" >
269278 <div class =" btv-foot-brandcol" >
@@ -298,7 +307,7 @@ onMounted(() => {
298307/* Hallmark · genre: atmospheric (studied) · macrostructure: Ecosystem Index · design-system: design.md · designed-as-app
299308 * theme: studied-DNA (source: https://tanstack.com/) · studied: yes · DNA-source: url + screenshot
300309 * observed-DNA: neutral-black canvas · per-library accents · heavy grotesque display · real-stats hero · elevated panels
301- * nav: N1b three-section · footer: Ft3 index (genuine hub for 4 docs sites) · hero: wordmark-led + T4 stat strip (real numbers only)
310+ * nav: N1b three-section · footer: Ft3 index (genuine hub for 5 docs sites) · hero: wordmark-led + T4 stat strip (real numbers only)
302311 * enrichment: H9 original gradient mascot (Tier-B, kept) — the one character moment
303312 * contrast: pass (40–41) · honest: pass (46 — stars live from GitHub, downloads live from npm or "—") · chrome: pass (47)
304313 * tokens: pass (48) · responsive: pass (49)
0 commit comments