Prefix all SX URLs with /sx/ for WhatsApp-safe sharing

All routes moved under /sx/ prefix:
- / redirects to /sx/
- /sx/ serves home page
- /sx/<path:expr> is the catch-all for SX expression URLs
- Bare /(...) and /~... redirect to /sx/(...) and /sx/~...
- All ~600 hrefs, sx-get attrs, defhandler paths, redirect
  targets, and blueprint routes updated across 44 files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 19:07:09 +00:00
parent acd2fa6541
commit de80d921e9
44 changed files with 701 additions and 687 deletions

View File

@@ -3,246 +3,246 @@
;; @css aria-selected:bg-violet-200 aria-selected:text-violet-900
(define docs-nav-items (list
(dict :label "Introduction" :href "/(language.(doc.introduction))")
(dict :label "Getting Started" :href "/(language.(doc.getting-started))")
(dict :label "Components" :href "/(language.(doc.components))")
(dict :label "Evaluator" :href "/(language.(doc.evaluator))")
(dict :label "Primitives" :href "/(language.(doc.primitives))")
(dict :label "Special Forms" :href "/(language.(doc.special-forms))")
(dict :label "Server Rendering" :href "/(language.(doc.server-rendering))")))
(dict :label "Introduction" :href "/sx/(language.(doc.introduction))")
(dict :label "Getting Started" :href "/sx/(language.(doc.getting-started))")
(dict :label "Components" :href "/sx/(language.(doc.components))")
(dict :label "Evaluator" :href "/sx/(language.(doc.evaluator))")
(dict :label "Primitives" :href "/sx/(language.(doc.primitives))")
(dict :label "Special Forms" :href "/sx/(language.(doc.special-forms))")
(dict :label "Server Rendering" :href "/sx/(language.(doc.server-rendering))")))
(define reference-nav-items (list
(dict :label "Attributes" :href "/(geography.(hypermedia.(reference.attributes)))")
(dict :label "Headers" :href "/(geography.(hypermedia.(reference.headers)))")
(dict :label "Events" :href "/(geography.(hypermedia.(reference.events)))")
(dict :label "JS API" :href "/(geography.(hypermedia.(reference.js-api)))")))
(dict :label "Attributes" :href "/sx/(geography.(hypermedia.(reference.attributes)))")
(dict :label "Headers" :href "/sx/(geography.(hypermedia.(reference.headers)))")
(dict :label "Events" :href "/sx/(geography.(hypermedia.(reference.events)))")
(dict :label "JS API" :href "/sx/(geography.(hypermedia.(reference.js-api)))")))
(define protocols-nav-items (list
(dict :label "Wire Format" :href "/(applications.(protocol.wire-format))")
(dict :label "Fragments" :href "/(applications.(protocol.fragments))")
(dict :label "Resolver I/O" :href "/(applications.(protocol.resolver-io))")
(dict :label "Internal Services" :href "/(applications.(protocol.internal-services))")
(dict :label "ActivityPub" :href "/(applications.(protocol.activitypub))")
(dict :label "Future" :href "/(applications.(protocol.future))")))
(dict :label "Wire Format" :href "/sx/(applications.(protocol.wire-format))")
(dict :label "Fragments" :href "/sx/(applications.(protocol.fragments))")
(dict :label "Resolver I/O" :href "/sx/(applications.(protocol.resolver-io))")
(dict :label "Internal Services" :href "/sx/(applications.(protocol.internal-services))")
(dict :label "ActivityPub" :href "/sx/(applications.(protocol.activitypub))")
(dict :label "Future" :href "/sx/(applications.(protocol.future))")))
(define examples-nav-items (list
(dict :label "Click to Load" :href "/(geography.(hypermedia.(example.click-to-load)))")
(dict :label "Form Submission" :href "/(geography.(hypermedia.(example.form-submission)))")
(dict :label "Polling" :href "/(geography.(hypermedia.(example.polling)))")
(dict :label "Delete Row" :href "/(geography.(hypermedia.(example.delete-row)))")
(dict :label "Inline Edit" :href "/(geography.(hypermedia.(example.inline-edit)))")
(dict :label "OOB Swaps" :href "/(geography.(hypermedia.(example.oob-swaps)))")
(dict :label "Lazy Loading" :href "/(geography.(hypermedia.(example.lazy-loading)))")
(dict :label "Infinite Scroll" :href "/(geography.(hypermedia.(example.infinite-scroll)))")
(dict :label "Progress Bar" :href "/(geography.(hypermedia.(example.progress-bar)))")
(dict :label "Active Search" :href "/(geography.(hypermedia.(example.active-search)))")
(dict :label "Inline Validation" :href "/(geography.(hypermedia.(example.inline-validation)))")
(dict :label "Value Select" :href "/(geography.(hypermedia.(example.value-select)))")
(dict :label "Reset on Submit" :href "/(geography.(hypermedia.(example.reset-on-submit)))")
(dict :label "Edit Row" :href "/(geography.(hypermedia.(example.edit-row)))")
(dict :label "Bulk Update" :href "/(geography.(hypermedia.(example.bulk-update)))")
(dict :label "Swap Positions" :href "/(geography.(hypermedia.(example.swap-positions)))")
(dict :label "Select Filter" :href "/(geography.(hypermedia.(example.select-filter)))")
(dict :label "Tabs" :href "/(geography.(hypermedia.(example.tabs)))")
(dict :label "Animations" :href "/(geography.(hypermedia.(example.animations)))")
(dict :label "Dialogs" :href "/(geography.(hypermedia.(example.dialogs)))")
(dict :label "Keyboard Shortcuts" :href "/(geography.(hypermedia.(example.keyboard-shortcuts)))")
(dict :label "PUT / PATCH" :href "/(geography.(hypermedia.(example.put-patch)))")
(dict :label "JSON Encoding" :href "/(geography.(hypermedia.(example.json-encoding)))")
(dict :label "Vals & Headers" :href "/(geography.(hypermedia.(example.vals-and-headers)))")
(dict :label "Loading States" :href "/(geography.(hypermedia.(example.loading-states)))")
(dict :label "Request Abort" :href "/(geography.(hypermedia.(example.sync-replace)))")
(dict :label "Retry" :href "/(geography.(hypermedia.(example.retry)))")))
(dict :label "Click to Load" :href "/sx/(geography.(hypermedia.(example.click-to-load)))")
(dict :label "Form Submission" :href "/sx/(geography.(hypermedia.(example.form-submission)))")
(dict :label "Polling" :href "/sx/(geography.(hypermedia.(example.polling)))")
(dict :label "Delete Row" :href "/sx/(geography.(hypermedia.(example.delete-row)))")
(dict :label "Inline Edit" :href "/sx/(geography.(hypermedia.(example.inline-edit)))")
(dict :label "OOB Swaps" :href "/sx/(geography.(hypermedia.(example.oob-swaps)))")
(dict :label "Lazy Loading" :href "/sx/(geography.(hypermedia.(example.lazy-loading)))")
(dict :label "Infinite Scroll" :href "/sx/(geography.(hypermedia.(example.infinite-scroll)))")
(dict :label "Progress Bar" :href "/sx/(geography.(hypermedia.(example.progress-bar)))")
(dict :label "Active Search" :href "/sx/(geography.(hypermedia.(example.active-search)))")
(dict :label "Inline Validation" :href "/sx/(geography.(hypermedia.(example.inline-validation)))")
(dict :label "Value Select" :href "/sx/(geography.(hypermedia.(example.value-select)))")
(dict :label "Reset on Submit" :href "/sx/(geography.(hypermedia.(example.reset-on-submit)))")
(dict :label "Edit Row" :href "/sx/(geography.(hypermedia.(example.edit-row)))")
(dict :label "Bulk Update" :href "/sx/(geography.(hypermedia.(example.bulk-update)))")
(dict :label "Swap Positions" :href "/sx/(geography.(hypermedia.(example.swap-positions)))")
(dict :label "Select Filter" :href "/sx/(geography.(hypermedia.(example.select-filter)))")
(dict :label "Tabs" :href "/sx/(geography.(hypermedia.(example.tabs)))")
(dict :label "Animations" :href "/sx/(geography.(hypermedia.(example.animations)))")
(dict :label "Dialogs" :href "/sx/(geography.(hypermedia.(example.dialogs)))")
(dict :label "Keyboard Shortcuts" :href "/sx/(geography.(hypermedia.(example.keyboard-shortcuts)))")
(dict :label "PUT / PATCH" :href "/sx/(geography.(hypermedia.(example.put-patch)))")
(dict :label "JSON Encoding" :href "/sx/(geography.(hypermedia.(example.json-encoding)))")
(dict :label "Vals & Headers" :href "/sx/(geography.(hypermedia.(example.vals-and-headers)))")
(dict :label "Loading States" :href "/sx/(geography.(hypermedia.(example.loading-states)))")
(dict :label "Request Abort" :href "/sx/(geography.(hypermedia.(example.sync-replace)))")
(dict :label "Retry" :href "/sx/(geography.(hypermedia.(example.retry)))")))
(define cssx-nav-items (list
(dict :label "Overview" :href "/(applications.(cssx))")
(dict :label "Patterns" :href "/(applications.(cssx.patterns))")
(dict :label "Delivery" :href "/(applications.(cssx.delivery))")
(dict :label "Async CSS" :href "/(applications.(cssx.async))")
(dict :label "Live Styles" :href "/(applications.(cssx.live))")
(dict :label "Comparisons" :href "/(applications.(cssx.comparisons))")
(dict :label "Philosophy" :href "/(applications.(cssx.philosophy))")))
(dict :label "Overview" :href "/sx/(applications.(cssx))")
(dict :label "Patterns" :href "/sx/(applications.(cssx.patterns))")
(dict :label "Delivery" :href "/sx/(applications.(cssx.delivery))")
(dict :label "Async CSS" :href "/sx/(applications.(cssx.async))")
(dict :label "Live Styles" :href "/sx/(applications.(cssx.live))")
(dict :label "Comparisons" :href "/sx/(applications.(cssx.comparisons))")
(dict :label "Philosophy" :href "/sx/(applications.(cssx.philosophy))")))
(define essays-nav-items (list
(dict :label "Why S-Expressions" :href "/(etc.(essay.why-sexps))"
(dict :label "Why S-Expressions" :href "/sx/(etc.(essay.why-sexps))"
:summary "Why SX uses s-expressions instead of HTML templates, JSX, or any other syntax.")
(dict :label "The htmx/React Hybrid" :href "/(etc.(essay.htmx-react-hybrid))"
(dict :label "The htmx/React Hybrid" :href "/sx/(etc.(essay.htmx-react-hybrid))"
:summary "How SX combines the server-driven simplicity of htmx with the component model of React.")
(dict :label "On-Demand CSS" :href "/(etc.(essay.on-demand-css))"
(dict :label "On-Demand CSS" :href "/sx/(etc.(essay.on-demand-css))"
:summary "How SX delivers only the CSS each page needs — server scans rendered classes, sends the delta.")
(dict :label "Client Reactivity" :href "/(etc.(essay.client-reactivity))"
(dict :label "Client Reactivity" :href "/sx/(etc.(essay.client-reactivity))"
:summary "Reactive UI updates without a virtual DOM, diffing library, or build step.")
(dict :label "SX Native" :href "/(etc.(essay.sx-native))"
(dict :label "SX Native" :href "/sx/(etc.(essay.sx-native))"
:summary "Extending SX beyond the browser — native desktop and mobile rendering from the same source.")
(dict :label "Tail-Call Optimization" :href "/(etc.(essay.tail-call-optimization))"
(dict :label "Tail-Call Optimization" :href "/sx/(etc.(essay.tail-call-optimization))"
:summary "How SX implements proper tail calls via trampolining in a language that doesn't have them.")
(dict :label "Continuations" :href "/(etc.(essay.continuations))"
(dict :label "Continuations" :href "/sx/(etc.(essay.continuations))"
:summary "First-class continuations in a tree-walking evaluator — theory and implementation.")
(dict :label "The Reflexive Web" :href "/(etc.(essay.reflexive-web))"
(dict :label "The Reflexive Web" :href "/sx/(etc.(essay.reflexive-web))"
:summary "A web where pages can inspect, modify, and extend their own rendering pipeline.")
(dict :label "Server Architecture" :href "/(etc.(essay.server-architecture))"
(dict :label "Server Architecture" :href "/sx/(etc.(essay.server-architecture))"
:summary "How SX enforces the boundary between host and embedded language, and what it looks like across targets.")
(dict :label "Separate your Own Concerns" :href "/(etc.(essay.separation-of-concerns))"
(dict :label "Separate your Own Concerns" :href "/sx/(etc.(essay.separation-of-concerns))"
:summary "The web's HTML/CSS/JS split separates the framework's concerns, not your application's. Real separation is domain-specific.")
(dict :label "SX and AI" :href "/(etc.(essay.sx-and-ai))"
(dict :label "SX and AI" :href "/sx/(etc.(essay.sx-and-ai))"
:summary "Why s-expressions are the most AI-friendly representation for web interfaces.")
(dict :label "There Is No Alternative" :href "/(etc.(essay.no-alternative))"
(dict :label "There Is No Alternative" :href "/sx/(etc.(essay.no-alternative))"
:summary "Every attempt to escape s-expressions leads back to s-expressions. This is not an accident.")
(dict :label "sx sucks" :href "/(etc.(essay.sx-sucks))"
(dict :label "sx sucks" :href "/sx/(etc.(essay.sx-sucks))"
:summary "An honest accounting of everything wrong with SX and why you probably shouldn't use it.")
(dict :label "Tools for Fools" :href "/(etc.(essay.zero-tooling))"
(dict :label "Tools for Fools" :href "/sx/(etc.(essay.zero-tooling))"
:summary "SX was built without a code editor. No IDE, no build tools, no linters, no bundlers. What zero-tooling web development looks like.")
(dict :label "React is Hypermedia" :href "/(etc.(essay.react-is-hypermedia))"
(dict :label "React is Hypermedia" :href "/sx/(etc.(essay.react-is-hypermedia))"
:summary "A React Island is a hypermedia control. Its behavior is specified in SX.")
(dict :label "The Hegelian Synthesis" :href "/(etc.(essay.hegelian-synthesis))"
(dict :label "The Hegelian Synthesis" :href "/sx/(etc.(essay.hegelian-synthesis))"
:summary "On the dialectical resolution of the hypertext/reactive contradiction. Thesis: the server renders. Antithesis: the client reacts. Synthesis: the island in the lake.")
(dict :label "The Art Chain" :href "/(etc.(essay.the-art-chain))"
(dict :label "The Art Chain" :href "/sx/(etc.(essay.the-art-chain))"
:summary "On making, self-making, and the chain of artifacts that produces itself. Ars, techne, content addressing, and why the spec is the art.")
(dict :label "The True Hypermedium" :href "/(etc.(essay.self-defining-medium))"
(dict :label "The True Hypermedium" :href "/sx/(etc.(essay.self-defining-medium))"
:summary "The true hypermedium must define itself with itself. On ontological uniformity, the metacircular web, and why address and content should be the same stuff.")))
(define philosophy-nav-items (list
(dict :label "The SX Manifesto" :href "/(etc.(philosophy.sx-manifesto))"
(dict :label "The SX Manifesto" :href "/sx/(etc.(philosophy.sx-manifesto))"
:summary "The design principles behind SX: simplicity, self-hosting, and s-expressions all the way down.")
(dict :label "Strange Loops" :href "/(etc.(philosophy.godel-escher-bach))"
(dict :label "Strange Loops" :href "/sx/(etc.(philosophy.godel-escher-bach))"
:summary "Self-reference, and the tangled hierarchy of a language that defines itself.")
(dict :label "SX and Wittgenstein" :href "/(etc.(philosophy.wittgenstein))"
(dict :label "SX and Wittgenstein" :href "/sx/(etc.(philosophy.wittgenstein))"
:summary "The limits of my language are the limits of my world — Wittgenstein's philosophy and what it means for SX.")
(dict :label "SX and Dennett" :href "/(etc.(philosophy.dennett))"
(dict :label "SX and Dennett" :href "/sx/(etc.(philosophy.dennett))"
:summary "Real patterns, intentional stance, and multiple drafts — Dennett's philosophy of mind as a framework for understanding SX.")
(dict :label "S-Existentialism" :href "/(etc.(philosophy.existentialism))"
(dict :label "S-Existentialism" :href "/sx/(etc.(philosophy.existentialism))"
:summary "Existence precedes essence — Sartre, Camus, and the absurd freedom of writing a Lisp for the web.")))
(define specs-nav-items (list
{:label "Core" :href "/(language.(spec.core))" :children (list
{:label "Parser" :href "/(language.(spec.parser))"}
{:label "Evaluator" :href "/(language.(spec.evaluator))"}
{:label "Primitives" :href "/(language.(spec.primitives))"}
{:label "Special Forms" :href "/(language.(spec.special-forms))"}
{:label "Renderer" :href "/(language.(spec.renderer))"})}
{:label "Adapters" :href "/(language.(spec.adapters))" :children (list
{:label "DOM Adapter" :href "/(language.(spec.adapter-dom))"}
{:label "HTML Adapter" :href "/(language.(spec.adapter-html))"}
{:label "SX Wire Adapter" :href "/(language.(spec.adapter-sx))"}
{:label "Async Adapter" :href "/(language.(spec.adapter-async))"})}
{:label "Browser" :href "/(language.(spec.browser))" :children (list
{:label "SxEngine" :href "/(language.(spec.engine))"}
{:label "Orchestration" :href "/(language.(spec.orchestration))"}
{:label "Boot" :href "/(language.(spec.boot))"}
{:label "Router" :href "/(language.(spec.router))"})}
{:label "Reactive" :href "/(language.(spec.reactive))" :children (list
{:label "Signals" :href "/(language.(spec.signals))"})}
{:label "Host Interface" :href "/(language.(spec.host))" :children (list
{:label "Boundary" :href "/(language.(spec.boundary))"}
{:label "Forms" :href "/(language.(spec.forms))"}
{:label "Page Helpers" :href "/(language.(spec.page-helpers))"})}
{:label "Extensions" :href "/(language.(spec.extensions))" :children (list
{:label "Continuations" :href "/(language.(spec.continuations))"}
{:label "call/cc" :href "/(language.(spec.callcc))"}
{:label "Types" :href "/(language.(spec.types))"}
{:label "Deps" :href "/(language.(spec.deps))"})}))
{:label "Core" :href "/sx/(language.(spec.core))" :children (list
{:label "Parser" :href "/sx/(language.(spec.parser))"}
{:label "Evaluator" :href "/sx/(language.(spec.evaluator))"}
{:label "Primitives" :href "/sx/(language.(spec.primitives))"}
{:label "Special Forms" :href "/sx/(language.(spec.special-forms))"}
{:label "Renderer" :href "/sx/(language.(spec.renderer))"})}
{:label "Adapters" :href "/sx/(language.(spec.adapters))" :children (list
{:label "DOM Adapter" :href "/sx/(language.(spec.adapter-dom))"}
{:label "HTML Adapter" :href "/sx/(language.(spec.adapter-html))"}
{:label "SX Wire Adapter" :href "/sx/(language.(spec.adapter-sx))"}
{:label "Async Adapter" :href "/sx/(language.(spec.adapter-async))"})}
{:label "Browser" :href "/sx/(language.(spec.browser))" :children (list
{:label "SxEngine" :href "/sx/(language.(spec.engine))"}
{:label "Orchestration" :href "/sx/(language.(spec.orchestration))"}
{:label "Boot" :href "/sx/(language.(spec.boot))"}
{:label "Router" :href "/sx/(language.(spec.router))"})}
{:label "Reactive" :href "/sx/(language.(spec.reactive))" :children (list
{:label "Signals" :href "/sx/(language.(spec.signals))"})}
{:label "Host Interface" :href "/sx/(language.(spec.host))" :children (list
{:label "Boundary" :href "/sx/(language.(spec.boundary))"}
{:label "Forms" :href "/sx/(language.(spec.forms))"}
{:label "Page Helpers" :href "/sx/(language.(spec.page-helpers))"})}
{:label "Extensions" :href "/sx/(language.(spec.extensions))" :children (list
{:label "Continuations" :href "/sx/(language.(spec.continuations))"}
{:label "call/cc" :href "/sx/(language.(spec.callcc))"}
{:label "Types" :href "/sx/(language.(spec.types))"}
{:label "Deps" :href "/sx/(language.(spec.deps))"})}))
(define testing-nav-items (list
(dict :label "Overview" :href "/(language.(test))")
(dict :label "Evaluator" :href "/(language.(test.eval))")
(dict :label "Parser" :href "/(language.(test.parser))")
(dict :label "Router" :href "/(language.(test.router))")
(dict :label "Renderer" :href "/(language.(test.render))")
(dict :label "Dependencies" :href "/(language.(test.deps))")
(dict :label "Engine" :href "/(language.(test.engine))")
(dict :label "Orchestration" :href "/(language.(test.orchestration))")
(dict :label "Runners" :href "/(language.(test.runners))")))
(dict :label "Overview" :href "/sx/(language.(test))")
(dict :label "Evaluator" :href "/sx/(language.(test.eval))")
(dict :label "Parser" :href "/sx/(language.(test.parser))")
(dict :label "Router" :href "/sx/(language.(test.router))")
(dict :label "Renderer" :href "/sx/(language.(test.render))")
(dict :label "Dependencies" :href "/sx/(language.(test.deps))")
(dict :label "Engine" :href "/sx/(language.(test.engine))")
(dict :label "Orchestration" :href "/sx/(language.(test.orchestration))")
(dict :label "Runners" :href "/sx/(language.(test.runners))")))
(define isomorphism-nav-items (list
(dict :label "Roadmap" :href "/(geography.(isomorphism))")
(dict :label "Bundle Analyzer" :href "/(geography.(isomorphism.bundle-analyzer))")
(dict :label "Routing Analyzer" :href "/(geography.(isomorphism.routing-analyzer))")
(dict :label "Data Test" :href "/(geography.(isomorphism.data-test))")
(dict :label "Async IO" :href "/(geography.(isomorphism.async-io))")
(dict :label "Streaming" :href "/(geography.(isomorphism.streaming))")
(dict :label "Affinity" :href "/(geography.(isomorphism.affinity))")
(dict :label "Optimistic" :href "/(geography.(isomorphism.optimistic))")
(dict :label "Offline" :href "/(geography.(isomorphism.offline))")))
(dict :label "Roadmap" :href "/sx/(geography.(isomorphism))")
(dict :label "Bundle Analyzer" :href "/sx/(geography.(isomorphism.bundle-analyzer))")
(dict :label "Routing Analyzer" :href "/sx/(geography.(isomorphism.routing-analyzer))")
(dict :label "Data Test" :href "/sx/(geography.(isomorphism.data-test))")
(dict :label "Async IO" :href "/sx/(geography.(isomorphism.async-io))")
(dict :label "Streaming" :href "/sx/(geography.(isomorphism.streaming))")
(dict :label "Affinity" :href "/sx/(geography.(isomorphism.affinity))")
(dict :label "Optimistic" :href "/sx/(geography.(isomorphism.optimistic))")
(dict :label "Offline" :href "/sx/(geography.(isomorphism.offline))")))
(define plans-nav-items (list
(dict :label "Status" :href "/(etc.(plan.status))"
(dict :label "Status" :href "/sx/(etc.(plan.status))"
:summary "Audit of all plans — what's done, what's in progress, and what remains.")
(dict :label "Reader Macros" :href "/(etc.(plan.reader-macros))"
(dict :label "Reader Macros" :href "/sx/(etc.(plan.reader-macros))"
:summary "Extensible parse-time transformations via # dispatch — datum comments, raw strings, and quote shorthand.")
(dict :label "Reader Macro Demo" :href "/(etc.(plan.reader-macro-demo))"
(dict :label "Reader Macro Demo" :href "/sx/(etc.(plan.reader-macro-demo))"
:summary "Live demo: #z3 translates SX spec declarations to SMT-LIB verification conditions.")
(dict :label "Theorem Prover" :href "/(etc.(plan.theorem-prover))"
(dict :label "Theorem Prover" :href "/sx/(etc.(plan.theorem-prover))"
:summary "prove.sx — constraint solver and property prover for SX primitives, written in SX.")
(dict :label "Self-Hosting Bootstrapper" :href "/(etc.(plan.self-hosting-bootstrapper))"
(dict :label "Self-Hosting Bootstrapper" :href "/sx/(etc.(plan.self-hosting-bootstrapper))"
:summary "py.sx — an SX-to-Python translator written in SX. Complete: G0 == G1, 128/128 defines match.")
(dict :label "JS Bootstrapper" :href "/(etc.(plan.js-bootstrapper))"
(dict :label "JS Bootstrapper" :href "/sx/(etc.(plan.js-bootstrapper))"
:summary "js.sx — SX-to-JavaScript translator + ahead-of-time component compiler. Zero-runtime static sites.")
(dict :label "SX-Activity" :href "/(etc.(plan.sx-activity))"
(dict :label "SX-Activity" :href "/sx/(etc.(plan.sx-activity))"
:summary "A new web built on SX — executable content, shared components, parsers, and logic on IPFS, provenance on Bitcoin, all running within your own security context.")
(dict :label "Predictive Prefetching" :href "/(etc.(plan.predictive-prefetch))"
(dict :label "Predictive Prefetching" :href "/sx/(etc.(plan.predictive-prefetch))"
:summary "Prefetch missing component definitions before the user clicks — hover a link, fetch its deps, navigate client-side.")
(dict :label "Content-Addressed Components" :href "/(etc.(plan.content-addressed-components))"
(dict :label "Content-Addressed Components" :href "/sx/(etc.(plan.content-addressed-components))"
:summary "Components identified by CID, stored on IPFS, fetched from anywhere. Canonical serialization, content verification, federated sharing.")
(dict :label "Environment Images" :href "/(etc.(plan.environment-images))"
(dict :label "Environment Images" :href "/sx/(etc.(plan.environment-images))"
:summary "Serialize evaluated environments as content-addressed images. Spec CID → image CID → every endpoint is fully executable and verifiable.")
(dict :label "Runtime Slicing" :href "/(etc.(plan.runtime-slicing))"
(dict :label "Runtime Slicing" :href "/sx/(etc.(plan.runtime-slicing))"
:summary "Tier the client runtime by need: L0 hypermedia (~5KB), L1 DOM ops (~8KB), L2 islands (~15KB), L3 full eval (~44KB). Sliced by slice.sx, translated by js.sx.")
(dict :label "Typed SX" :href "/(etc.(plan.typed-sx))"
(dict :label "Typed SX" :href "/sx/(etc.(plan.typed-sx))"
:summary "Gradual type system with static effect checking. Optional type annotations, deftype (aliases, unions, records), and effect declarations — checked at registration time, zero runtime cost. types.sx — specced, bootstrapped, catches composition and boundary errors.")
(dict :label "Nav Redesign" :href "/(etc.(plan.nav-redesign))"
(dict :label "Nav Redesign" :href "/sx/(etc.(plan.nav-redesign))"
:summary "Replace menu bars with vertical breadcrumb navigation. Logo → section → page, arrows for siblings, children below. No dropdowns, no hamburger, infinite depth.")
(dict :label "Fragment Protocol" :href "/(etc.(plan.fragment-protocol))"
(dict :label "Fragment Protocol" :href "/sx/(etc.(plan.fragment-protocol))"
:summary "Structured sexp request/response for cross-service component transfer.")
(dict :label "Glue Decoupling" :href "/(etc.(plan.glue-decoupling))"
(dict :label "Glue Decoupling" :href "/sx/(etc.(plan.glue-decoupling))"
:summary "Eliminate all cross-app model imports via glue service layer.")
(dict :label "Social Sharing" :href "/(etc.(plan.social-sharing))"
(dict :label "Social Sharing" :href "/sx/(etc.(plan.social-sharing))"
:summary "OAuth-based sharing to Facebook, Instagram, Threads, Twitter/X, LinkedIn, and Mastodon.")
(dict :label "SX CI Pipeline" :href "/(etc.(plan.sx-ci))"
(dict :label "SX CI Pipeline" :href "/sx/(etc.(plan.sx-ci))"
:summary "Build, test, and deploy in s-expressions — CI pipelines as SX components.")
(dict :label "Live Streaming" :href "/(etc.(plan.live-streaming))"
(dict :label "Live Streaming" :href "/sx/(etc.(plan.live-streaming))"
:summary "SSE and WebSocket transports for re-resolving suspense slots after initial page load — live data, real-time collaboration.")
(dict :label "sx-web Platform" :href "/(etc.(plan.sx-web-platform))"
(dict :label "sx-web Platform" :href "/sx/(etc.(plan.sx-web-platform))"
:summary "sx-web.org as online development platform — embedded Claude Code, IPFS storage, sx-activity publishing, sx-ci testing. Author, stage, test, deploy from the browser.")
(dict :label "sx-forge" :href "/(etc.(plan.sx-forge))"
(dict :label "sx-forge" :href "/sx/(etc.(plan.sx-forge))"
:summary "Git forge in SX — repositories, issues, pull requests, CI, permissions, and federation. Configuration as macros, diffs as components.")
(dict :label "sx-swarm" :href "/(etc.(plan.sx-swarm))"
(dict :label "sx-swarm" :href "/sx/(etc.(plan.sx-swarm))"
:summary "Container orchestration in SX — service definitions, environment macros, deploy pipelines. Replace YAML with a real language.")
(dict :label "sx-proxy" :href "/(etc.(plan.sx-proxy))"
(dict :label "sx-proxy" :href "/sx/(etc.(plan.sx-proxy))"
:summary "Reverse proxy in SX — routes, TLS, middleware chains, load balancing. Macros generate config from the same service definitions as the orchestrator.")
(dict :label "Async Eval Convergence" :href "/(etc.(plan.async-eval-convergence))"
(dict :label "Async Eval Convergence" :href "/sx/(etc.(plan.async-eval-convergence))"
:summary "Eliminate hand-written evaluators — bootstrap async_eval.py from the spec via an async adapter layer. One spec, one truth, zero divergence.")
(dict :label "WASM Bytecode VM" :href "/(etc.(plan.wasm-bytecode-vm))"
(dict :label "WASM Bytecode VM" :href "/sx/(etc.(plan.wasm-bytecode-vm))"
:summary "Compile SX to bytecode, run in a Rust/WASM VM. Compact wire format, no parse overhead, near-native speed, DOM via JS bindings.")
(dict :label "Generative SX" :href "/(etc.(plan.generative-sx))"
(dict :label "Generative SX" :href "/sx/(etc.(plan.generative-sx))"
:summary "Programs that write themselves as they run — self-compiling specs, runtime self-extension, generative testing, seed networks.")
(dict :label "Art DAG on SX" :href "/(etc.(plan.art-dag-sx))"
(dict :label "Art DAG on SX" :href "/sx/(etc.(plan.art-dag-sx))"
:summary "SX endpoints as portals into media processing environments — recipes as programs, split execution across GPU/cache/live boundaries, streaming AV output.")
(dict :label "Spec Explorer" :href "/(etc.(plan.spec-explorer))"
(dict :label "Spec Explorer" :href "/sx/(etc.(plan.spec-explorer))"
:summary "The fifth ring — SX exploring itself. Per-function cards showing source, Python/JS/Z3 translations, platform dependencies, tests, proofs, and usage examples.")
(dict :label "SX Protocol" :href "/(etc.(plan.sx-protocol))"
(dict :label "SX Protocol" :href "/sx/(etc.(plan.sx-protocol))"
:summary "S-expressions as a universal protocol for networked hypermedia — replacing URLs, HTTP verbs, query languages, and rendering with one evaluable format.")))
(define reactive-islands-nav-items (list
(dict :label "Overview" :href "/(geography.(reactive))"
(dict :label "Overview" :href "/sx/(geography.(reactive))"
:summary "Architecture, four levels (L0-L3), and current implementation status.")
(dict :label "Demo" :href "/(geography.(reactive.demo))"
(dict :label "Demo" :href "/sx/(geography.(reactive.demo))"
:summary "Live demonstration of signals, computed, effects, batch, and defisland — all transpiled from spec.")
(dict :label "Event Bridge" :href "/(geography.(reactive.event-bridge))"
(dict :label "Event Bridge" :href "/sx/(geography.(reactive.event-bridge))"
:summary "DOM events for htmx lake → island communication. Server-rendered buttons dispatch custom events that island effects listen for.")
(dict :label "Named Stores" :href "/(geography.(reactive.named-stores))"
(dict :label "Named Stores" :href "/sx/(geography.(reactive.named-stores))"
:summary "Page-level signal containers via def-store/use-store — persist across island destruction/recreation.")
(dict :label "Plan" :href "/(geography.(reactive.plan))"
(dict :label "Plan" :href "/sx/(geography.(reactive.plan))"
:summary "The full design document — rendering boundary, state flow, signal primitives, island lifecycle.")
(dict :label "Phase 2" :href "/(geography.(reactive.phase2))"
(dict :label "Phase 2" :href "/sx/(geography.(reactive.phase2))"
:summary "Input binding, keyed lists, reactive class/style, refs, portals, error boundaries, suspense, transitions.")))
(define bootstrappers-nav-items (list
(dict :label "Overview" :href "/(language.(bootstrapper))")
(dict :label "JavaScript" :href "/(language.(bootstrapper.javascript))")
(dict :label "Python" :href "/(language.(bootstrapper.python))")
(dict :label "Self-Hosting (py.sx)" :href "/(language.(bootstrapper.self-hosting))")
(dict :label "Self-Hosting JS (js.sx)" :href "/(language.(bootstrapper.self-hosting-js))")
(dict :label "Page Helpers" :href "/(language.(bootstrapper.page-helpers))")))
(dict :label "Overview" :href "/sx/(language.(bootstrapper))")
(dict :label "JavaScript" :href "/sx/(language.(bootstrapper.javascript))")
(dict :label "Python" :href "/sx/(language.(bootstrapper.python))")
(dict :label "Self-Hosting (py.sx)" :href "/sx/(language.(bootstrapper.self-hosting))")
(dict :label "Self-Hosting JS (js.sx)" :href "/sx/(language.(bootstrapper.self-hosting-js))")
(dict :label "Page Helpers" :href "/sx/(language.(bootstrapper.page-helpers))")))
;; Spec file registry — canonical metadata for spec viewer pages.
;; Python only handles file I/O (read-spec-file); all metadata lives here.
@@ -359,34 +359,34 @@
;; ---------------------------------------------------------------------------
(define sx-nav-tree
{:label "sx" :href "/"
{:label "sx" :href "/sx/"
:children (list
{:label "Geography" :href "/(geography)"
{:label "Geography" :href "/sx/(geography)"
:children (list
{:label "Reactive Islands" :href "/(geography.(reactive))" :children reactive-islands-nav-items}
{:label "Hypermedia Lakes" :href "/(geography.(hypermedia))"
{:label "Reactive Islands" :href "/sx/(geography.(reactive))" :children reactive-islands-nav-items}
{:label "Hypermedia Lakes" :href "/sx/(geography.(hypermedia))"
:children (list
{:label "Reference" :href "/(geography.(hypermedia.(reference)))" :children reference-nav-items}
{:label "Examples" :href "/(geography.(hypermedia.(example)))" :children examples-nav-items})}
{:label "Marshes" :href "/(geography.(marshes))"
{:label "Reference" :href "/sx/(geography.(hypermedia.(reference)))" :children reference-nav-items}
{:label "Examples" :href "/sx/(geography.(hypermedia.(example)))" :children examples-nav-items})}
{:label "Marshes" :href "/sx/(geography.(marshes))"
:summary "Where reactivity and hypermedia interpenetrate — server writes to signals, reactive transforms reshape server content, client state modifies how hypermedia is interpreted."}
{:label "Isomorphism" :href "/(geography.(isomorphism))" :children isomorphism-nav-items})}
{:label "Language" :href "/(language)"
{:label "Isomorphism" :href "/sx/(geography.(isomorphism))" :children isomorphism-nav-items})}
{:label "Language" :href "/sx/(language)"
:children (list
{:label "Docs" :href "/(language.(doc))" :children docs-nav-items}
{:label "Specs" :href "/(language.(spec))" :children specs-nav-items}
{:label "Bootstrappers" :href "/(language.(bootstrapper))" :children bootstrappers-nav-items}
{:label "Testing" :href "/(language.(test))" :children testing-nav-items})}
{:label "Applications" :href "/(applications)"
{:label "Docs" :href "/sx/(language.(doc))" :children docs-nav-items}
{:label "Specs" :href "/sx/(language.(spec))" :children specs-nav-items}
{:label "Bootstrappers" :href "/sx/(language.(bootstrapper))" :children bootstrappers-nav-items}
{:label "Testing" :href "/sx/(language.(test))" :children testing-nav-items})}
{:label "Applications" :href "/sx/(applications)"
:children (list
{:label "SX URLs" :href "/(applications.(sx-urls))"}
{:label "CSSX" :href "/(applications.(cssx))" :children cssx-nav-items}
{:label "Protocols" :href "/(applications.(protocol))" :children protocols-nav-items})}
{:label "Etc" :href "/(etc)"
{:label "SX URLs" :href "/sx/(applications.(sx-urls))"}
{:label "CSSX" :href "/sx/(applications.(cssx))" :children cssx-nav-items}
{:label "Protocols" :href "/sx/(applications.(protocol))" :children protocols-nav-items})}
{:label "Etc" :href "/sx/(etc)"
:children (list
{:label "Essays" :href "/(etc.(essay))" :children essays-nav-items}
{:label "Philosophy" :href "/(etc.(philosophy))" :children philosophy-nav-items}
{:label "Plans" :href "/(etc.(plan))" :children plans-nav-items})})})
{:label "Essays" :href "/sx/(etc.(essay))" :children essays-nav-items}
{:label "Philosophy" :href "/sx/(etc.(philosophy))" :children philosophy-nav-items}
{:label "Plans" :href "/sx/(etc.(plan))" :children plans-nav-items})})})
;; ---------------------------------------------------------------------------
;; Nav resolution — tree-descent matching (no prefix heuristics)