@rizom/site-rizom-ai 0.2.0-alpha.159 → 0.2.0-alpha.161

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.159",
3
+ "version": "0.2.0-alpha.161",
4
4
  "description": "Rizom AI site package for hosted Rover deployments",
5
5
  "type": "module",
6
6
  "exports": {
@@ -18,8 +18,9 @@
18
18
  "prepack": "publish-manifest prepare"
19
19
  },
20
20
  "dependencies": {
21
- "@rizom/site": "0.2.0-alpha.159",
22
- "@rizom/site-rizom": "0.2.0-alpha.159",
21
+ "@rizom/site": "0.2.0-alpha.161",
22
+ "@rizom/site-rizom": "0.2.0-alpha.161",
23
+ "@rizom/site-sections": "0.2.0-alpha.161",
23
24
  "preact": "^10.27.2"
24
25
  },
25
26
  "publishConfig": {
@@ -0,0 +1,216 @@
1
+ /** @jsxImportSource preact */
2
+ import type { JSX } from "preact";
3
+ import type { SiteSectionGroup } from "@rizom/site";
4
+ import { defineSection, sectionGroup, z } from "@rizom/site-sections";
5
+ import { Section, renderHighlightedText } from "@rizom/site-rizom";
6
+ import {
7
+ AliveLine,
8
+ Band,
9
+ CtaRow,
10
+ IndexRow,
11
+ SectCap,
12
+ ctaSchema,
13
+ delayClass,
14
+ ROOM_HIGHLIGHT_CLS,
15
+ } from "./shared";
16
+
17
+ /**
18
+ * The /foundation room (previously rizom.foundation) — the research journal: a
19
+ * masthead, essay + city-chapter index sections, a pull-quote band, support
20
+ * options, and a follow line (the shared colophon). Each section is authored
21
+ * from one zod schema; copy is content-driven, stored as markdown in
22
+ * site-content/foundation/<section>.md. The essay/event indexes are static rows
23
+ * here — the live entity-backed list lives at /writing.
24
+ */
25
+
26
+ /* ============ journal masthead ============ */
27
+
28
+ const heroSchema = z.object({
29
+ volume: z.string(),
30
+ meta: z.string(),
31
+ headline: z.string(),
32
+ standfirst: z.string(),
33
+ primaryCta: ctaSchema,
34
+ secondaryCta: ctaSchema,
35
+ });
36
+
37
+ function FoundationHeroSection({
38
+ volume,
39
+ meta,
40
+ headline,
41
+ standfirst,
42
+ primaryCta,
43
+ secondaryCta,
44
+ }: z.infer<typeof heroSchema>): JSX.Element {
45
+ return (
46
+ <Section
47
+ id="foundation-hero"
48
+ className="relative overflow-hidden pt-16 pb-[30px] md:pt-20"
49
+ >
50
+ <div
51
+ aria-hidden="true"
52
+ className="pointer-events-none absolute -inset-x-[10%] -inset-y-[30%] bg-[radial-gradient(680px_360px_at_14%_8%,rgb(from_var(--color-accent)_r_g_b_/_0.14),transparent_66%)]"
53
+ />
54
+ <div className="relative">
55
+ <SectCap lead={volume} trail={meta} />
56
+ <h1 className="mt-[18px] max-w-[15.5em] font-display text-[clamp(36px,4.6vw,64px)] font-[448] leading-[1.05] tracking-[-0.018em] text-theme [font-variation-settings:'SOFT'_88,'opsz'_110]">
57
+ {renderHighlightedText(headline, ROOM_HIGHLIGHT_CLS)}
58
+ </h1>
59
+ <p className="mt-4 max-w-[50ch] font-body text-[20px] leading-[1.7] text-theme-muted">
60
+ {standfirst}
61
+ </p>
62
+ <CtaRow
63
+ primaryCta={primaryCta}
64
+ secondaryCta={secondaryCta}
65
+ className="mt-[26px] mb-11"
66
+ />
67
+ </div>
68
+ </Section>
69
+ );
70
+ }
71
+
72
+ /* ============ index sections: research + chapters ============ */
73
+
74
+ const indexRowSchema = z.object({
75
+ no: z.string(),
76
+ kicker: z.string(),
77
+ title: z.string(),
78
+ text: z.string(),
79
+ href: z.string().optional(),
80
+ meta: z.string().optional(),
81
+ metaSub: z.string().optional(),
82
+ });
83
+
84
+ const indexSchema = z.object({
85
+ cap: z.string(),
86
+ capNote: z.string(),
87
+ items: z.array(indexRowSchema),
88
+ });
89
+
90
+ function IndexSection({
91
+ id,
92
+ cap,
93
+ capNote,
94
+ items,
95
+ }: z.infer<typeof indexSchema> & { id: string }): JSX.Element {
96
+ return (
97
+ <Section id={id} className="py-14">
98
+ <SectCap lead={cap} trail={capNote} />
99
+ <div className="mt-2">
100
+ {items.map((row, i) => (
101
+ <IndexRow key={row.title} row={row} delayClass={delayClass(i)} />
102
+ ))}
103
+ </div>
104
+ </Section>
105
+ );
106
+ }
107
+
108
+ function FoundationResearchSection(
109
+ content: z.infer<typeof indexSchema>,
110
+ ): JSX.Element {
111
+ return <IndexSection id="research" {...content} />;
112
+ }
113
+
114
+ function FoundationChaptersSection(
115
+ content: z.infer<typeof indexSchema>,
116
+ ): JSX.Element {
117
+ return <IndexSection id="events" {...content} />;
118
+ }
119
+
120
+ /* ============ pull-quote band ============ */
121
+
122
+ const pullquoteSchema = z.object({
123
+ quote: z.string(),
124
+ attribution: z.string(),
125
+ });
126
+
127
+ function FoundationPullquoteSection({
128
+ quote,
129
+ attribution,
130
+ }: z.infer<typeof pullquoteSchema>): JSX.Element {
131
+ return (
132
+ <Band quote={quote}>
133
+ <p className="reveal reveal-delay-1 mt-[18px] font-label text-[12px] text-theme-light">
134
+ {attribution}
135
+ </p>
136
+ </Band>
137
+ );
138
+ }
139
+
140
+ /* ============ support ============ */
141
+
142
+ const supportSchema = z.object({
143
+ cap: z.string(),
144
+ capNote: z.string(),
145
+ options: z.array(
146
+ z.object({
147
+ kicker: z.string(),
148
+ amount: z.string(),
149
+ text: z.string(),
150
+ }),
151
+ ),
152
+ });
153
+
154
+ function FoundationSupportSection({
155
+ cap,
156
+ capNote,
157
+ options,
158
+ }: z.infer<typeof supportSchema>): JSX.Element {
159
+ return (
160
+ <Section id="support" className="py-14">
161
+ <SectCap lead={cap} trail={capNote} />
162
+ <div className="mt-[26px] grid max-w-[900px] gap-13 md:grid-cols-2">
163
+ {options.map((option, i) => (
164
+ <div key={option.kicker} className={`reveal ${delayClass(i + 1)}`}>
165
+ <span className="font-label text-label-xs uppercase tracking-[0.16em] text-accent">
166
+ {option.kicker}
167
+ </span>
168
+ <div className="mt-2 font-display text-[30px] font-[480] text-theme [font-variation-settings:'SOFT'_40]">
169
+ {option.amount}
170
+ </div>
171
+ <p className="mt-2 font-body text-[15.5px] text-theme-light">
172
+ {option.text}
173
+ </p>
174
+ </div>
175
+ ))}
176
+ </div>
177
+ </Section>
178
+ );
179
+ }
180
+
181
+ /* ============ follow line ============ */
182
+
183
+ // Reuses the shared colophon (AliveLine) — an italic claim plus proof links.
184
+ const followSchema = z.object({
185
+ claim: z.string(),
186
+ links: z.array(ctaSchema),
187
+ });
188
+
189
+ /* ============ the foundation section group ============ */
190
+
191
+ export const foundationSections: SiteSectionGroup = sectionGroup("foundation", {
192
+ hero: defineSection(heroSchema, FoundationHeroSection, {
193
+ title: "Hero",
194
+ description: "Foundation journal masthead",
195
+ }),
196
+ research: defineSection(indexSchema, FoundationResearchSection, {
197
+ title: "Research",
198
+ description: "Essay index rows",
199
+ }),
200
+ pullquote: defineSection(pullquoteSchema, FoundationPullquoteSection, {
201
+ title: "Pullquote",
202
+ description: "Pull-quote band",
203
+ }),
204
+ chapters: defineSection(indexSchema, FoundationChaptersSection, {
205
+ title: "Chapters",
206
+ description: "City chapter index rows",
207
+ }),
208
+ support: defineSection(supportSchema, FoundationSupportSection, {
209
+ title: "Support",
210
+ description: "Funding options",
211
+ }),
212
+ follow: defineSection(followSchema, AliveLine, {
213
+ title: "Follow",
214
+ description: "Follow-the-research line (shared colophon component)",
215
+ }),
216
+ });
@@ -0,0 +1,297 @@
1
+ /** @jsxImportSource preact */
2
+ import type { JSX } from "preact";
3
+
4
+ /* You → Team → Network drawn as one organism — the rev-5 product
5
+ centerpiece (replaces Rover/Relay/Ranger as separate products).
6
+ Geometry is verbatim from docs/rizom-site-mockups.html; colors and
7
+ draw-in/bloom animation come from theme-rizom-ai's .growth classes.
8
+ The wrapper's `reveal` class lets boot.js trigger the sequence. */
9
+ export function GrowthDiagram(): JSX.Element {
10
+ return (
11
+ <div className="growth reveal reveal-delay-1 mt-5 max-w-[1020px]">
12
+ <svg
13
+ viewBox="0 0 980 290"
14
+ role="img"
15
+ aria-label="One brain growing into a team, then a network"
16
+ >
17
+ <defs>
18
+ <radialGradient id="zw-you" cx="50%" cy="50%" r="50%">
19
+ <stop offset="0%" stop-color="#d4af37" stop-opacity=".1" />
20
+ <stop offset="100%" stop-color="#d4af37" stop-opacity="0" />
21
+ </radialGradient>
22
+ <radialGradient id="zw-team" cx="50%" cy="50%" r="50%">
23
+ <stop offset="0%" stop-color="#e07a6a" stop-opacity=".08" />
24
+ <stop offset="100%" stop-color="#e07a6a" stop-opacity="0" />
25
+ </radialGradient>
26
+ <radialGradient id="zw-net" cx="50%" cy="50%" r="50%">
27
+ <stop offset="0%" stop-color="#9caf88" stop-opacity=".08" />
28
+ <stop offset="100%" stop-color="#9caf88" stop-opacity="0" />
29
+ </radialGradient>
30
+ </defs>
31
+
32
+ {/* zone atmospheres */}
33
+ <ellipse cx="110" cy="130" rx="110" ry="95" fill="url(#zw-you)" />
34
+ <ellipse cx="440" cy="128" rx="160" ry="110" fill="url(#zw-team)" />
35
+ <ellipse cx="790" cy="125" rx="190" ry="120" fill="url(#zw-net)" />
36
+
37
+ {/* rootlet arriving from off-canvas left: you came from somewhere too */}
38
+ <path
39
+ className="fil hair draw"
40
+ pathLength={1}
41
+ style="--d:0s"
42
+ d="M-20,150 C20,146 60,140 96,134"
43
+ />
44
+
45
+ {/* YOU: the origin */}
46
+ <circle className="gn you" cx="110" cy="130" r="10" style="--d:.1s" />
47
+
48
+ {/* three branches leave You and BECOME the team */}
49
+ <path
50
+ className="fil draw"
51
+ pathLength={1}
52
+ style="--d:.25s"
53
+ d="M121,125 C190,102 260,92 336,96 C360,97 380,99 398,103"
54
+ />
55
+ <path
56
+ className="fil draw"
57
+ pathLength={1}
58
+ style="--d:.35s"
59
+ d="M122,133 C200,140 280,146 356,152 C372,153 384,156 396,160"
60
+ />
61
+ <path
62
+ className="fil fine draw"
63
+ pathLength={1}
64
+ style="--d:.45s"
65
+ d="M118,140 C170,175 240,196 320,196 C350,196 380,190 404,180"
66
+ />
67
+
68
+ {/* TEAM: a cluster with an internal web */}
69
+ <circle className="gn seed" cx="408" cy="104" r="7" style="--d:.55s" />
70
+ <circle className="gn peer" cx="472" cy="80" r="6" style="--d:.65s" />
71
+ <circle
72
+ className="gn peer"
73
+ cx="506"
74
+ cy="132"
75
+ r="6.5"
76
+ style="--d:.72s"
77
+ />
78
+ <circle className="gn peer" cx="462" cy="182" r="6" style="--d:.8s" />
79
+ <circle
80
+ className="gn peer"
81
+ cx="402"
82
+ cy="163"
83
+ r="5.5"
84
+ style="--d:.87s"
85
+ />
86
+ <path
87
+ className="fil fine w-team draw"
88
+ pathLength={1}
89
+ style="--d:.7s"
90
+ d="M414,100 C436,90 452,84 466,81"
91
+ />
92
+ <path
93
+ className="fil fine w-team draw"
94
+ pathLength={1}
95
+ style="--d:.76s"
96
+ d="M477,85 C490,99 498,114 503,126"
97
+ />
98
+ <path
99
+ className="fil fine w-team draw"
100
+ pathLength={1}
101
+ style="--d:.82s"
102
+ d="M503,138 C492,155 478,170 468,177"
103
+ />
104
+ <path
105
+ className="fil fine w-team draw"
106
+ pathLength={1}
107
+ style="--d:.88s"
108
+ d="M456,181 C438,177 420,171 408,166"
109
+ />
110
+ <path
111
+ className="fil fine w-team draw"
112
+ pathLength={1}
113
+ style="--d:.94s"
114
+ d="M404,158 C405,141 406,122 407,111"
115
+ />
116
+ <path
117
+ className="fil hair w-team draw"
118
+ pathLength={1}
119
+ style="--d:1s"
120
+ d="M413,109 C443,132 470,152 460,177 M470,86 C450,118 430,146 407,160"
121
+ />
122
+
123
+ {/* the team's outer threads BECOME the network */}
124
+ <path
125
+ className="fil draw"
126
+ pathLength={1}
127
+ style="--d:1.05s"
128
+ d="M512,128 C570,116 630,104 688,96 C700,94 710,93 720,92"
129
+ />
130
+ <path
131
+ className="fil fine draw"
132
+ pathLength={1}
133
+ style="--d:1.15s"
134
+ d="M478,76 C540,58 610,50 672,56 C690,58 706,62 718,66"
135
+ />
136
+ <path
137
+ className="fil fine draw"
138
+ pathLength={1}
139
+ style="--d:1.25s"
140
+ d="M468,186 C530,196 600,198 660,188 C680,184 700,178 716,172"
141
+ />
142
+
143
+ {/* NETWORK: constellation, still growing */}
144
+ <circle className="gn seed" cx="726" cy="90" r="6" style="--d:1.35s" />
145
+ <circle
146
+ className="gn peer"
147
+ cx="782"
148
+ cy="56"
149
+ r="5.5"
150
+ style="--d:1.42s"
151
+ />
152
+ <circle className="gn peer" cx="838" cy="92" r="6" style="--d:1.5s" />
153
+ <circle
154
+ className="gn peer"
155
+ cx="864"
156
+ cy="150"
157
+ r="5.5"
158
+ style="--d:1.58s"
159
+ />
160
+ <circle className="gn peer" cx="796" cy="180" r="5" style="--d:1.65s" />
161
+ <circle className="gn peer" cx="726" cy="166" r="5" style="--d:1.72s" />
162
+ <path
163
+ className="fil fine w-net draw"
164
+ pathLength={1}
165
+ style="--d:1.45s"
166
+ d="M731,86 C749,74 764,64 776,59"
167
+ />
168
+ <path
169
+ className="fil fine w-net draw"
170
+ pathLength={1}
171
+ style="--d:1.52s"
172
+ d="M788,59 C806,68 822,79 832,87"
173
+ />
174
+ <path
175
+ className="fil fine w-net draw"
176
+ pathLength={1}
177
+ style="--d:1.6s"
178
+ d="M841,98 C851,114 858,132 862,144"
179
+ />
180
+ <path
181
+ className="fil fine w-net draw"
182
+ pathLength={1}
183
+ style="--d:1.67s"
184
+ d="M858,155 C840,166 820,175 803,178"
185
+ />
186
+ <path
187
+ className="fil fine w-net draw"
188
+ pathLength={1}
189
+ style="--d:1.74s"
190
+ d="M790,180 C768,177 746,172 732,169"
191
+ />
192
+ <path
193
+ className="fil hair w-net draw"
194
+ pathLength={1}
195
+ style="--d:1.8s"
196
+ d="M727,161 C727,141 727,116 727,97 M733,93 C766,120 800,146 858,152 M780,62 C788,100 794,140 795,173"
197
+ />
198
+
199
+ {/* future nodes: dotted, not yet joined */}
200
+ <circle className="gn faint" cx="912" cy="66" r="5" style="--d:1.9s" />
201
+ <circle className="gn faint" cx="936" cy="140" r="4.5" style="--d:2s" />
202
+ <circle className="gn faint" cx="886" cy="205" r="4" style="--d:2.1s" />
203
+ <path
204
+ className="fil hair draw"
205
+ pathLength={1}
206
+ style="--d:1.95s"
207
+ d="M843,88 C868,79 888,72 906,68"
208
+ />
209
+ <path
210
+ className="fil hair draw"
211
+ pathLength={1}
212
+ style="--d:2.05s"
213
+ d="M869,146 C892,144 912,142 930,140"
214
+ />
215
+ <path
216
+ className="fil hair draw"
217
+ pathLength={1}
218
+ style="--d:2.15s"
219
+ d="M801,184 C830,193 856,200 880,204"
220
+ />
221
+
222
+ {/* growth continues past the frame */}
223
+ <path
224
+ className="fil hair draw"
225
+ pathLength={1}
226
+ style="--d:2.2s"
227
+ d="M917,64 C940,60 960,58 990,56"
228
+ />
229
+ <path
230
+ className="fil hair draw"
231
+ pathLength={1}
232
+ style="--d:2.3s"
233
+ d="M941,141 C958,141 972,140 995,139"
234
+ />
235
+
236
+ {/* labels along a common baseline */}
237
+ <line className="tick" x1="110" y1="238" x2="110" y2="248" />
238
+ <text
239
+ className="gt-you"
240
+ x="110"
241
+ y="264"
242
+ text-anchor="middle"
243
+ style="--d:.4s"
244
+ >
245
+ You
246
+ </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
+ <line className="tick" x1="452" y1="238" x2="452" y2="248" />
257
+ <text
258
+ className="gt-team"
259
+ x="452"
260
+ y="264"
261
+ text-anchor="middle"
262
+ style="--d:1s"
263
+ >
264
+ Team
265
+ </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
+ <line className="tick" x1="795" y1="238" x2="795" y2="248" />
276
+ <text
277
+ className="gt-net"
278
+ x="795"
279
+ y="264"
280
+ text-anchor="middle"
281
+ style="--d:1.7s"
282
+ >
283
+ Network
284
+ </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
+ </svg>
295
+ </div>
296
+ );
297
+ }