@rizom/site-rizom-ai 0.2.0-alpha.166 → 0.2.0-alpha.167

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.166",
3
+ "version": "0.2.0-alpha.167",
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.166",
22
- "@rizom/site-rizom": "0.2.0-alpha.166",
23
- "@rizom/site-sections": "0.2.0-alpha.166",
21
+ "@rizom/site": "0.2.0-alpha.167",
22
+ "@rizom/site-rizom": "0.2.0-alpha.167",
23
+ "@rizom/site-sections": "0.2.0-alpha.167",
24
24
  "preact": "^10.27.2"
25
25
  },
26
26
  "publishConfig": {
@@ -0,0 +1,465 @@
1
+ /** @jsxImportSource preact */
2
+ import type { JSX } from "preact";
3
+
4
+ /**
5
+ * The /brain product screens — fixed-instrument-climate mocks of the real
6
+ * interfaces (dashboard, chat, its integrations, the studio), used as
7
+ * illustrations for the four chapters. Like the growth diagram, these are
8
+ * self-contained presentational components with illustrative fixture data;
9
+ * the surrounding editorial copy is content-authored per section.
10
+ *
11
+ * They keep a dark palette in both site themes on purpose — they read as
12
+ * screenshots of a product, not as site chrome — so their styles are inlined
13
+ * and scoped under `.brain-screen`, only borrowing the theme's font stacks.
14
+ */
15
+
16
+ export const SCREEN_STYLES = `
17
+ .brain-screen { --scr-mono: var(--font-mono); --scr-display: var(--font-display); --scr-ui: var(--font-body); }
18
+ .brain-screen .ifc-frame { background: #0a0819; border: 1px solid rgba(241,234,221,.13); border-radius: 10px; overflow: hidden; box-shadow: 0 34px 80px -26px rgba(0,0,0,.85); color: #f1eadd; font-size: 13px; line-height: 1.5; }
19
+ .brain-screen .ifc-bar { display: flex; align-items: center; gap: 7px; padding: 9px 14px; border-bottom: 1px solid rgba(241,234,221,.09); background: rgba(241,234,221,.03); }
20
+ .brain-screen .ifc-bar i { width: 8px; height: 8px; border-radius: 50%; background: rgba(241,234,221,.13); }
21
+ .brain-screen .ifc-bar span { margin-left: 8px; font-family: var(--scr-mono); font-size: 10px; letter-spacing: .06em; color: rgba(241,234,221,.35); }
22
+ .brain-screen .ifc-strip { display: flex; align-items: center; gap: 16px; padding: 10px 16px; border-bottom: 1px solid rgba(241,234,221,.12); font-family: var(--scr-mono); font-size: 10.5px; }
23
+ .brain-screen .ifc-strip .mark { display: inline-flex; align-items: center; gap: 8px; letter-spacing: .14em; text-transform: uppercase; color: rgba(241,234,221,.6); }
24
+ .brain-screen .ifc-strip .mark::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: #ff8b3d; }
25
+ .brain-screen .ifc-strip .snav { display: flex; gap: 4px; font-family: var(--scr-ui); font-size: 12px; }
26
+ .brain-screen .ifc-strip .snav span { padding: 4px 10px; border-radius: 6px; color: rgba(241,234,221,.4); }
27
+ .brain-screen .ifc-strip .snav span.on { color: #f1eadd; background: rgba(241,234,221,.08); }
28
+ .brain-screen .ifc-strip .anchor { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: 999px; background: rgba(104,204,139,.13); color: #68cc8b; font-size: 10px; }
29
+ .brain-screen .ifc-strip .anchor::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: #68cc8b; }
30
+ .brain-screen .ifc-tabs { display: flex; gap: 2px; padding: 8px 16px 0; border-bottom: 1px solid rgba(241,234,221,.12); font-family: var(--scr-mono); font-size: 10.5px; }
31
+ .brain-screen .ifc-tabs span { padding: 6px 12px 8px; color: rgba(241,234,221,.38); border-bottom: 2px solid transparent; transform: translateY(1px); }
32
+ .brain-screen .ifc-tabs span.on { color: #f1eadd; border-bottom-color: #ff8b3d; }
33
+ .brain-screen .ifc-card { background: #14112b; border: 1px solid rgba(241,234,221,.12); border-radius: 8px; padding: 10px 12px 12px; min-width: 0; }
34
+ .brain-screen .ifc-card .ct { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; font-family: var(--scr-mono); font-size: 9px; letter-spacing: .16em; text-transform: uppercase; color: rgba(241,234,221,.4); margin-bottom: 8px; }
35
+ .brain-screen .ifc-card .ct small { letter-spacing: .04em; text-transform: none; color: rgba(241,234,221,.22); }
36
+ .brain-screen .ifc-chat .body { padding: 16px 16px 14px; }
37
+ .brain-screen .ifc-eyebrow { font-family: var(--scr-mono); font-size: 9px; letter-spacing: .2em; text-transform: uppercase; color: rgba(241,234,221,.35); }
38
+ .brain-screen .ifc-chat h6 { font-family: var(--scr-display); font-variation-settings: "SOFT" 80, "opsz" 72; font-weight: 520; font-size: 21px; margin: 4px 0 0; }
39
+ .brain-screen .ifc-chat h6 em { font-style: italic; color: #ff8b3d; font-weight: 450; }
40
+ .brain-screen .ifc-msgs { margin-top: 14px; display: flex; flex-direction: column; gap: 10px; }
41
+ .brain-screen .ifc-msg { max-width: 88%; padding: 9px 13px; border-radius: 10px; font-size: 12.5px; }
42
+ .brain-screen .ifc-msg .who { display: block; font-family: var(--scr-mono); font-size: 8.5px; letter-spacing: .18em; text-transform: uppercase; color: rgba(241,234,221,.35); margin-bottom: 4px; }
43
+ .brain-screen .ifc-msg.you { align-self: flex-end; background: rgba(255,139,61,.13); border: 1px solid rgba(255,139,61,.25); }
44
+ .brain-screen .ifc-msg.brain { align-self: flex-start; background: rgba(241,234,221,.05); border: 1px solid rgba(241,234,221,.1); }
45
+ .brain-screen .ifc-msg .src { display: inline-block; margin-top: 6px; font-family: var(--scr-mono); font-size: 9px; color: rgba(255,163,102,.75); }
46
+ .brain-screen .ifc-status { margin-top: 12px; font-family: var(--scr-display); font-style: italic; font-size: 12.5px; color: rgba(241,234,221,.4); }
47
+ .brain-screen .ifc-status i { display: inline-block; width: 5px; height: 5px; border-radius: 50%; background: #ff8b3d; margin-right: 7px; vertical-align: 2px; animation: brainScreenFlicker 2.2s ease-in-out infinite; }
48
+ .brain-screen .ifc-prompt { display: flex; align-items: center; gap: 10px; margin-top: 10px; padding: 10px 12px; border: 1px solid rgba(241,234,221,.16); border-radius: 9px; background: rgba(241,234,221,.03); font-size: 12.5px; color: rgba(241,234,221,.35); }
49
+ .brain-screen .ifc-prompt b { margin-left: auto; width: 24px; height: 24px; display: grid; place-items: center; border-radius: 6px; background: #ff8b3d; color: #0a0819; font-weight: 600; }
50
+ .brain-screen .dash-canvas { padding: 14px 16px 16px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
51
+ .brain-screen .krow { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 5.5px 0; border-top: 1px solid rgba(241,234,221,.06); font-size: 11.5px; }
52
+ .brain-screen .krow:first-child { border-top: none; }
53
+ .brain-screen .krow dt { font-family: var(--scr-mono); font-size: 9.5px; letter-spacing: .08em; color: rgba(241,234,221,.38); white-space: nowrap; }
54
+ .brain-screen .krow dd { color: rgba(241,234,221,.8); text-align: right; }
55
+ .brain-screen .krow dd.ok { color: #68cc8b; }
56
+ .brain-screen .dim-arrow { color: rgba(255,163,102,.7); font-size: 10px; }
57
+ .brain-screen .ifc-card .big { font-family: var(--scr-display); font-variation-settings: "opsz" 144, "SOFT" 20; font-weight: 330; font-size: 38px; line-height: .9; letter-spacing: -.03em; text-shadow: 0 0 26px rgba(255,163,102,.18); }
58
+ .brain-screen .ifc-card .biglabel { margin-top: 7px; font-family: var(--scr-mono); font-size: 8.5px; letter-spacing: .2em; text-transform: uppercase; color: rgba(241,234,221,.4); }
59
+ .brain-screen .vals { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 10px; }
60
+ .brain-screen .vals i { font-style: normal; font-family: var(--scr-mono); font-size: 9px; padding: 2px 9px; border: 1px solid rgba(241,234,221,.16); border-radius: 100px; color: rgba(241,234,221,.6); }
61
+ .brain-screen .intg { display: flex; flex-direction: column; gap: 14px; }
62
+ .brain-screen .dsc { padding: 12px 14px; display: flex; flex-direction: column; gap: 11px; }
63
+ .brain-screen .dsc-row { display: flex; gap: 10px; font-size: 12px; }
64
+ .brain-screen .dsc-av { flex: none; width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; font-family: var(--scr-mono); font-size: 10px; color: #f1eadd; }
65
+ .brain-screen .dsc-name { font-weight: 600; font-size: 12px; }
66
+ .brain-screen .dsc-bot { font-style: normal; font-family: var(--scr-mono); font-size: 8px; background: #5865f2; padding: 1px 5px; border-radius: 3px; margin-left: 6px; vertical-align: 1px; }
67
+ .brain-screen .dsc-text { color: rgba(241,234,221,.72); margin-top: 2px; font-size: 12px; }
68
+ .brain-screen .dsc-text u { text-decoration-color: rgba(255,163,102,.6); }
69
+ .brain-screen .mcp { background: #f4eee1; color: #33291c; border-color: rgba(51,41,28,.22); }
70
+ .brain-screen .mcp .ifc-bar { border-color: rgba(51,41,28,.12); background: rgba(51,41,28,.04); }
71
+ .brain-screen .mcp .ifc-bar i { background: rgba(51,41,28,.16); }
72
+ .brain-screen .mcp .ifc-bar span { color: rgba(51,41,28,.5); }
73
+ .brain-screen .mcp .body2 { padding: 12px 14px 13px; font-size: 12.5px; line-height: 1.55; }
74
+ .brain-screen .mcp .tool { font-family: var(--scr-mono); font-size: 10px; background: rgba(51,41,28,.05); border: 1px solid rgba(51,41,28,.14); border-radius: 7px; padding: 7px 10px; margin: 9px 0; color: #5c4a2e; }
75
+ .brain-screen .mcp .tool b { color: #a8551e; font-weight: 600; }
76
+ .brain-screen .term-mock { padding: 12px 14px; font-family: var(--scr-mono); font-size: 11.5px; line-height: 1.85; color: rgba(241,234,221,.72); }
77
+ .brain-screen .term-mock .ps { color: #ff8b3d; }
78
+ .brain-screen .term-mock .who { color: #8c82c8; }
79
+ .brain-screen .cms-appbar { display: flex; align-items: center; gap: 14px; padding: 9px 14px; border-bottom: 1px solid rgba(241,234,221,.1); }
80
+ .brain-screen .cms-appbar .crumbs { font-family: var(--scr-mono); font-size: 10px; color: rgba(241,234,221,.4); }
81
+ .brain-screen .cms-appbar .crumbs b { color: rgba(241,234,221,.85); font-weight: 500; }
82
+ .brain-screen .cms-appbar .pub { margin-left: auto; font-size: 11.5px; font-weight: 600; background: #ff8b3d; color: #0a0819; padding: 4px 13px; border-radius: 5px; }
83
+ .brain-screen .cms-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.9fr); }
84
+ .brain-screen .cms-list { border-right: 1px solid rgba(241,234,221,.09); padding: 8px 0; }
85
+ .brain-screen .cms-item { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; padding: 7px 14px; font-size: 11.5px; color: rgba(241,234,221,.65); border-left: 2px solid transparent; }
86
+ .brain-screen .cms-item.on { background: rgba(255,139,61,.08); border-left-color: #ff8b3d; color: #f1eadd; }
87
+ .brain-screen .cms-kind { font-family: var(--scr-mono); font-size: 8.5px; color: rgba(241,234,221,.32); }
88
+ .brain-screen .cms-md { padding: 13px 18px 15px; font-family: var(--scr-mono); font-size: 11px; line-height: 1.85; color: rgba(241,234,221,.7); }
89
+ .brain-screen .cms-md .mh { color: #ffa366; }
90
+ .brain-screen .cms-md .mfm { color: rgba(140,130,200,.85); }
91
+ .brain-screen .cms-md .msy { color: rgba(241,234,221,.28); }
92
+ .brain-screen .cms-md .mem { font-style: italic; color: #f1eadd; }
93
+ .brain-screen .cms-foot { display: flex; align-items: center; gap: 12px; padding: 8px 14px; border-top: 1px solid rgba(241,234,221,.09); font-family: var(--scr-mono); font-size: 9.5px; color: rgba(241,234,221,.35); }
94
+ .brain-screen .cms-foot .fate { margin-left: auto; display: flex; gap: 6px; }
95
+ .brain-screen .cms-foot .fate span { padding: 2.5px 10px; border: 1px solid rgba(241,234,221,.16); border-radius: 100px; font-size: 8.5px; letter-spacing: .08em; }
96
+ .brain-screen .cms-foot .fate .on { background: #ff8b3d; color: #0a0819; border-color: #ff8b3d; }
97
+ @keyframes brainScreenFlicker { 0%, 100% { opacity: .75; } 50% { opacity: 1; } }
98
+ @media (prefers-reduced-motion: reduce) { .brain-screen .ifc-status i { animation: none; } }
99
+ @media (max-width: 900px) { .brain-screen .dash-canvas { grid-template-columns: 1fr; } .brain-screen .dash-canvas .ifc-card { grid-column: auto !important; } }
100
+ `;
101
+
102
+ /** Emitted once per page; scopes all screen styles under `.brain-screen`. */
103
+ export function BrainScreenStyles(): JSX.Element {
104
+ return <style>{SCREEN_STYLES}</style>;
105
+ }
106
+
107
+ /** The CMS studio: a markdown manuscript with the draft→publish flow. */
108
+ export function StudioScreen(): JSX.Element {
109
+ return (
110
+ <div class="brain-screen">
111
+ <div class="ifc-frame">
112
+ <div class="ifc-bar">
113
+ <i />
114
+ <i />
115
+ <i />
116
+ <span>mira.studio/studio</span>
117
+ </div>
118
+ <div class="cms-appbar">
119
+ <span class="crumbs">
120
+ library / essays / <b>distributed-teams.md</b>
121
+ </span>
122
+ <span class="pub">Publish</span>
123
+ </div>
124
+ <div class="cms-cols">
125
+ <div class="cms-list">
126
+ <div class="cms-item">
127
+ <span>coordination-unit.md</span>
128
+ <span class="cms-kind">essay</span>
129
+ </div>
130
+ <div class="cms-item on">
131
+ <span>distributed-teams.md</span>
132
+ <span class="cms-kind">essay</span>
133
+ </div>
134
+ <div class="cms-item">
135
+ <span>calculator-launch.md</span>
136
+ <span class="cms-kind">post</span>
137
+ </div>
138
+ <div class="cms-item">
139
+ <span>tms-reading-list.md</span>
140
+ <span class="cms-kind">note</span>
141
+ </div>
142
+ </div>
143
+ <div class="cms-md">
144
+ <span class="mfm">
145
+ ---
146
+ <br />
147
+ title: Distributed teams outperform
148
+ <br />
149
+ series: essays · status: draft
150
+ <br />
151
+ ---
152
+ </span>
153
+ <br />
154
+ <span class="mh"># Distributed teams outperform</span>
155
+ <br />
156
+ Teams don't fail because people are
157
+ <br />
158
+ <span class="msy">**</span>untalented<span class="msy">**</span>.
159
+ They fail because nobody
160
+ <br />
161
+ mapped <span class="mem">who knows what</span> — and AI just
162
+ <br />
163
+ automates the confusion.
164
+ <br />
165
+ </div>
166
+ </div>
167
+ <div class="cms-foot">
168
+ <span>committed a41f2c9 → rizom-ai/mira-content</span>
169
+ <span class="fate">
170
+ <span>draft</span>
171
+ <span class="on">review</span>
172
+ <span>publish</span>
173
+ </span>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ );
178
+ }
179
+
180
+ /** The web chat: an exchange that answers with sources and writes drafts back. */
181
+ export function ChatScreen(): JSX.Element {
182
+ return (
183
+ <div class="brain-screen">
184
+ <div class="ifc-frame ifc-chat">
185
+ <div class="ifc-bar">
186
+ <i />
187
+ <i />
188
+ <i />
189
+ <span>mira.studio/chat</span>
190
+ </div>
191
+ <div class="body">
192
+ <span class="ifc-eyebrow">connected · anchor session</span>
193
+ <h6>
194
+ Talk to <em>your brain</em>
195
+ </h6>
196
+ <div class="ifc-msgs">
197
+ <div class="ifc-msg you">
198
+ <span class="who">you</span>What did we decide about the pricing
199
+ page last month?
200
+ </div>
201
+ <div class="ifc-msg brain">
202
+ <span class="who">mira</span>Three decisions, all in your March
203
+ notes: keep the single tier, publish the calculator, park
204
+ enterprise until Q3.<span class="src">→ 3 sources</span>
205
+ </div>
206
+ <div class="ifc-msg you">
207
+ <span class="who">you</span>Draft a changelog entry for the
208
+ calculator.
209
+ </div>
210
+ <div class="ifc-msg brain">
211
+ <span class="who">mira</span>Drafted in your voice and saved as{" "}
212
+ <b>posts/calculator-launch.md</b> — status: draft. Want it queued
213
+ for review?
214
+ </div>
215
+ </div>
216
+ <div class="ifc-status">
217
+ <i />
218
+ the rhizome is listening
219
+ </div>
220
+ <div class="ifc-prompt">
221
+ Ask anything you've ever written down…<b>↑</b>
222
+ </div>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ );
227
+ }
228
+
229
+ /** The integrations stack: Discord, Claude over MCP, the terminal REPL. */
230
+ export function IntegrationsScreen(): JSX.Element {
231
+ return (
232
+ <div class="brain-screen">
233
+ <div class="intg">
234
+ <div class="ifc-frame">
235
+ <div class="ifc-bar">
236
+ <i />
237
+ <i />
238
+ <i />
239
+ <span>Discord — #ask-mira</span>
240
+ </div>
241
+ <div class="dsc">
242
+ <div class="dsc-row">
243
+ <span class="dsc-av" style="background:#3d4a8a">
244
+ T
245
+ </span>
246
+ <div>
247
+ <span class="dsc-name">Tomás</span>
248
+ <div class="dsc-text">
249
+ @mira what did the pilot retro conclude?
250
+ </div>
251
+ </div>
252
+ </div>
253
+ <div class="dsc-row">
254
+ <span class="dsc-av" style="background:#7a4a12">
255
+ M
256
+ </span>
257
+ <div>
258
+ <span class="dsc-name">
259
+ mira<i class="dsc-bot">BOT</i>
260
+ </span>
261
+ <div class="dsc-text">
262
+ Two blockers: onboarding docs and the missing staging env.
263
+ Full notes → <u>retro-2026-06</u>.
264
+ </div>
265
+ </div>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ <div class="ifc-frame mcp">
270
+ <div class="ifc-bar">
271
+ <i />
272
+ <i />
273
+ <i />
274
+ <span>Claude — connected via MCP</span>
275
+ </div>
276
+ <div class="body2">
277
+ Let me check Mira's brain for that.
278
+ <div class="tool">
279
+ ▸ <b>mira · system_search</b> "pilot retro blockers" → 6 entities
280
+ </div>
281
+ From the June retro notes: the pilot stalled on onboarding docs —
282
+ Mira flagged the same pattern in two client engagements.
283
+ </div>
284
+ </div>
285
+ <div class="ifc-frame">
286
+ <div class="ifc-bar">
287
+ <i />
288
+ <i />
289
+ <i />
290
+ <span>terminal — brain chat</span>
291
+ </div>
292
+ <div class="term-mock">
293
+ <span class="ps">$</span> brain chat
294
+ <br />
295
+ <span class="who">mira ›</span> corpus loaded — 2,847 entities
296
+ <br />
297
+ <span class="who">you ›</span> oldest open decision?
298
+ <br />
299
+ <span class="who">mira ›</span> "Pricing tiers" — open since March
300
+ (decisions/pricing.md)
301
+ </div>
302
+ </div>
303
+ </div>
304
+ </div>
305
+ );
306
+ }
307
+
308
+ /** The dashboard overview: the brain's real widget cards over fixture data. */
309
+ export function DashboardScreen(): JSX.Element {
310
+ return (
311
+ <div class="brain-screen">
312
+ <div class="ifc-frame">
313
+ <div class="ifc-bar">
314
+ <i />
315
+ <i />
316
+ <i />
317
+ <span>mira.studio/dashboard</span>
318
+ </div>
319
+ <div class="ifc-strip">
320
+ <span class="mark">mira · console</span>
321
+ <div class="snav">
322
+ <span class="on">Dashboard</span>
323
+ <span>Chat</span>
324
+ <span>Library</span>
325
+ </div>
326
+ <span class="anchor">anchor</span>
327
+ </div>
328
+ <div class="ifc-tabs">
329
+ <span class="on">overview</span>
330
+ <span>content</span>
331
+ <span>network</span>
332
+ <span>system</span>
333
+ </div>
334
+ <div class="dash-canvas">
335
+ <div class="ifc-card">
336
+ <div class="ct">
337
+ <span>Identity</span>
338
+ </div>
339
+ <dl>
340
+ <div class="krow">
341
+ <dt>Role</dt>
342
+ <dd>Research partner — media theory &amp; praxis</dd>
343
+ </div>
344
+ <div class="krow">
345
+ <dt>Purpose</dt>
346
+ <dd>Turn a working library into a public practice</dd>
347
+ </div>
348
+ </dl>
349
+ <div class="vals">
350
+ <i>open source</i>
351
+ <i>rigor</i>
352
+ <i>reciprocity</i>
353
+ </div>
354
+ </div>
355
+ <div class="ifc-card">
356
+ <div class="ct">
357
+ <span>Entities</span>
358
+ <small>corpus · by volume</small>
359
+ </div>
360
+ <div class="big">2,847</div>
361
+ <div class="biglabel">indexed entities</div>
362
+ <dl style="margin-top:8px">
363
+ <div class="krow">
364
+ <dt>notes</dt>
365
+ <dd>1,204</dd>
366
+ </div>
367
+ <div class="krow">
368
+ <dt>links</dt>
369
+ <dd>486</dd>
370
+ </div>
371
+ <div class="krow">
372
+ <dt>posts</dt>
373
+ <dd>412</dd>
374
+ </div>
375
+ <div class="krow">
376
+ <dt>essays</dt>
377
+ <dd>118</dd>
378
+ </div>
379
+ </dl>
380
+ </div>
381
+ <div class="ifc-card">
382
+ <div class="ct">
383
+ <span>Runtime</span>
384
+ <small>core</small>
385
+ </div>
386
+ <dl>
387
+ <div class="krow">
388
+ <dt>Version</dt>
389
+ <dd>0.2.0</dd>
390
+ </div>
391
+ <div class="krow">
392
+ <dt>Model</dt>
393
+ <dd>anthropic · sonnet</dd>
394
+ </div>
395
+ <div class="krow">
396
+ <dt>Uptime</dt>
397
+ <dd>41d 6h</dd>
398
+ </div>
399
+ <div class="krow">
400
+ <dt>Embeddings</dt>
401
+ <dd class="ok">✓ current</dd>
402
+ </div>
403
+ <div class="krow">
404
+ <dt>Daemons</dt>
405
+ <dd>4 running</dd>
406
+ </div>
407
+ </dl>
408
+ </div>
409
+ <div class="ifc-card" style="grid-column: span 2">
410
+ <div class="ct">
411
+ <span>Endpoints</span>
412
+ <small>machine faces of the same brain</small>
413
+ </div>
414
+ <dl>
415
+ <div class="krow">
416
+ <dt>MCP</dt>
417
+ <dd>
418
+ mira.studio/mcp <span class="dim-arrow">↗</span>
419
+ </dd>
420
+ </div>
421
+ <div class="krow">
422
+ <dt>A2A</dt>
423
+ <dd>
424
+ /.well-known/agent-card <span class="dim-arrow">↗</span>
425
+ </dd>
426
+ </div>
427
+ <div class="krow">
428
+ <dt>ATProto</dt>
429
+ <dd>
430
+ @mira.studio — essays as records{" "}
431
+ <span class="dim-arrow">↗</span>
432
+ </dd>
433
+ </div>
434
+ <div class="krow">
435
+ <dt>RSS</dt>
436
+ <dd>
437
+ /rss.xml <span class="dim-arrow">↗</span>
438
+ </dd>
439
+ </div>
440
+ </dl>
441
+ </div>
442
+ <div class="ifc-card">
443
+ <div class="ct">
444
+ <span>Ways to connect</span>
445
+ </div>
446
+ <dl>
447
+ <div class="krow">
448
+ <dt>Chat</dt>
449
+ <dd>mira.studio/chat</dd>
450
+ </div>
451
+ <div class="krow">
452
+ <dt>Discord</dt>
453
+ <dd>#ask-mira</dd>
454
+ </div>
455
+ <div class="krow">
456
+ <dt>Terminal</dt>
457
+ <dd>brain chat</dd>
458
+ </div>
459
+ </dl>
460
+ </div>
461
+ </div>
462
+ </div>
463
+ </div>
464
+ );
465
+ }