From 948671b52580da76473fb15668a8bac9876ee758 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 2 Aug 2026 16:53:53 +0000 Subject: [PATCH 1/2] Rewrite the hero and examples copy, and make the sample fit a phone The hero was a list of nouns wearing a sentence, and "Each opens in the playground, running" is not a thing anybody says out loud. Both rewritten to say what is actually on offer. The HyperTalk sample was clipped on a phone: the longest line is fifty-one characters, which cannot be shrunk to fit and gave no sign it could be scrolled, so it just stopped at the edge. The page had no media query at all. It has one now, and on a narrow screen the sample wraps rather than disappearing; the buttons stack instead of crowding. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01R7eaxUAqy2gKQSBNnYZoFr --- apps/web/index.html | 11 ++++++----- apps/web/src/landing.css | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/apps/web/index.html b/apps/web/index.html index 660456e..02ab579 100644 --- a/apps/web/index.html +++ b/apps/web/index.html @@ -6,7 +6,7 @@ HyperLab — an open-source, AI-native successor to HyperCard @@ -36,8 +36,9 @@

Welcome to HyperLab

- An open-source, AI-native successor to HyperCard. Cards, - buttons, fields and HyperTalk, and a stack stays editable while it runs. + An open-source, AI-native successor to HyperCard. A script + can stop and ask a language model, and the stack stays editable the whole time + it runs.

 on mouseUp
@@ -114,8 +115,8 @@ 

Examples

- Each opens in the playground, running. Switch to the edit tool to read the - scripts that make it work. + Open any of these and it starts running in the playground. Switch to the edit + tool to read the scripts behind it.

@@ -211,9 +218,9 @@

The desktop application

same file.

- Stacks export as a PDF, as a PNG of the map, as a self-contained web page, and - as a Decker deck — from the - playground as readily as from the application. + Every export the application offers works in the playground too: PDF, a PNG of + the map, a self-contained web page, and a + Decker deck.

diff --git a/docs/website.md b/docs/website.md index 0d6814a..75b70b1 100644 --- a/docs/website.md +++ b/docs/website.md @@ -12,17 +12,17 @@ follows from there being no server. ## The playground is the application -The playground page renders the desktop's own React components — the card, -the inspector, the assistant sidebar, the map, the dialogs. It can, because +The playground page renders the desktop's own React components, down to the +dialog a script blocks on. It can, because the desktop keeps its whole shell behind one module (`apps/desktop/src/api.ts`, a typed wrapper per command), and the renderer never learns which shell answers. Vite swaps that one module for `apps/web/src/api.ts`; nothing else in the desktop tree is touched, so the two interfaces cannot drift apart — they are the same files. -Behind the web `api.ts` sits `crates/web` (`hyperlab-web`): the same crates -the desktop wraps — runtime, parser, persistence, graph, the assistant — -compiled to WebAssembly, exporting one function per desktop command. Its +Behind the web `api.ts` sits `crates/web` (`hyperlab-web`), which wraps the +same crates the Tauri shell wraps, compiled to WebAssembly and exporting one +function per desktop command. Its `view.rs` is a hand-kept twin of the desktop's, and a test serializes a snapshot and checks the field names against what the renderer expects. @@ -110,8 +110,8 @@ keeps the same shape with the parts a page has: script blocked mid-line on `ai("…")`. The wire protocol is the same Rust code the desktop uses (`hyperlab-ai-providers` built without its native clients); only the transport is the browser's. -- The site being static files is the guarantee's other half: there is no - HyperLab server for a key, a stack, or a question to visit. +- The site being static files is the guarantee's other half: nothing a + browser sends has anywhere of ours to stop off at on the way. Anthropic requires the `anthropic-dangerous-direct-browser-access` header before answering a browser at all. Sending it is honest here: the request