@hraness/design-kit 0.33.0 → 0.35.0

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.
Files changed (44) hide show
  1. package/README.md +19 -3
  2. package/dist/{chunk-mr1vdcjq.js → chunk-8xfssb9c.js} +6 -3
  3. package/dist/{chunk-95mpmzc9.js → chunk-c9mhn3yb.js} +1130 -442
  4. package/dist/{chunk-h4k7yv6x.js → chunk-fjf81bww.js} +28 -2
  5. package/dist/chunk-gmea6p0d.js +13 -0
  6. package/dist/index.js +5 -1
  7. package/dist/mockups/client.js +50 -15
  8. package/dist/portfolio.js +586 -85
  9. package/dist/react/index.js +141 -13
  10. package/dist/react/platform-install.js +3 -2
  11. package/dist/react/server.js +17 -3
  12. package/dist/stylex-manifest.json +1 -1
  13. package/dist/stylex.css +350 -36
  14. package/package.json +14 -3
  15. package/portfolio-inventory.json +1 -1
  16. package/src/diagrams.ts +11 -0
  17. package/src/index.ts +2 -0
  18. package/src/marketing-comparison.css +162 -0
  19. package/src/marketing-diagram.css +24 -0
  20. package/src/mockups/client.tsx +25 -17
  21. package/src/mockups.css +19 -0
  22. package/src/plain-publication.css +9 -6
  23. package/src/portfolio.generated.json +578 -86
  24. package/src/portfolio.generated.ts +578 -86
  25. package/src/portfolio.ts +73 -0
  26. package/src/product-marketing-foundation.css +29 -0
  27. package/src/product-marketing.css +136 -39
  28. package/src/react/article.tsx +2 -2
  29. package/src/react/design-gallery.tsx +37 -8
  30. package/src/react/index.ts +3 -0
  31. package/src/react/marketing-account.stylex.ts +74 -0
  32. package/src/react/marketing-account.tsx +69 -0
  33. package/src/react/marketing-comparison.stylex.ts +24 -0
  34. package/src/react/marketing-comparison.tsx +73 -0
  35. package/src/react/marketing-diagram.stylex.ts +8 -0
  36. package/src/react/marketing-diagram.tsx +33 -0
  37. package/src/react/platform-install.stylex.ts +2 -1
  38. package/src/react/platform-install.tsx +2 -1
  39. package/src/react/product-marketing.stylex.ts +144 -111
  40. package/src/react/product-marketing.tsx +83 -45
  41. package/src/react/server.ts +3 -0
  42. package/src/styles.css +2 -0
  43. package/src/typography.css +32 -0
  44. /package/dist/{chunk-4d79eskk.js → chunk-c80g58j1.js} +0 -0
@@ -4,22 +4,22 @@ export const portfolioSnapshot = {
4
4
  "formatVersion": 1,
5
5
  "provenance": {
6
6
  "registry": "https://hraness.com/portfolio.json",
7
- "commit": "82542df32e3b5db919c5d3778125ea2970d932f7",
8
- "committedOn": "2026-09-29",
7
+ "commit": "d75ebaa21ae0576c1d6c71e1bea23c93b866601c",
8
+ "committedOn": "2026-09-30",
9
9
  "upstreamContract": "hraness.portfolio-public/v1",
10
- "upstreamDigest": "sha256:1f3d10922cc4f7f78fe3a70fba90ee91e9c473253f6e2d5485dd8b8192762040",
10
+ "upstreamDigest": "sha256:ba365e481a8b15c4a19503b1628e1b7ae9399e47055dde02bae124183a3e1447",
11
11
  "files": [
12
12
  {
13
13
  "path": "portfolio.public.generated.json",
14
- "sha256": "30a3acc1d7f52a7c3180cfbf0fa63ebbe2c1ccc9f35e6d8cf75d559996ab2eea"
14
+ "sha256": "4c9e41dd1cb711d21a2da086de6b7d4adac2990ccda3909fa1cacf3b0ff44369"
15
15
  },
16
16
  {
17
17
  "path": "packages/brand-catalog/brands.yaml",
18
- "sha256": "357c5bb8f2dc85ed1cc097161db3f97aaef58ee3a7f9a480bf926104ab723389"
18
+ "sha256": "10f20e9d7b8ad0f108b56344c5d1b60cf3c54e6cec5e7024004b7b4f608f282c"
19
19
  },
20
20
  {
21
21
  "path": "brand-artwork.json",
22
- "sha256": "625c88ca6e24e78d80e8efbecaeb25bd88711287e86fa2f32f6bca110fe30b92"
22
+ "sha256": "7b1ba29f24352b33e666af059b8efbb273dd68269600b04d4d15ef4c94743876"
23
23
  },
24
24
  {
25
25
  "path": "projects/hraness/public/marks/act60.svg",
@@ -129,10 +129,6 @@ export const portfolioSnapshot = {
129
129
  "path": "projects/hraness/public/marks/system-one-skills.svg",
130
130
  "sha256": "44855079c3dea26397d798926ec5689115e084ca26367b7ab73c7b0ea8b18119"
131
131
  },
132
- {
133
- "path": "projects/hraness/public/marks/valhalla-album.svg",
134
- "sha256": "8de9218ce0ee4238cb3859a6f450ba746c26e92b0dc7d2e03953777207713602"
135
- },
136
132
  {
137
133
  "path": "projects/hraness/public/marks/valhalla.svg",
138
134
  "sha256": "ae060052dc1550a4d377e3c4ebba9f2a5e5e58be1dafe8256a2a885063e84c24"
@@ -173,10 +169,23 @@ export const portfolioSnapshot = {
173
169
  "long": "Long coding-agent sessions collect tool output that mattered once: test logs from runs that have since passed, file listings from before a refactor, stack traces for bugs already fixed. Every turn sends all of it to the model again. Gobstopper is a free, open-source command-line tool that finds your Claude Code and Codex sessions, shows what each compaction strategy would cut, and writes a smaller copy. Before it writes, it stores the original bytes in a content-addressed vault on your machine, so you can search for the exact record a compaction left out or restore the whole session.",
174
170
  "hero": {
175
171
  "heading": "Context compaction you can undo.",
176
- "summary": "Gobstopper keeps long coding sessions smaller. Run your agent through a local proxy, or make a smaller copy of a saved session while keeping the original for recovery.",
172
+ "summary": "Keep long coding sessions smaller, with the original available to restore.",
177
173
  "primaryAction": "Install Gobstopper",
178
174
  "secondaryAction": "How it works"
179
175
  },
176
+ "headings": {
177
+ "home-live": "Keep the recent work in view.",
178
+ "home-file-copy": "Try a smaller copy. Keep a way back.",
179
+ "home-results": "38% smaller on requests it compacted.",
180
+ "home-film": "Watch it in 75 seconds.",
181
+ "home-install": "Start with one session.",
182
+ "home-questions": "Before you install.",
183
+ "home-related": "Other tools from our studio",
184
+ "home-search-title": "Gobstopper: context compaction proxy for Claude Code and Codex",
185
+ "home-primitive-preview": "Preview the cut",
186
+ "home-primitive-original": "Keep the original",
187
+ "home-primitive-resume": "Check before resuming"
188
+ },
180
189
  "status": {
181
190
  "default": "proposed"
182
191
  },
@@ -221,6 +230,15 @@ export const portfolioSnapshot = {
221
230
  "primaryAction": "Install xcb",
222
231
  "secondaryAction": "See how it works"
223
232
  },
233
+ "headings": {
234
+ "home-router": "Use your quota before it resets",
235
+ "home-interfaces": "Two ways to use xcb",
236
+ "home-import-sessions": "Continue your Claude and Codex conversations",
237
+ "home-install": "Install xcb",
238
+ "home-questions": "Questions",
239
+ "home-interface-agent": "As your coding agent",
240
+ "home-interface-integration": "Inside your agent or app"
241
+ },
224
242
  "status": {
225
243
  "default": "proposed"
226
244
  },
@@ -257,10 +275,18 @@ export const portfolioSnapshot = {
257
275
  "long": "Picking a model means guessing at a tradeoff between quality and price, because benchmark scores and prices live in different places. aicharts plots published benchmark scores against cost and tokens per task on one chart, so the strongest option at each budget is visible instead of implied. A local collector measures your own agents' token use, so the cost question covers your work, not only the models. aicharts is free and open source.",
258
276
  "hero": {
259
277
  "heading": "See which model wins at each price.",
260
- "summary": "Benchmark scores plotted against cost and tokens per task, plus a local collector for your own agents' token use.",
278
+ "summary": "Compare model benchmark scores, prices, and the tokens each task takes.",
261
279
  "primaryAction": "Browse the charts",
262
280
  "secondaryAction": "Measure your agent"
263
281
  },
282
+ "headings": {
283
+ "home-calculator": "Subscription vs API vs GPUs",
284
+ "home-platform-group": "The agent platform",
285
+ "home-personal-group": "The personal apps",
286
+ "home-related": "Other tools from our studio",
287
+ "home-about": "About aicharts",
288
+ "home-search-title": "aicharts: AI model benchmark scores vs cost per task"
289
+ },
264
290
  "status": {
265
291
  "default": "proposed"
266
292
  },
@@ -297,10 +323,30 @@ export const portfolioSnapshot = {
297
323
  "long": "A new coding-agent session can read your code, but not the decisions that stayed in the last session's chat. Wordcell keeps those decisions as Markdown files beside the repository, with the plans that depend on them and the web pages and PDFs that informed them. Tie a note to the paths it explains, and an agent about to change that code runs one command to get the notes and plans for that path. Exact search, backlinks, and Git history run on your machine with no account or model, and every index rebuilds from files you can read in any editor. Wordcell is free and open source.",
298
324
  "hero": {
299
325
  "heading": "Give coding agents the decisions behind your code.",
300
- "summary": "Decisions, plans, and sources kept as Markdown beside your repository, one command away from the agent about to change a file.",
326
+ "summary": "Keep decisions, plans, and sources as Markdown beside your code.",
301
327
  "primaryAction": "Install Wordcell",
302
328
  "secondaryAction": "See an example"
303
329
  },
330
+ "headings": {
331
+ "home-related-group": "Works with Wordcell",
332
+ "home-preview": "Your agent finds the rule and names the file",
333
+ "home-install": "Save and find your first decision",
334
+ "home-agent-search": "Let your agent search and add notes",
335
+ "home-primitives": "What a vault gives you",
336
+ "home-passages": "Find the passage with the answer",
337
+ "home-scopes": "Your coding agent starts with what you already decided",
338
+ "home-fit": "How Wordcell compares",
339
+ "home-publish": "Publish your notes as a website",
340
+ "home-trust": "The record stays yours",
341
+ "home-questions": "Before you install",
342
+ "home-related": "Other tools from our studio",
343
+ "home-closing": "Give the next session what this one learned.",
344
+ "home-search-title": "Wordcell: Markdown memory for coding agents",
345
+ "home-primitive-files": "Files you own",
346
+ "home-primitive-decisions": "Find a past decision",
347
+ "home-primitive-context": "Context for the file at hand",
348
+ "home-primitive-sources": "Sources you can reopen"
349
+ },
304
350
  "status": {
305
351
  "default": "proposed"
306
352
  },
@@ -336,6 +382,25 @@ export const portfolioSnapshot = {
336
382
  "primaryAction": "Install Oh",
337
383
  "secondaryAction": "How it works"
338
384
  },
385
+ "headings": {
386
+ "model-title": "Keep the source with the claim.",
387
+ "trace-title": "Open the evidence behind an answer.",
388
+ "interfaces-title": "Work with the same records from a terminal, TypeScript, or an agent.",
389
+ "install-title": "Install and start with a local database.",
390
+ "kernel-title": "Keep your memory on your machine.",
391
+ "questions-title": "What to know before you install.",
392
+ "home-object-question": "Question",
393
+ "home-object-source": "Source",
394
+ "home-object-capture": "Capture",
395
+ "home-object-claim": "Claim",
396
+ "home-object-citation": "Citation",
397
+ "home-object-artifact": "Artifact",
398
+ "home-trust-local": "Local by default",
399
+ "home-trust-remote": "Remote services are opt-in",
400
+ "home-interface-cli": "CLI",
401
+ "home-interface-sdk": "TypeScript SDK",
402
+ "home-interface-skill": "Agent Skill"
403
+ },
339
404
  "status": {
340
405
  "default": "proposed"
341
406
  },
@@ -346,8 +411,8 @@ export const portfolioSnapshot = {
346
411
  "id": "sponge",
347
412
  "name": "Sponge",
348
413
  "oneLiner": "Local research service that keeps its sources and writes cited reports",
349
- "brandDescription": null,
350
- "canonicalUrl": "https://hraness.com/writing/the-knowledge-pack",
414
+ "brandDescription": "Sponge runs deep research on your own machine. It keeps the text of every source, writes a cited report, and reaches models through Excalibur (xcb).",
415
+ "canonicalUrl": "https://sponge.computer",
351
416
  "status": "active",
352
417
  "copyStatus": "proposed",
353
418
  "aliases": [],
@@ -364,10 +429,29 @@ export const portfolioSnapshot = {
364
429
  "short": "Local research service that keeps its sources and writes cited reports",
365
430
  "meta": "Sponge runs deep research on your own machine. It keeps the text of every source, writes a cited report, and reaches models through Excalibur (xcb).",
366
431
  "medium": "Sponge runs research projects on your own machine. Give it a question and sources, and it keeps their text, writes and updates a cited report, and tests new research strategies before you adopt them.",
367
- "long": "Sponge is a local research harness. Each project has a question and a set of sources, and Sponge keeps the source text, writes and updates a cited report, and records its operations so work survives restarts. A background service, terminal chat, and a macOS menu-bar app drive it. Deep mode plans the research, gathers public sources, recalls project memory, and audits a draft before it updates the report. Sponge runs on ALGAL, reaches models through Excalibur (xcb) so provider sign-ins stay there, keeps documents in Wordcell, and captures signed-in pages through GhostGet. A new strategy for brief research is tested in a sealed evaluation, and nothing changes until you adopt it or restore the previous one. Publishing makes a static Wordcell edition or puts selected documents on wordcell.io. It is in development and not yet released; it runs from a private checkout. The hosted library at sponge.computer is the earlier Sponge.",
432
+ "long": "Sponge is a local research harness. Each project has a question and a set of sources, and Sponge keeps the source text, writes and updates a cited report, and records its operations so work survives restarts. A background service that can start at login drives it, with terminal chat and status views. Deep mode plans the research, gathers public sources, recalls project memory, and audits a draft before it updates the report. Sponge runs on ALGAL, reaches models through Excalibur (xcb) so provider sign-ins stay there, keeps documents in Wordcell, and captures signed-in pages through GhostGet. A new strategy for brief research is tested in a sealed evaluation, and nothing changes until you adopt it or restore the previous one. Publishing makes a static Wordcell edition or puts selected documents on wordcell.io. It is in development, with releases in a private GitHub repository. The hosted library at sponge.computer is the earlier Sponge.",
368
433
  "hero": {
369
434
  "heading": "Deep research that runs on your own machine.",
370
- "summary": "Give it a question and sources. Sponge keeps their text, writes a cited report, and reaches models through the coding subscriptions you already pay for."
435
+ "summary": "Sponge runs as a background service with a terminal chat and a terminal status view. Ask a question, and it gathers sources, keeps their text, and writes a report that cites them.",
436
+ "primaryAction": "Read the Knowledge pack post",
437
+ "secondaryAction": "See the commands"
438
+ },
439
+ "headings": {
440
+ "archive": "notes and working documents",
441
+ "context": "context",
442
+ "home-comparison": "Four Hraness tools do the work",
443
+ "home-method": "From a question to a cited report",
444
+ "home-interfaces": "Where to find Sponge today",
445
+ "home-custody": "You decide what changes",
446
+ "home-search-title": "Sponge: A deep-research harness that runs on your machine",
447
+ "home-proof": "Start a research project from the terminal",
448
+ "home-questions": "Before you begin.",
449
+ "home-step-create": "Create a project",
450
+ "home-step-research": "Ask, or go deep",
451
+ "home-step-refresh": "Keep it current",
452
+ "home-interface-papers": "Daily papers",
453
+ "home-interface-library": "Sponge Library",
454
+ "home-interface-harness": "The research harness"
371
455
  },
372
456
  "status": {
373
457
  "default": "proposed"
@@ -409,6 +493,19 @@ export const portfolioSnapshot = {
409
493
  "primaryAction": "Install ALGAL",
410
494
  "secondaryAction": "See a program run"
411
495
  },
496
+ "headings": {
497
+ "home-draft": "Turn an email into a drafted reply.",
498
+ "home-process": "Keep a task running across interruptions.",
499
+ "home-host": "Your host sets the tools, models, and limits.",
500
+ "home-replay": "Every run can be replayed offline.",
501
+ "home-evolution": "Programs write programs. Your host picks which to keep.",
502
+ "home-install": "Install one binary. Run your first program.",
503
+ "home-research": "Can tested procedures improve later work?",
504
+ "home-limits": "Start locally. Know what you operate.",
505
+ "home-replay-verify": "Verify",
506
+ "home-replay-diff": "Diff",
507
+ "home-replay-diagnose": "Diagnose"
508
+ },
412
509
  "channels": {
413
510
  "homebrew": "Language and VM for agent programs that wait and resume"
414
511
  },
@@ -447,34 +544,21 @@ export const portfolioSnapshot = {
447
544
  "primaryAction": "Get started",
448
545
  "secondaryAction": "What works today"
449
546
  },
450
- "status": {
451
- "default": "proposed"
547
+ "headings": {
548
+ "model-title": "The people in a room run it.",
549
+ "start-title": "Start with the local tour.",
550
+ "install-and-take-the-tour": "Install and take the tour",
551
+ "choose-a-network": "Choose a network",
552
+ "sign-and-send": "Sign and send",
553
+ "work-title": "Share work across agent tools.",
554
+ "agents-title": "Let your agent join the room.",
555
+ "scope-title": "Choose who can read the conversation.",
556
+ "public-rooms": "Public rooms",
557
+ "private-rooms": "Private rooms",
558
+ "compare-title": "Choose where the work lives.",
559
+ "questions-title": "Before you install.",
560
+ "build-title": "Try the local tour."
452
561
  },
453
- "reviewedOn": "2026-09-24"
454
- }
455
- },
456
- "valhalla-album": {
457
- "id": "valhalla-album",
458
- "name": "valhalla",
459
- "oneLiner": "Five-track ambient album released as a draft and revised in public",
460
- "brandDescription": null,
461
- "canonicalUrl": "https://hraness.com/valhalla",
462
- "status": "active",
463
- "copyStatus": "proposed",
464
- "aliases": [],
465
- "mark": "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' width='32' height='32'%3E%3Cpath fill='%232474d4' fill-rule='evenodd' d='M5 24.8C5 18.8 9 15.2 13.8 15.2C18.6 15.2 22.6 18.8 22.6 24.8L22.6 27.5L5 27.5ZM4 25.7L23.8 25.7L23.8 26.7L4 26.7Z'/%3E%3Cpath fill='%232474d4' d='M7.4 18.6C4.4 15.8 2.8 11.6 3.2 6.4C3.3 5.7 3.7 5.3 4.1 5.9C6.8 9 9 12.4 10.5 16.3C9.5 17.3 8.4 18 7.4 18.6Z'/%3E%3Cpath fill='%232474d4' d='M19.8 21.8C20.7 15.8 21.3 10.2 21.6 5.3L24.6 5.3C24.5 10.6 24.2 17.4 23.9 23C23.2 22.4 22.4 21.9 19.8 21.8Z'/%3E%3Cpath fill='%232474d4' d='M21.6 5.3C25.2 5.5 28.2 7 29.8 9.7C27.2 9.9 24.4 9.4 22.3 8.3Z'/%3E%3C/svg%3E",
466
- "messaging": {
467
- "formatVersion": 1,
468
- "product": "valhalla-album",
469
- "names": {
470
- "name": "valhalla"
471
- },
472
- "category": "Ambient electronic album",
473
- "tagline": "Hear an album being revised in public.",
474
- "short": "Five-track ambient album released as a draft and revised in public",
475
- "meta": "valhalla is a five-track ambient electronic album by Hraness, released as a draft and revised in public on Soundfish.",
476
- "medium": "valhalla is a five-track ambient electronic album by Hraness, about 11 minutes long, released as a draft and revised in public. Listen free on Soundfish.",
477
- "long": "valhalla is a five-track ambient electronic album by Hraness, about 11 minutes long. It was released as a draft and is being revised in public: each track keeps its takes in order on Soundfish, so you can hear the album change as it is finished. Listening needs no account. The draft is the point of the release: an album is usually finished in private and published once, while valhalla stays open, so each revision leaves a dated earlier take behind it.",
478
562
  "status": {
479
563
  "default": "proposed"
480
564
  },
@@ -484,8 +568,8 @@ export const portfolioSnapshot = {
484
568
  "peopleblade": {
485
569
  "id": "peopleblade",
486
570
  "name": "PeopleBlade",
487
- "oneLiner": "Local personal CRM for everyone you know, built for your agent",
488
- "brandDescription": "PeopleBlade is a local personal CRM for everyone you know, built for your agent. Bring contacts from apps and exports into one private book.",
571
+ "oneLiner": "The contact book you own, built for your agent",
572
+ "brandDescription": "The contact book you own, built for your agent. PeopleBlade is a local personal CRM that gathers contacts from your apps and exports into one private book.",
489
573
  "canonicalUrl": "https://peopleblade.com",
490
574
  "status": "active",
491
575
  "copyStatus": "proposed",
@@ -498,10 +582,10 @@ export const portfolioSnapshot = {
498
582
  "name": "PeopleBlade",
499
583
  "command": "peopleblade"
500
584
  },
501
- "category": "Contact book for agents",
502
- "tagline": "Own your contacts across every app.",
503
- "short": "Local personal CRM for everyone you know, built for your agent",
504
- "meta": "PeopleBlade is the contact book you own, built for your personal agent. It gathers everyone you know from your apps and shows where each contact came from.",
585
+ "category": "Local personal CRM",
586
+ "tagline": "A local personal CRM for everyone you know.",
587
+ "short": "The contact book you own, built for your agent",
588
+ "meta": "The contact book you own, built for your agent. PeopleBlade is a local personal CRM that gathers contacts from your apps and exports into one private book.",
505
589
  "medium": "PeopleBlade brings your contacts from Apple Contacts, iMessage, Google Contacts, WhatsApp, LinkedIn, and more into one private book on your computer. Keep notes beside each person, and let your agent search the book from the command line.",
506
590
  "long": "PeopleBlade is a local personal CRM for everyone you know. It imports contacts from Apple Contacts, iMessage, Google Contacts, Beeper, WhatsApp, and your LinkedIn, Instagram, and X data exports into one SQLite database on your computer, and every detail keeps the source it came from. Likely duplicates wait for your review, and a shared name is never enough to join two people. Write private notes beside each person, or let your agent search and research the book with JSON commands. Your agent never receives your passwords, and imports keep no message text. The CLI is free and MIT licensed.",
507
591
  "headlines": [
@@ -509,9 +593,27 @@ export const portfolioSnapshot = {
509
593
  ],
510
594
  "hero": {
511
595
  "heading": "Social Blade for everyone you know.",
512
- "summary": "PeopleBlade builds one contact book on your computer from your address book, chat apps, and exports. Your agent searches it, keeps notes, and tells you which import each contact came from.",
596
+ "summary": "One private contact book. Bring your contacts together and let your agent help you stay in touch.",
513
597
  "primaryAction": "Install the free CLI",
514
- "secondaryAction": "See the workspace"
598
+ "secondaryAction": "See how it works"
599
+ },
600
+ "headings": {
601
+ "home-video": "See it work, start to finish.",
602
+ "home-unification": "Bring your contacts together.",
603
+ "home-book": "Find people and keep the context.",
604
+ "home-agent": "Let your agent work with your contacts.",
605
+ "home-comparison": "Choose the contact book that fits.",
606
+ "home-boundary": "Know what your agent can access.",
607
+ "home-related": "Other tools from our studio",
608
+ "home-cloud": "Sync only when you choose.",
609
+ "home-personal-group": "The personal apps",
610
+ "home-platform-group": "The agent platform",
611
+ "home-install": "Try it in a minute",
612
+ "home-questions": "Questions",
613
+ "home-account": "Your account",
614
+ "home-step-import": "Import what you already have",
615
+ "home-step-matches": "Accept the matches",
616
+ "home-step-agent": "Ask your agent"
515
617
  },
516
618
  "status": {
517
619
  "default": "proposed"
@@ -549,10 +651,46 @@ export const portfolioSnapshot = {
549
651
  "long": "TextButler is an AI butler for your messages, running on your Mac. Turn it on for the chats you choose in iMessage, WhatsApp, or Beeper, and it replies as a clearly marked assistant that keeps notes on each person in files you can edit. New installs start paused and every contact starts off. Choose a local model, your Gateway key, or a connected subscription; local-model replies are in testing. Hosted AI providers receive the context needed to write a reply. TextButler is free and MIT licensed.",
550
652
  "hero": {
551
653
  "heading": "An AI butler in your messaging apps.",
552
- "summary": "When someone you’ve turned on texts “butler”, a clearly marked AI assistant answers for you from your Mac. It writes with a local model or the AI subscription you already pay for. Claude Code, Codex, or Devin can set it up for you.",
654
+ "summary": "A clearly marked AI assistant answers the people you choose, from your Mac.",
553
655
  "primaryAction": "Have your agent set it up",
554
656
  "secondaryAction": "See how it works"
555
657
  },
658
+ "headings": {
659
+ "how-title": "From “butler” to a marked reply.",
660
+ "supports-title": "What it works with",
661
+ "models-title": "Pick what writes replies",
662
+ "setup-title": "Your agent sets it up. You stay in charge.",
663
+ "control-title": "You stay in charge",
664
+ "self-title": "Ask it yourself",
665
+ "questions-title": "Questions",
666
+ "related-title": "Other tools from our studio",
667
+ "closing-title": "Start with one person",
668
+ "where-it-stands": "Where it stands",
669
+ "messaging-apps": "Messaging apps",
670
+ "your-mac": "Your Mac",
671
+ "install-it-yourself": "Install it yourself",
672
+ "prefer-to-do-it-yourself": "Prefer to do it yourself?",
673
+ "your-agent-speaks-its-language": "Your agent speaks its language",
674
+ "it-s-there-when-you-aren-t": "It’s there when you aren’t.",
675
+ "it-never-pretends-to-be-you": "It never pretends to be you.",
676
+ "it-runs-on-your-mac": "It runs on your Mac.",
677
+ "site-title": "TextButler: an AI butler for iMessage and WhatsApp on Mac",
678
+ "home-writer-local": "A local model on your Mac",
679
+ "home-writer-key": "Qwen 3.5 Flash with your own Vercel AI Gateway key",
680
+ "home-writer-subscription": "Your Claude Code, Codex, or Devin subscription",
681
+ "home-flow-text": "Someone texts you.",
682
+ "home-flow-checks": "It checks before it speaks.",
683
+ "home-flow-indicator": "👀, right away.",
684
+ "home-flow-context": "It reads the room.",
685
+ "home-flow-model": "Your chosen model writes the reply.",
686
+ "home-flow-send": "Marked, then sent.",
687
+ "home-flow-step-in": "You can step in anytime.",
688
+ "home-setup-agent": "Ask your agent.",
689
+ "home-setup-mac": "Say yes to your Mac.",
690
+ "home-setup-person": "Turn on one person.",
691
+ "home-related-apps": "The personal apps",
692
+ "home-related-tools": "The agent platform"
693
+ },
556
694
  "status": {
557
695
  "default": "proposed"
558
696
  },
@@ -589,10 +727,45 @@ export const portfolioSnapshot = {
589
727
  "long": "Agents that run commands reach the web through a browser they steer click by click, or through credentials they should never hold. GhostGet is a free, open-source CLI and TypeScript SDK that gives them a third route: a fixed list of reviewed web actions. Read a URL as Markdown, keep a searchable copy on your machine, archive one media item with SHA-256 records, or act in a connected account such as Gmail, Beeper, or X through one named operation. A measured article read costs about 3,800 tokens where the raw page carries 36,000. Consequential writes need an exact preview and your confirmation, and the agent never sees a login.",
590
728
  "hero": {
591
729
  "heading": "Your agent gets the result without clicking around.",
592
- "summary": "A free CLI and TypeScript SDK for Claude Code, Codex, Cursor, and other agents that run commands. Read a page as Markdown, save a media item, or use a connected account.",
730
+ "summary": "Read pages, save media, and use connected accounts through your agent.",
593
731
  "primaryAction": "Tell your agent",
594
732
  "secondaryAction": "See it work"
595
733
  },
734
+ "headings": {
735
+ "uses-heading": "Read a page, archive one item, or act in an account.",
736
+ "how-it-works-heading": "Give your agent a web task.",
737
+ "measured-heading": "Read the page without its HTML.",
738
+ "start-heading": "Tell your agent, or run two commands.",
739
+ "interfaces-title": "Use an Agent Skill, CLI, or TypeScript SDK",
740
+ "agent-skill": "Agent Skill",
741
+ "cli": "CLI",
742
+ "typescript-sdk": "TypeScript SDK",
743
+ "control-heading": "Review accounts and approvals.",
744
+ "local-by-design-title": "Choose what your agent can do.",
745
+ "comparison-title": "How GhostGet compares with other ways agents reach the web.",
746
+ "faq-title": "Before you install.",
747
+ "guides-title": "Start with the outcome you need.",
748
+ "read-your-first-page": "Read your first page",
749
+ "capture-urls-and-archive-media": "Capture URLs and archive media",
750
+ "check-provider-support": "Check provider support",
751
+ "understand-the-security-model": "Understand the security model",
752
+ "author-a-provider-plugin": "Author a provider plugin",
753
+ "browse-the-documentation": "Browse the documentation",
754
+ "arguments-title": "Arguments and comparisons",
755
+ "how-agents-reach-the-web": "How agents reach the web",
756
+ "maker-title": "Hraness",
757
+ "related-title": "Other tools from our studio",
758
+ "related-tools": "The agent platform",
759
+ "related-apps": "The personal apps",
760
+ "final-title": "Read your first page in two commands.",
761
+ "home-providers": "Use {{PROVIDER_SURFACE_COUNT}} services from your agent.",
762
+ "home-webmcp-sites": "Plus {{WEBMCP_REGISTRY_SITE_COUNT}} sites publishing WebMCP tools"
763
+ },
764
+ "channels": {
765
+ "social": {
766
+ "imageDescription": "Named web actions for AI agents: read pages, save media, use accounts."
767
+ }
768
+ },
596
769
  "status": {
597
770
  "default": "proposed"
598
771
  },
@@ -629,10 +802,37 @@ export const portfolioSnapshot = {
629
802
  "long": "Soulscrape is a free, MIT-licensed agent skill that turns sources you're allowed to use into a dated dossier on one person: how they decide, write, argue, and change their mind. It runs inside Claude Code, Codex, or another agent that loads skills, with your own model and tools, and needs no Soulscrape account. Facts, stated beliefs, patterns, and speculation stay apart, and the dossier lists what the record cannot settle. Keep it private, or publish it with a free Hraness account as a web page, a JSON packet, and a Markdown copy anyone can cite.",
630
803
  "hero": {
631
804
  "heading": "See how someone thinks, and where every claim comes from.",
632
- "summary": "Give your agent the sources you're allowed to use, and it writes a dated dossier with every claim tied to its evidence.",
805
+ "summary": "Turn sources into a dated dossier, with evidence behind every claim.",
633
806
  "primaryAction": "Install the skill",
634
807
  "secondaryAction": "Browse the dossiers"
635
808
  },
809
+ "headings": {
810
+ "how-title": "From sources to a dossier",
811
+ "examples-title": "Explore a finished dossier",
812
+ "method-title": "Read the claims alongside their evidence",
813
+ "use-cases-title": "Use the research in your own work",
814
+ "install-title": "Install and write your first dossier",
815
+ "indexes-title": "Publish when you are ready",
816
+ "boundaries-title": "Keep the research within its limits",
817
+ "questions-title": "Questions",
818
+ "related-title": "Other tools from our studio",
819
+ "cta-title": "Start with one person",
820
+ "home-flow-sources": "Choose the sources",
821
+ "home-flow-read": "Read the dossier",
822
+ "home-flow-publish": "Keep it private or publish",
823
+ "home-use-agent": "Give an agent context",
824
+ "home-use-research": "Research a person",
825
+ "home-use-writing": "Write about someone",
826
+ "home-use-personas": "Prepare an authorized assistant",
827
+ "home-use-collaboration": "Work with someone",
828
+ "home-use-self": "Understand your own patterns",
829
+ "home-trust-sources": "Authorized sources",
830
+ "home-trust-purpose": "A clear purpose",
831
+ "home-trust-instructions": "Research under your instructions",
832
+ "home-trust-claims": "Claims you can check",
833
+ "home-related-apps": "The personal apps",
834
+ "home-related-tools": "The agent platform"
835
+ },
636
836
  "status": {
637
837
  "default": "proposed"
638
838
  },
@@ -658,19 +858,34 @@ export const portfolioSnapshot = {
658
858
  "category": "Editable icon library",
659
859
  "tagline": "Icons and illustrations you can edit as vectors.",
660
860
  "short": "Editable vector icons and illustrations, with an editor in your browser",
661
- "meta": "icon.place is a library of editable vector icons and illustrations, with 9,518 concept pages and an in-browser editor that exports SVG, PNG, or a recipe.",
662
- "medium": "icon.place is a library of editable vector icons and illustrations, with 9,518 concept pages. Drawings open in an in-browser editor for styles, palettes, and parts, and export as SVG, PNG, or a recipe.",
663
- "long": "icon.place is a library of editable vector icons and illustrations. It has 9,518 concept pages and 8,965 drawn icons, adapted from Lucide, Tabler, Phosphor, Material Symbols, Font Awesome Free, Bootstrap Icons, and others, credited on each page. A shared in-browser editor changes styles, palettes, and parts, and exports SVG, PNG, or a replayable recipe. The studio composes connected scenes from 41 pieces, and you can remix your own SVG or trace an image. A separate drawing lab runs small Qwen models in the browser through WebGPU and records each drawing run as an ALGAL program; the live site does not use it yet.",
861
+ "meta": "icon.place is a library of editable vector icons and illustrations, with an in-browser editor that exports SVG, PNG, or a recipe.",
862
+ "medium": "icon.place is a library of editable vector icons and illustrations. Drawings open in an in-browser editor for styles, palettes, and parts, and export as SVG, PNG, or a recipe.",
863
+ "long": "icon.place is a library of editable vector icons and illustrations. Its concept pages include drawn icons adapted from Lucide, Tabler, Phosphor, Material Symbols, Font Awesome Free, Bootstrap Icons, and others, credited on each page. A shared in-browser editor changes styles, palettes, and parts, and exports SVG, PNG, or a replayable recipe. The studio composes connected scenes from reusable pieces, and you can remix your own SVG or trace an image. A separate drawing lab runs small Qwen models in the browser through WebGPU and records each drawing run as an ALGAL program; the live site does not use it yet.",
864
+ "hero": {
865
+ "heading": "Icons and illustrations you can edit as vectors.",
866
+ "summary": "icon.place is a library of editable vector icons and illustrations. Drawings open in an in-browser editor for styles, palettes, and parts, and export as SVG, PNG, or a recipe.",
867
+ "primaryAction": "Open an icon",
868
+ "secondaryAction": "Browse every icon"
869
+ },
870
+ "headings": {
871
+ "home-strip": "Twelve icons from the library",
872
+ "home-techniques": "One {subject}, {count} ways.",
873
+ "home-wall": "All {count} drawn icons, on one page.",
874
+ "home-why": "Your agent can draw an SVG. Can it draw the next 500 in the same hand?",
875
+ "home-styles": "A style is code, not a prompt",
876
+ "home-primitives": "Built from composable primitives",
877
+ "home-rendering": "Generation costs almost nothing"
878
+ },
664
879
  "status": {
665
880
  "default": "proposed"
666
881
  },
667
- "reviewedOn": "2026-09-29"
882
+ "reviewedOn": "2026-09-30"
668
883
  }
669
884
  },
670
885
  "slopcamera": {
671
886
  "id": "slopcamera",
672
887
  "name": "SlopCamera",
673
- "oneLiner": "Media studio for agents: images, 3D, animation, and video to revise",
888
+ "oneLiner": "A multimedia studio for your coding agent",
674
889
  "brandDescription": "SlopCamera lets your coding agent make images, diagrams, animation, 3D scenes, and video from source files it can keep revising.",
675
890
  "canonicalUrl": "https://slopcamera.com",
676
891
  "status": "active",
@@ -692,21 +907,43 @@ export const portfolioSnapshot = {
692
907
  ]
693
908
  },
694
909
  "category": "Media studio for agents",
695
- "tagline": "Visual work your agent can keep revising.",
696
- "short": "Media studio for agents: images, 3D, animation, and video to revise",
910
+ "tagline": "A multimedia studio for your coding agent.",
911
+ "short": "A multimedia studio for your coding agent",
697
912
  "meta": "SlopCamera lets your coding agent make images, diagrams, animation, 3D scenes, and video from source files it can keep revising.",
698
913
  "medium": "SlopCamera is a media studio for coding agents. Codex, Claude Code, and other agents make images, diagrams, animation, 3D scenes, and edited video from source files they can keep revising.",
699
914
  "long": "Agents that write code can also make media, but generated assets usually arrive as finished files nobody can change. SlopCamera is a media studio for coding agents: images, diagrams, animation, 3D scenes, and edited video are built from source files the agent can keep revising, so a change is a new render, not a new prompt lottery. Codex, Claude Code, and other command-capable agents drive it through the CLI and skill. SlopCamera is free and open source.",
700
915
  "hero": {
701
- "heading": "Visual work your agent can keep revising.",
702
- "summary": "Ask your agent to make images, diagrams, animation, 3D scenes, or video. Keep the source files for the next revision.",
703
- "primaryAction": "Install SlopCamera",
704
- "secondaryAction": "See what agents made"
916
+ "heading": "Give your agent a multimedia studio.",
917
+ "summary": "Make images, animation, 3D scenes, and video with your coding agent. Direct the details. Keep the source.",
918
+ "primaryAction": "Install Slopcamera",
919
+ "secondaryAction": "Watch the films"
920
+ },
921
+ "headings": {
922
+ "home-examples": "Take an idea somewhere strange.",
923
+ "home-revision": "The next version starts with a sentence.",
924
+ "home-revision-original": "Original",
925
+ "home-revision-revised": "Revised",
926
+ "home-start": "What will you make first?",
927
+ "home-start-animation": "Make an animated film",
928
+ "home-start-world": "Build a little world",
929
+ "home-start-footage": "Give footage a new life",
930
+ "home-install": "Install Slopcamera for your agent.",
931
+ "home-design": "Your tools. Your files.",
932
+ "home-questions": "Common questions",
933
+ "home-cta": "Make something worth replaying.",
934
+ "home-search-title": "SlopCamera: video, diagrams and 3D your coding agent can revise",
935
+ "agent-home-examples": "See what you can make",
936
+ "agent-home-revision": "Direct it again",
937
+ "agent-home-workflow": "From an idea to a finished piece",
938
+ "agent-home-install": "Install Slopcamera",
939
+ "agent-home-tools": "Choose your tools",
940
+ "agent-home-privacy": "Cost and privacy",
941
+ "agent-home-explore": "Explore"
705
942
  },
706
943
  "status": {
707
944
  "default": "proposed"
708
945
  },
709
- "reviewedOn": "2026-09-24"
946
+ "reviewedOn": "2026-09-30"
710
947
  }
711
948
  },
712
949
  "soundfish": {
@@ -738,6 +975,20 @@ export const portfolioSnapshot = {
738
975
  "primaryAction": "Upload an album",
739
976
  "secondaryAction": "Hear an album page"
740
977
  },
978
+ "headings": {
979
+ "home-features": "Every album page has a player, comments, and play counts.",
980
+ "home-midi": "Sketch the next idea in the MIDI editor.",
981
+ "home-comparison": "How Soundfish compares",
982
+ "home-releases": "Recent releases",
983
+ "home-interfaces": "For listeners, makers, and agents",
984
+ "home-questions": "Common questions",
985
+ "home-search-title": "Soundfish: album pages with timestamped comments",
986
+ "home-eyebrow": "Music for agents",
987
+ "home-closing": "Share it today. Improve it at the same link.",
988
+ "home-interface-listeners": "For listeners",
989
+ "home-interface-makers": "For makers",
990
+ "home-interface-agents": "For agents"
991
+ },
741
992
  "status": {
742
993
  "default": "proposed"
743
994
  },
@@ -747,7 +998,7 @@ export const portfolioSnapshot = {
747
998
  "sys1": {
748
999
  "id": "sys1",
749
1000
  "name": "Sys1",
750
- "oneLiner": "Answers an agent's small yes/no, choice, and score questions with probabilities",
1001
+ "oneLiner": "Saves repository check results and adds scoped code review",
751
1002
  "brandDescription": "Sys1 helps coding agents review changes against your repository's rules, with probability-scored answers from hosted Jev, a local model, or your own server.",
752
1003
  "canonicalUrl": "https://sys1.io",
753
1004
  "status": "active",
@@ -761,22 +1012,59 @@ export const portfolioSnapshot = {
761
1012
  "name": "Sys1",
762
1013
  "command": "sys1"
763
1014
  },
764
- "category": "Agent decision router",
765
- "tagline": "Give your agent a System 1.",
766
- "short": "Answers an agent's small yes/no, choice, and score questions with probabilities",
767
- "meta": "Sys1 answers an agent's small yes/no, choice, and score questions with probabilities, from TypeSafe's hosted Jev, a local model, or your own server.",
768
- "medium": "Sys1 keeps agents from spending big-model tokens on small decisions. It answers yes/no, choice, and score questions with probabilities from TypeSafe's hosted Jev, an experimental local model, or your own server.",
769
- "long": "Sys1 keeps agents from spending big-model tokens on small decisions. Agents ask yes/no, choice, and score questions and get validated answers with probabilities. You choose who answers: TypeSafe's hosted Jev, an experimental local model, or a compatible server you run. Its review and final-message checks are experimental and advisory. Every backend takes the same request format, Sys1 checks each answer against the question asked, and each response says which backend produced it. Call Sys1 from a Node or Bun client, embed its router, or run its local HTTP daemon for any language. Sys1 is free and MIT licensed.",
1015
+ "category": "Coding agent tools",
1016
+ "tagline": "Saved checks and code review",
1017
+ "short": "Saves repository check results and adds scoped code review",
1018
+ "meta": "Sys1 gives coding agents tools to review code, check completion claims, and get structured answers from Jev or a local model.",
1019
+ "medium": "Sys1 runs your repository check, keeps the output local, and saves a result you can inspect later. Add a scoped review when you need a second pass on the changes. Review and completion checks are advisory.",
1020
+ "long": "Sys1 runs your repository check, keeps the output local, and saves a result you can inspect later. Add a scoped review when you need a second pass on the changes. Its code review and completion checks are experimental and advisory. Agents and applications can also ask yes/no, choice, and score questions and receive validated answers with probabilities. Choose TypeSafe’s hosted Jev, an experimental local model, or a compatible server. Use the Node or Bun client, embed the router, or call its local HTTP gateway. The Sys1 site also offers System One Skills, an independent package that compacts noisy test and build output without Sys1 or a model. Sys1 is MIT licensed.",
770
1021
  "hero": {
771
- "heading": "Give your agent a System 1.",
772
- "summary": "Your agent asks small yes/no, choice, and score questions and gets validated answers with probabilities. You choose the model.",
1022
+ "heading": "Keep checks and code review together.",
1023
+ "summary": "Sys1 runs your repository check, keeps the output local, and saves a result you can inspect later. Add a scoped review when you need a second pass on the changes.",
773
1024
  "primaryAction": "Install Sys1",
774
- "secondaryAction": "Read the evaluations"
1025
+ "secondaryAction": "Explore the workflows"
1026
+ },
1027
+ "headings": {
1028
+ "review-heading": "Useful checks, inside your agent’s workflow.",
1029
+ "benchmarks-heading": "For compact output alone.",
1030
+ "launch-heading": "Meet Sys1.",
1031
+ "system-heading": "Three parts, one system.",
1032
+ "how-heading": "Use small decisions in your own code.",
1033
+ "trial-heading": "Test the decision on your task.",
1034
+ "integration-heading": "Three ways to call Sys1.",
1035
+ "ecosystem-heading": "What Sys1 connects to.",
1036
+ "install-heading": "Install Sys1.",
1037
+ "questions-heading": "Before you begin.",
1038
+ "docs-title": "Set up your first useful check",
1039
+ "getting-started-title": "Install Sys1",
1040
+ "workflows-title": "Save a check and continue its review",
1041
+ "connect-jev-title": "Connect hosted Jev for model calls",
1042
+ "audit-title": "Review changes with your agent",
1043
+ "verify-title": "Check a completion message",
1044
+ "compact-checks-title": "Compact test output",
1045
+ "system-one-title": "Ask for a structured decision",
1046
+ "integration-title": "Integration modes",
1047
+ "backends-title": "Other backends",
1048
+ "profiles-title": "Reuse application questions",
1049
+ "research-title": "Evaluate a model for your task",
1050
+ "workflow-review-heading": "Review a change against your rules",
1051
+ "workflow-completion-heading": "Check what “done” means",
1052
+ "docs-install-cli": "Install the CLI",
1053
+ "docs-first-jev-request": "Make your first Jev request",
1054
+ "docs-model-errors": "Choose the model and handle failures",
1055
+ "docs-portable-client": "Portable client",
1056
+ "docs-embedded-router": "Embedded Bun router",
1057
+ "docs-loopback-http": "Loopback HTTP"
1058
+ },
1059
+ "channels": {
1060
+ "social": {
1061
+ "imageDescription": "Keep checks and code review together."
1062
+ }
775
1063
  },
776
1064
  "status": {
777
1065
  "default": "proposed"
778
1066
  },
779
- "reviewedOn": "2026-09-29"
1067
+ "reviewedOn": "2026-09-30"
780
1068
  }
781
1069
  },
782
1070
  "sloptrade": {
@@ -811,7 +1099,18 @@ export const portfolioSnapshot = {
811
1099
  "heading": "AI writes the research. Your rules make the trade.",
812
1100
  "summary": "A researched build prompt your coding agent turns into a personal trading system where your rules approve every order.",
813
1101
  "primaryAction": "Get the prompt",
814
- "secondaryAction": "Read the architecture"
1102
+ "secondaryAction": "See how it works"
1103
+ },
1104
+ "headings": {
1105
+ "home-desk": "See the desk you'll own",
1106
+ "home-system": "What your agent builds",
1107
+ "home-sequence": "Start with order placement off",
1108
+ "home-access": "Who can do what",
1109
+ "home-comparison": "How it compares",
1110
+ "home-running": "What you need to run it",
1111
+ "home-buy": "Buy the prompt",
1112
+ "home-notes": "Read the design notes",
1113
+ "home-questions": "Questions"
815
1114
  },
816
1115
  "status": {
817
1116
  "default": "proposed",
@@ -885,6 +1184,9 @@ export const portfolioSnapshot = {
885
1184
  "primaryAction": "Play sound",
886
1185
  "secondaryAction": "Read the guides"
887
1186
  },
1187
+ "headings": {
1188
+ "home-search-title": "Free Brown, Pink & White Noise and Ocean Waves | Sleepyland"
1189
+ },
888
1190
  "status": {
889
1191
  "default": "proposed"
890
1192
  },
@@ -917,7 +1219,25 @@ export const portfolioSnapshot = {
917
1219
  "heading": "A daily front page that says why each story ranked.",
918
1220
  "summary": "Tech & AI, World, and Finance, one dated edition a day. Every story links the original source.",
919
1221
  "primaryAction": "Read today's edition",
920
- "secondaryAction": "See the archive"
1222
+ "secondaryAction": "See how stories are chosen"
1223
+ },
1224
+ "headings": {
1225
+ "home-search-title": "Rough Day: daily Tech & AI, World, and Finance news",
1226
+ "roughday-walkthrough-title": "See a day on Rough Day",
1227
+ "roughday-working-model-title": "How stories are chosen",
1228
+ "roughday-interfaces-title": "Other ways to read the archive",
1229
+ "roughday-evidence-title": "What each story shows",
1230
+ "roughday-compare-title": "How Rough Day compares",
1231
+ "roughday-trust-title": "Sources and privacy",
1232
+ "roughday-questions-title": "Common questions",
1233
+ "roughday-action-title": "Open the current archive.",
1234
+ "info-search-title": "How Rough Day works",
1235
+ "info-story-proof": "How to read a story",
1236
+ "info-interface-archive": "Daily archive",
1237
+ "info-interface-category": "Category link",
1238
+ "info-interface-markdown": "Markdown",
1239
+ "info-interface-feed": "Atom feed",
1240
+ "info-interface-guide": "Site guide and sitemap"
921
1241
  },
922
1242
  "status": {
923
1243
  "default": "proposed"
@@ -960,6 +1280,9 @@ export const portfolioSnapshot = {
960
1280
  "primaryAction": "Browse the timeline",
961
1281
  "secondaryAction": "Download the data"
962
1282
  },
1283
+ "headings": {
1284
+ "record-keeping": "How this record is kept"
1285
+ },
963
1286
  "status": {
964
1287
  "default": "proposed"
965
1288
  },
@@ -994,6 +1317,13 @@ export const portfolioSnapshot = {
994
1317
  "primaryAction": "Browse the index",
995
1318
  "secondaryAction": "Read the method"
996
1319
  },
1320
+ "headings": {
1321
+ "agreement": "Where kinds of evidence agree",
1322
+ "record-guide": "How to read a record",
1323
+ "evidence-kinds": "Five kinds of evidence",
1324
+ "browse": "Browse the index",
1325
+ "categories": "Categories"
1326
+ },
997
1327
  "status": {
998
1328
  "default": "proposed"
999
1329
  },
@@ -1014,7 +1344,8 @@ export const portfolioSnapshot = {
1014
1344
  "formatVersion": 1,
1015
1345
  "product": "act60",
1016
1346
  "names": {
1017
- "name": "act60.me"
1347
+ "name": "act60.me",
1348
+ "shortName": "ACT60"
1018
1349
  },
1019
1350
  "category": "Act 60 planner",
1020
1351
  "tagline": "Model the move to Puerto Rico before you make it.",
@@ -1023,11 +1354,49 @@ export const portfolioSnapshot = {
1023
1354
  "medium": "act60.me estimates Puerto Rico Act 60 savings after fees and yearly costs, with every assumption and source date beside the result. Sourced guides cover applying, federal residency, and moving; a private tracker counts your presence days.",
1024
1355
  "long": "Act 60 promises large Puerto Rico tax savings, but fees, yearly costs, and the federal residency rules decide the real number. act60.me models the move before you make it: a calculator that itemizes one-time and annual costs beside its assumptions, guides that cite the official sources and the date each was checked, and a private day tracker for the presence tests a calendar can measure. Investor applications filed in 2026 face a December 31 deadline; the guides say which rules changed and which still apply.",
1025
1356
  "hero": {
1026
- "heading": "Model the move to Puerto Rico",
1027
- "summary": "Estimate your Act 60 savings after fees and yearly costs, with every assumption and source date beside the result.",
1357
+ "heading": "Puerto Rico Act 60 calculator",
1358
+ "summary": "Estimate Act 60 savings from the export-services benefit (formerly Act 20) and the investor benefit (formerly Act 22) after fees, the investor donation, and yearly costs. Rates and source dates sit beside the result. No account needed.",
1028
1359
  "primaryAction": "Estimate your savings",
1029
1360
  "secondaryAction": "Choose your guide"
1030
1361
  },
1362
+ "headings": {
1363
+ "home-search-title": "Act 60 calculator: Puerto Rico tax savings after costs | act60.me",
1364
+ "tracker-preview-title": "See the day tracker before you sign in.",
1365
+ "how-to-read-title": "Choose the guide for your question.",
1366
+ "compare-title": "How act60.me compares",
1367
+ "benefits-title": "The business and investor benefits follow different rules.",
1368
+ "costs-title": "The estimate itemizes one-time and annual costs.",
1369
+ "requirements-title": "Plan the application, then the years after it.",
1370
+ "residence-title": "Three residence checks apply every year.",
1371
+ "steps-title": "Plan the work from filing through each later year.",
1372
+ "questions-title": "Common questions about the benefits and the move.",
1373
+ "sources-title": "Check the rules against the official sources.",
1374
+ "calculator-title": "Estimate your savings after costs",
1375
+ "home-presence-tax-home-or-closer-connection": "Presence, tax home, or closer connection",
1376
+ "home-export-services-business-treatment": "Export-services business treatment",
1377
+ "home-individual-investor-treatment": "Individual investor treatment",
1378
+ "home-applying-moving-and-daily-life": "Applying, moving, and daily life",
1379
+ "home-business-chapter-or-investor-chapter": "Business chapter or investor chapter",
1380
+ "home-grant-receipt-or-federal-residence": "Grant, receipt, or federal residence",
1381
+ "home-service-business-profit": "Service business profit",
1382
+ "home-investment-income-after-the-move": "Investment income after the move",
1383
+ "home-pass-one-day-count-option": "Pass one day-count option",
1384
+ "home-base-your-work-in-puerto-rico": "Base your work in Puerto Rico",
1385
+ "home-make-puerto-rico-the-center-of-your-life": "Make Puerto Rico the center of your life",
1386
+ "home-prepare-and-file-the-applications": "Prepare and file the applications",
1387
+ "home-build-a-real-puerto-rico-life": "Build a real Puerto Rico life",
1388
+ "home-complete-the-investor-home-commitment": "Complete the investor home commitment",
1389
+ "home-file-and-keep-proof-every-year": "File and keep proof every year",
1390
+ "pillar-calculator": "Calculator",
1391
+ "pillar-requirements": "Requirements",
1392
+ "pillar-days": "Day tracker",
1393
+ "social-image-title": "Act 60 calculator"
1394
+ },
1395
+ "channels": {
1396
+ "social": {
1397
+ "imageDescription": "Estimate Puerto Rico Act 60 savings after fees and yearly costs"
1398
+ }
1399
+ },
1031
1400
  "status": {
1032
1401
  "default": "proposed"
1033
1402
  },
@@ -1060,8 +1429,15 @@ export const portfolioSnapshot = {
1060
1429
  "hero": {
1061
1430
  "heading": "Give each app state you test its own URL.",
1062
1431
  "summary": "Repeatable states for browser agents: your real interface on fixture data, at a URL you can open, test, and share.",
1063
- "primaryAction": "Add Direct to a project",
1064
- "secondaryAction": "See a named state"
1432
+ "primaryAction": "install from npm",
1433
+ "secondaryAction": "read the source"
1434
+ },
1435
+ "headings": {
1436
+ "resources": "Direct resources",
1437
+ "install": "Install the Agent Skill",
1438
+ "states": "open any state by url",
1439
+ "readiness": "know when the app is ready",
1440
+ "features": "test your real feature code"
1065
1441
  },
1066
1442
  "status": {
1067
1443
  "default": "proposed"
@@ -1103,6 +1479,16 @@ export const portfolioSnapshot = {
1103
1479
  "primaryAction": "Run a check",
1104
1480
  "secondaryAction": "Verify a receipt"
1105
1481
  },
1482
+ "headings": {
1483
+ "how-title": "Anyone can check the score.",
1484
+ "issue-fresh-puzzles": "Issue fresh puzzles.",
1485
+ "connect-your-agent": "Connect your agent.",
1486
+ "score-each-answer": "Score each answer.",
1487
+ "keep-the-signed-result": "Keep the signed result.",
1488
+ "local-title": "Try a check on your machine.",
1489
+ "integrations-title": "Where to add a check.",
1490
+ "results-title": "Check the receipt yourself."
1491
+ },
1106
1492
  "status": {
1107
1493
  "default": "proposed"
1108
1494
  },
@@ -1145,6 +1531,17 @@ export const portfolioSnapshot = {
1145
1531
  "primaryAction": "Start your timeline",
1146
1532
  "secondaryAction": "See an example"
1147
1533
  },
1534
+ "headings": {
1535
+ "home-search-title": "Life timeline maker: chart your life in chapters | Lifecharts",
1536
+ "timeline-guide": "How a life timeline works",
1537
+ "home-two-ways-to-see-the-same-life": "Two ways to see the same life",
1538
+ "home-what-the-percentages-mean": "What the percentages mean",
1539
+ "home-add-a-longer-horizon": "Add a longer horizon",
1540
+ "home-save-share-and-embed": "Save, share, and embed",
1541
+ "timeline-places": "Send it to a friend or put it on your site",
1542
+ "timeline-agent": "Make it with your agent",
1543
+ "timeline-compare": "How Lifecharts compares"
1544
+ },
1148
1545
  "status": {
1149
1546
  "default": "proposed"
1150
1547
  },
@@ -1179,6 +1576,14 @@ export const portfolioSnapshot = {
1179
1576
  "primaryAction": "Read the latest",
1180
1577
  "secondaryAction": "Compare the cases"
1181
1578
  },
1579
+ "headings": {
1580
+ "how-the-work-gets-done": "How the work gets done",
1581
+ "compare-cases-scale-and-industries": "Compare cases, scale, and industries",
1582
+ "agent-scale": "Agent scale",
1583
+ "across-industries": "Across industries",
1584
+ "the-software-factory-field-guide": "The software factory field guide",
1585
+ "home-company-cases": "{count} company cases"
1586
+ },
1182
1587
  "status": {
1183
1588
  "default": "proposed"
1184
1589
  },
@@ -1206,6 +1611,11 @@ export const portfolioSnapshot = {
1206
1611
  "short": "Tests whether Alexander-inspired patterns help agents write better code",
1207
1612
  "meta": "Pattern Language sketches Alexander's Notes on the Synthesis of Form in ALGAL-form and tests whether those patterns help an agent produce better code.",
1208
1613
  "medium": "Pattern Language sketches Christopher Alexander's Notes on the Synthesis of Form as a runnable pattern language in ALGAL-form. It tests that question with executable artifacts; an advantage over ordinary prompting is not proven.",
1614
+ "hero": {
1615
+ "heading": "Alexander's notes, sketched as runnable ALGAL form.",
1616
+ "summary": "Pattern Language sketches Christopher Alexander's Notes on the Synthesis of Form as a runnable pattern language in ALGAL-form. It tests that question with executable artifacts; an advantage over ordinary prompting is not proven.",
1617
+ "primaryAction": "read the studies"
1618
+ },
1209
1619
  "status": {
1210
1620
  "default": "proposed"
1211
1621
  }
@@ -1233,6 +1643,31 @@ export const portfolioSnapshot = {
1233
1643
  "short": "Runs a check once, returns a short result, and keeps the full log",
1234
1644
  "meta": "System One Skills gives Devin, Claude Code, and Codex one skill that runs a noisy check once, returns a short result, and saves the full log locally.",
1235
1645
  "medium": "System One Skills gives Devin, Claude Code, and Codex one skill, system-one-verify, for long test and build logs. It runs the command once, returns a short result with the exit status, and saves the full log on your machine.",
1646
+ "hero": {
1647
+ "heading": "Give your agent shorter check results.",
1648
+ "summary": "System One Skills runs your noisy tests and builds once, returns a short result, and saves the full log. Install the system-one-verify skill for Codex, Claude Code, or Devin.",
1649
+ "primaryAction": "install the skill"
1650
+ },
1651
+ "headings": {
1652
+ "review-heading": "Add a second pass on code changes.",
1653
+ "verify-heading": "Check a completion message.",
1654
+ "workflows-heading": "Try decision workflows from source",
1655
+ "shipped-heading": "Keep noisy check output short",
1656
+ "use-it-for-a-status-decision": "Use it for a status decision.",
1657
+ "use-native-tools-for-diagnosis": "Use native tools for diagnosis.",
1658
+ "evidence-heading": "What has been measured.",
1659
+ "system-one-skills-research-candidates": "System One Skills research candidates",
1660
+ "catalog-heading": "Further compact-output research",
1661
+ "install-heading": "Install in your project.",
1662
+ "social-image-title": "Shorter test logs for your agent",
1663
+ "skills-first-check-heading": "Run your first check",
1664
+ "skills-further-reading-heading": "Further reading"
1665
+ },
1666
+ "channels": {
1667
+ "social": {
1668
+ "imageDescription": "No model or API key required."
1669
+ }
1670
+ },
1236
1671
  "status": {
1237
1672
  "default": "proposed"
1238
1673
  }
@@ -1260,12 +1695,69 @@ export const portfolioSnapshot = {
1260
1695
  "short": "Packages provider reads and plan checks as programs with no model calls",
1261
1696
  "meta": "GhostGet Skills packages GhostGet workflows as programs for Claude Code, Codex, and Devin, with no model calls and a receipt you can replay offline.",
1262
1697
  "medium": "GhostGet Skills packages common GhostGet workflows as programs for Claude Code, Codex, and Devin. They make no model calls, and every run leaves a receipt you can replay offline.",
1698
+ "hero": {
1699
+ "heading": "GhostGet workflows as programs you can replay.",
1700
+ "summary": "GhostGet Skills packages common GhostGet workflows as programs for Claude Code, Codex, and Devin. They make no model calls, and every run leaves a receipt you can replay offline.",
1701
+ "primaryAction": "install the skills"
1702
+ },
1263
1703
  "status": {
1264
1704
  "default": "proposed"
1265
1705
  }
1266
1706
  }
1267
1707
  }
1268
1708
  },
1709
+ "packs": [
1710
+ {
1711
+ "slug": "relationships",
1712
+ "title": "Relationships",
1713
+ "tone": "rose",
1714
+ "members": [
1715
+ "peopleblade",
1716
+ "message-like-me",
1717
+ "wrench",
1718
+ "soulscrape",
1719
+ "lifedaysleft"
1720
+ ]
1721
+ },
1722
+ {
1723
+ "slug": "knowledge",
1724
+ "title": "Knowledge",
1725
+ "tone": "indigo",
1726
+ "members": [
1727
+ "kb",
1728
+ "oh-computer",
1729
+ "sponge",
1730
+ "sloptrade",
1731
+ "roughday"
1732
+ ]
1733
+ },
1734
+ {
1735
+ "slug": "media",
1736
+ "title": "Media",
1737
+ "tone": "amber",
1738
+ "members": [
1739
+ "iconplace",
1740
+ "slopcamera",
1741
+ "soundfish"
1742
+ ]
1743
+ },
1744
+ {
1745
+ "slug": "token-maximalists",
1746
+ "title": "Tools for Token Maximalists",
1747
+ "tone": "emerald",
1748
+ "members": [
1749
+ "xcb",
1750
+ "algal",
1751
+ "gobstopper",
1752
+ "sys1",
1753
+ "aicharts",
1754
+ "direct",
1755
+ "clankdar",
1756
+ "valhalla",
1757
+ "swft"
1758
+ ]
1759
+ }
1760
+ ],
1269
1761
  "relations": [
1270
1762
  {
1271
1763
  "id": "runtime:lifedaysleft:slopcamera:uses",
@@ -1592,5 +2084,5 @@ export const portfolioSnapshot = {
1592
2084
  "detail": "The icon.place drawing lab runs each experiment as an ALGAL program in the browser and records the proposal, candidates, and selection as receipts it can replay; the live site does not use ALGAL yet."
1593
2085
  }
1594
2086
  ],
1595
- "digest": "sha256:d43bbc1113c077b872d2e11a4a70490cd537d5734951d0c3c4bd8e061ce583a9"
2087
+ "digest": "sha256:1af50f624f0d06ec13e1531564a8066795ae3fed732210b6f642179730100103"
1596
2088
  } as const;