@@ -44,8 +44,8 @@ interface Project {
4444 docs: string ;
4545}
4646
47- // unthrown leads: it's the base the two contract packages build on, and the
48- // most versatile of the three.
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 .
4949const projects: Project [] = [
5050 {
5151 key: " unthrown" , tag: " Errors" , name: " unthrown" , pkg: " unthrown" , npm: " unthrown" ,
@@ -55,6 +55,14 @@ const projects: Project[] = [
5555 install: " pnpm add unthrown" ,
5656 repo: " https://github.com/btravstack/unthrown" , docs: " https://btravstack.github.io/unthrown/" ,
5757 },
58+ {
59+ key: " entity" , tag: " Domain" , name: " entity" , pkg: " @btravstack/entity" , npm: " @btravstack/entity" ,
60+ logo: " /logos/entity" , repoFull: " btravstack/entity" , stars0: 3 ,
61+ blurb: " Domain entities declared once. One field map gives you a type, four request/response schemas, behaviour, and a class that is itself a zod schema — so entities nest inside each other without losing what makes them entities." ,
62+ points: [" Branded fields and immutable data" , " Sealed construction, enforced invariants" , " Result instead of throws" ],
63+ install: " pnpm add @btravstack/entity" ,
64+ repo: " https://github.com/btravstack/entity" , docs: " https://btravstack.github.io/entity/" ,
65+ },
5866 {
5967 key: " amqp" , tag: " Messaging" , name: " amqp-contract" , pkg: " @amqp-contract/contract" , npm: " @amqp-contract/contract" ,
6068 logo: " /logos/amqp-contract" , repoFull: " btravstack/amqp-contract" , stars0: 18 ,
@@ -73,7 +81,7 @@ const projects: Project[] = [
7381 },
7482];
7583
76- /** Every repo shown on the page — the three published packages. */
84+ /** Every repo shown on the page — the published packages. */
7785const allRepos = projects ;
7886
7987const stars = reactive <Record <string , number >>(
@@ -178,8 +186,8 @@ onMounted(() => {
178186
179187 <!-- The stack — each package in its own color -->
180188 <section id =" packages" class =" btv-section" >
181- <h2 class =" btv-h2" >Three libraries, one stack.</h2 >
182- <p class =" btv-section-lead" >Errors, messaging and workflows — three focused packages that compose into one coherent backend.</p >
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 >
183191 <div class =" btv-panels" >
184192 <article v-for =" p in projects" :key =" p.name" class =" btv-panel" :style =" { '--pkg': `var(--pkg-${p.key})` }" >
185193 <div class =" btv-panel-top" >
0 commit comments