@rizom/site-rizom-ai 0.2.0-alpha.196 → 0.2.0-alpha.197

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rizom/site-rizom-ai",
3
- "version": "0.2.0-alpha.196",
3
+ "version": "0.2.0-alpha.197",
4
4
  "description": "Rizom AI site package for hosted Rover deployments",
5
5
  "type": "module",
6
6
  "exports": {
@@ -18,9 +18,9 @@
18
18
  "prepack": "publish-manifest prepare"
19
19
  },
20
20
  "dependencies": {
21
- "@rizom/site": "0.2.0-alpha.196",
22
- "@rizom/site-rizom": "0.2.0-alpha.196",
23
- "@rizom/site-sections": "0.2.0-alpha.196",
21
+ "@rizom/site": "0.2.0-alpha.197",
22
+ "@rizom/site-rizom": "0.2.0-alpha.197",
23
+ "@rizom/site-sections": "0.2.0-alpha.197",
24
24
  "preact": "^10.27.2"
25
25
  },
26
26
  "publishConfig": {
@@ -10,7 +10,7 @@ export function GrowthDiagram(): JSX.Element {
10
10
  return (
11
11
  <div className="growth reveal reveal-delay-1 mt-5">
12
12
  <svg
13
- viewBox="0 0 980 290"
13
+ viewBox="0 0 980 274"
14
14
  role="img"
15
15
  aria-label="One brain growing into a team, then a network"
16
16
  >
@@ -233,7 +233,8 @@ export function GrowthDiagram(): JSX.Element {
233
233
  d="M941,141 C958,141 972,140 995,139"
234
234
  />
235
235
 
236
- {/* labels along a common baseline */}
236
+ {/* labels along a common baseline — the stage columns beneath the
237
+ diagram carry the words, so the sub-labels are gone (rev 10) */}
237
238
  <line className="tick" x1="110" y1="238" x2="110" y2="248" />
238
239
  <text
239
240
  className="gt-you"
@@ -244,15 +245,6 @@ export function GrowthDiagram(): JSX.Element {
244
245
  >
245
246
  You
246
247
  </text>
247
- <text
248
- className="gt-sub"
249
- x="110"
250
- y="281"
251
- text-anchor="middle"
252
- style="--d:.5s"
253
- >
254
- personal brain · available now
255
- </text>
256
248
  <line className="tick" x1="452" y1="238" x2="452" y2="248" />
257
249
  <text
258
250
  className="gt-team"
@@ -263,15 +255,6 @@ export function GrowthDiagram(): JSX.Element {
263
255
  >
264
256
  Team
265
257
  </text>
266
- <text
267
- className="gt-sub"
268
- x="452"
269
- y="281"
270
- text-anchor="middle"
271
- style="--d:1.1s"
272
- >
273
- shared intelligence · the team bundle
274
- </text>
275
258
  <line className="tick" x1="795" y1="238" x2="795" y2="248" />
276
259
  <text
277
260
  className="gt-net"
@@ -282,15 +265,6 @@ export function GrowthDiagram(): JSX.Element {
282
265
  >
283
266
  Network
284
267
  </text>
285
- <text
286
- className="gt-sub"
287
- x="795"
288
- y="281"
289
- text-anchor="middle"
290
- style="--d:1.8s"
291
- >
292
- distributed expertise · emerging
293
- </text>
294
268
  </svg>
295
269
  </div>
296
270
  );
package/src/home.tsx CHANGED
@@ -19,35 +19,60 @@ import {
19
19
  /**
20
20
  * The umbrella home page. The hero is the live agent proximity map (wired in
21
21
  * routes.ts as agent-discovery:proximity-map); the sections here tell the
22
- * story the map opens — the dark it fights (problem), the one light that
23
- * starts it (the product hook), how the network grows (growth), the mission
24
- * band, the three faces, and the living-proof colophon.
22
+ * rev-10 story the map opens — the pain (problem, withered), how the parts
23
+ * come together (growth carries the system: brain, practice, network), the
24
+ * mission band (the quote alone), the single ask (one-light), the three
25
+ * faces, and the living-proof colophon.
25
26
  * Each section is authored from one zod schema (its component's props are
26
27
  * `z.infer` of that schema); copy is content-driven, stored as markdown in
27
28
  * site-content/home/<section>.md. Only the assembled section group is
28
29
  * exported — the schemas and components are module-local.
29
30
  */
30
31
 
31
- /* ============ growth diagram ============ */
32
+ /* ============ growth diagram + the three stages ============ */
33
+
34
+ const growthStageSchema = z.object({
35
+ title: z.string(),
36
+ text: z.string(),
37
+ });
32
38
 
33
39
  const growthSchema = z.object({
34
40
  cap: z.string(),
35
- capNote: z.string(),
36
- note: z.string(),
41
+ capNote: z.string().optional(),
42
+ stages: z.array(growthStageSchema),
37
43
  });
38
44
 
45
+ /* Stage columns are keyed to the diagram's zone colors by position:
46
+ You (brass, the brain) → Team (ruby, the practice) → Network (moss). */
47
+ const STAGE_TITLE_COLOR = [
48
+ "text-[color:var(--palette-brass)]",
49
+ "text-[color:var(--palette-ruby-soft)]",
50
+ "text-[color:var(--palette-moss)]",
51
+ ];
52
+
39
53
  function HomeGrowthSection({
40
54
  cap,
41
55
  capNote,
42
- note,
56
+ stages,
43
57
  }: z.infer<typeof growthSchema>): JSX.Element {
44
58
  return (
45
59
  <Section id="growth" className="py-14">
46
60
  <SectCap lead={cap} trail={capNote} />
47
61
  <GrowthDiagram />
48
- <p className="reveal reveal-delay-2 mt-5 max-w-[52em] font-display text-[17px] font-normal italic text-theme-light [font-variation-settings:'SOFT'_85]">
49
- {renderHighlightedText(note, "font-medium not-italic text-theme-muted")}
50
- </p>
62
+ <div className="reveal reveal-delay-2 mt-6 grid max-w-[1040px] gap-x-11 gap-y-6 md:grid-cols-3">
63
+ {stages.map((stage, i) => (
64
+ <div key={stage.title}>
65
+ <b
66
+ className={`block font-label text-label-xs font-semibold uppercase tracking-[0.18em] ${STAGE_TITLE_COLOR[i] ?? ""}`}
67
+ >
68
+ {stage.title}
69
+ </b>
70
+ <p className="mt-2 font-body text-[15px] text-theme-light">
71
+ {stage.text}
72
+ </p>
73
+ </div>
74
+ ))}
75
+ </div>
51
76
  </Section>
52
77
  );
53
78
  }
@@ -61,8 +86,9 @@ function HomeProblemSection({
61
86
  }: z.infer<typeof trioSchema>): JSX.Element {
62
87
  return (
63
88
  <Section id="problem" className="py-14">
64
- <SectCap lead={cap} trail={capNote} />
65
- <Trio items={items} mono={false} />
89
+ {/* The one section with no warmth: cold cap, hollow numerals. */}
90
+ <SectCap lead={cap} trail={capNote} tone="cold" />
91
+ <Trio items={items} mono={false} withered />
66
92
  </Section>
67
93
  );
68
94
  }
@@ -71,9 +97,10 @@ function HomeProblemSection({
71
97
 
72
98
  const oneLightSchema = z.object({
73
99
  cap: z.string(),
74
- capNote: z.string(),
100
+ capNote: z.string().optional(),
75
101
  headline: z.string(),
76
102
  intro: z.string(),
103
+ pull: z.string().optional(),
77
104
  primaryCta: ctaSchema,
78
105
  secondaryCta: ctaSchema,
79
106
  });
@@ -83,6 +110,7 @@ function HomeOneLightSection({
83
110
  capNote,
84
111
  headline,
85
112
  intro,
113
+ pull,
86
114
  primaryCta,
87
115
  secondaryCta,
88
116
  }: z.infer<typeof oneLightSchema>): JSX.Element {
@@ -92,9 +120,14 @@ function HomeOneLightSection({
92
120
  <h2 className="reveal reveal-delay-1 mt-3.5 max-w-[20em] font-display text-[clamp(28px,3vw,40px)] font-[465] leading-[1.1] tracking-[-0.014em] text-theme [font-variation-settings:'SOFT'_78,'opsz'_84]">
93
121
  {renderHighlightedText(headline, ROOM_HIGHLIGHT_CLS)}
94
122
  </h2>
95
- <p className="reveal reveal-delay-2 mt-4 max-w-[62ch] font-body text-[17px] leading-[1.7] text-theme-muted">
123
+ <p className="reveal reveal-delay-1 mt-4 max-w-[62ch] font-body text-[17px] leading-[1.7] text-theme-muted">
96
124
  {intro}
97
125
  </p>
126
+ {pull && (
127
+ <p className="reveal reveal-delay-2 mt-5 max-w-[21em] font-display text-[clamp(24px,2.8vw,34px)] font-normal italic leading-[1.22] tracking-[-0.012em] text-theme-muted [font-variation-settings:'SOFT'_90,'opsz'_110]">
128
+ {renderHighlightedText(pull, "font-[460] text-accent-bright")}
129
+ </p>
130
+ )}
98
131
  <CtaRow
99
132
  primaryCta={primaryCta}
100
133
  secondaryCta={secondaryCta}
@@ -106,11 +139,13 @@ function HomeOneLightSection({
106
139
 
107
140
  /* ============ mission band ============ */
108
141
 
142
+ /* Rev 10: the band is pure thesis — the quote carries the mission alone.
143
+ Sub and CTAs stay authorable but optional, so older content parses. */
109
144
  const missionSchema = z.object({
110
145
  quote: z.string(),
111
- sub: z.string(),
112
- primaryCta: ctaSchema,
113
- secondaryCta: ctaSchema,
146
+ sub: z.string().optional(),
147
+ primaryCta: ctaSchema.optional(),
148
+ secondaryCta: ctaSchema.optional(),
114
149
  });
115
150
 
116
151
  function HomeMissionSection({
@@ -121,14 +156,18 @@ function HomeMissionSection({
121
156
  }: z.infer<typeof missionSchema>): JSX.Element {
122
157
  return (
123
158
  <Band quote={quote}>
124
- <p className="reveal reveal-delay-1 mt-[18px] max-w-[52ch] font-body text-[17px] text-theme-light">
125
- {sub}
126
- </p>
127
- <CtaRow
128
- primaryCta={primaryCta}
129
- secondaryCta={secondaryCta}
130
- className="reveal reveal-delay-2 mt-[26px]"
131
- />
159
+ {sub && (
160
+ <p className="reveal reveal-delay-1 mt-[18px] max-w-[52ch] font-body text-[17px] text-theme-light">
161
+ {sub}
162
+ </p>
163
+ )}
164
+ {primaryCta && secondaryCta && (
165
+ <CtaRow
166
+ primaryCta={primaryCta}
167
+ secondaryCta={secondaryCta}
168
+ className="reveal reveal-delay-2 mt-[26px]"
169
+ />
170
+ )}
132
171
  </Band>
133
172
  );
134
173
  }
@@ -213,20 +252,23 @@ const aliveSchema = z.object({
213
252
  export const homeSections: SiteSectionGroup = sectionGroup("home", {
214
253
  growth: defineSection(growthSchema, HomeGrowthSection, {
215
254
  title: "Growth",
216
- description: "You → Team → Network growth diagram with caption and note",
255
+ description:
256
+ "You → Team → Network diagram with the three stage columns — how the parts come together",
217
257
  }),
218
258
  problem: defineSection(trioSchema, HomeProblemSection, {
219
259
  title: "Problem",
220
- description: "The dark around the lights — problem trio (large numerals)",
260
+ description:
261
+ "Alone, it withers — problem trio (hollow numerals, no warmth)",
221
262
  }),
222
263
  "one-light": defineSection(oneLightSchema, HomeOneLightSection, {
223
264
  title: "One Light",
224
265
  description:
225
- "It starts with one light — the product hook between problem and growth",
266
+ "It starts with you — the single ask, after the mission and before the faces",
226
267
  }),
227
268
  mission: defineSection(missionSchema, HomeMissionSection, {
228
269
  title: "Mission",
229
- description: "Mission band — display-italic statement, sub line, CTAs",
270
+ description:
271
+ "Mission band — display-italic statement alone; sub and CTAs optional",
230
272
  }),
231
273
  faces: defineSection(facesSchema, HomeFacesSection, {
232
274
  title: "Faces",
package/src/routes.ts CHANGED
@@ -17,18 +17,18 @@ export const aiRoutes: RouteDefinitionInput[] = [
17
17
  // The hero is the live agent proximity map, rendered from this brain's
18
18
  // own registry. dataQuery routes it through the datasource (live map
19
19
  // data); its hero copy is authored at site-content/home/network.md and
20
- // merged over via the content overlay. Then the story the map opens: the
21
- // dark it fights, the one light that starts it (the product hook), how
22
- // the network grows, the mission, the faces.
20
+ // merged over via the content overlay. Then the rev-10 story: the pain
21
+ // (problem), how the parts come together (growth carries the system),
22
+ // the mission, and only then the ask (one-light), the faces, the proof.
23
23
  {
24
24
  id: "network",
25
25
  template: "agent-discovery:proximity-map",
26
26
  dataQuery: {},
27
27
  },
28
28
  { id: "problem", template: "home:problem" },
29
- { id: "one-light", template: "home:one-light" },
30
29
  { id: "growth", template: "home:growth" },
31
30
  { id: "mission", template: "home:mission" },
31
+ { id: "one-light", template: "home:one-light" },
32
32
  { id: "faces", template: "home:faces" },
33
33
  { id: "alive", template: "home:alive" },
34
34
  ],
package/src/shared.tsx CHANGED
@@ -30,16 +30,20 @@ export const HIGHLIGHT_CLS = "italic font-[395] text-accent-bright";
30
30
  export const ROOM_HIGHLIGHT_CLS = "italic font-[400] text-accent";
31
31
 
32
32
  /* The mockup's `.cap` section caption: mono, wide-tracked, a short
33
- accent tick leading in, optional lowercase trail note. */
33
+ accent tick leading in, optional lowercase trail note. The "cold" tone
34
+ drains the accent — rev-10's withered section holds no warmth. */
34
35
  export function SectCap({
35
36
  lead,
36
37
  trail,
38
+ tone = "accent",
37
39
  className = "",
38
40
  }: {
39
41
  lead: string;
40
42
  trail?: string | undefined;
43
+ tone?: "accent" | "cold";
41
44
  className?: string;
42
45
  }): JSX.Element {
46
+ const cold = tone === "cold";
43
47
  return (
44
48
  <p
45
49
  className={`reveal flex flex-wrap items-baseline gap-3.5 font-label text-label-xs uppercase tracking-[0.2em] ${className}`}
@@ -49,9 +53,13 @@ export function SectCap({
49
53
  <span className="flex items-baseline gap-3.5">
50
54
  <span
51
55
  aria-hidden="true"
52
- className="h-px w-[26px] self-center bg-accent opacity-80"
56
+ className={`h-px w-[26px] self-center opacity-80 ${cold ? "bg-theme-light" : "bg-accent"}`}
53
57
  />
54
- <span className="font-medium text-accent">{lead}</span>
58
+ <span
59
+ className={`font-medium ${cold ? "text-theme-light" : "text-accent"}`}
60
+ >
61
+ {lead}
62
+ </span>
55
63
  </span>
56
64
  {trail && (
57
65
  <span className="normal-case tracking-[0.1em] text-theme-light">
@@ -206,7 +214,8 @@ export function delayClass(index: number): string {
206
214
  /* The three-up marker/title/text grid shared by two rooms: home's "why it
207
215
  has to exist" problem trio (large display numerals) and /brain's "your
208
216
  data, your rules" principles (mono markers). One schema, one component,
209
- the marker style toggled by `mono`. */
217
+ the marker style toggled by `mono`; `withered` hollows the numerals and
218
+ cools the titles — the rev-10 no-warmth treatment for the pain section. */
210
219
  export const trioItemSchema: z.ZodObject<{
211
220
  marker: z.ZodString;
212
221
  title: z.ZodString;
@@ -232,10 +241,15 @@ export type TrioItem = z.infer<typeof trioItemSchema>;
232
241
  export function Trio({
233
242
  items,
234
243
  mono,
244
+ withered = false,
235
245
  }: {
236
246
  items: TrioItem[];
237
247
  mono: boolean;
248
+ withered?: boolean;
238
249
  }): JSX.Element {
250
+ const numeralClass = withered
251
+ ? "block font-display text-[44px] font-light leading-none text-transparent [-webkit-text-stroke:1px_var(--color-text-light)] [font-variation-settings:'SOFT'_30,'opsz'_100]"
252
+ : "block font-display text-[44px] font-light leading-none text-theme-light [font-variation-settings:'SOFT'_30,'opsz'_100]";
239
253
  return (
240
254
  <div className="mt-[30px] grid gap-11 md:grid-cols-3">
241
255
  {items.map((item, i) => (
@@ -245,11 +259,11 @@ export function Trio({
245
259
  {item.marker}
246
260
  </span>
247
261
  ) : (
248
- <span className="block font-display text-[44px] font-light leading-none text-theme-light [font-variation-settings:'SOFT'_30,'opsz'_100]">
249
- {item.marker}
250
- </span>
262
+ <span className={numeralClass}>{item.marker}</span>
251
263
  )}
252
- <b className="mt-2.5 block font-display text-[21px] font-[520] tracking-[-0.006em] text-theme [font-variation-settings:'SOFT'_55]">
264
+ <b
265
+ className={`mt-2.5 block font-display text-[21px] font-[520] tracking-[-0.006em] [font-variation-settings:'SOFT'_55] ${withered ? "text-theme-muted" : "text-theme"}`}
266
+ >
253
267
  {item.title}
254
268
  </b>
255
269
  <p className="mt-2 font-body text-[15.5px] text-theme-light">