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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user