Restructure SX docs nav into 4 top-level sections with nested routing
New hierarchy: Geography (Reactive Islands, Hypermedia Lakes, Marshes, Isomorphism), Language (Docs, Specs, Bootstrappers, Testing), Applications (CSSX, Protocols), Etc (Essays, Philosophy, Plans). All routes updated to match: /reactive/* → /geography/reactive/*, /docs/* → /language/docs/*, /essays/* → /etc/essays/*, etc. Updates nav-data.sx, all defpage routes, API endpoints, internal links across 43 files. Enhanced find-nav-match for nested group resolution. Also includes: page-helpers-demo sf-total fix (reduce instead of set!), rebootstrapped sx-browser.js and sx_ref.py, defensive slice/rest guards. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,232 +3,230 @@
|
||||
;; @css aria-selected:bg-violet-200 aria-selected:text-violet-900
|
||||
|
||||
(define docs-nav-items (list
|
||||
(dict :label "Introduction" :href "/docs/introduction")
|
||||
(dict :label "Getting Started" :href "/docs/getting-started")
|
||||
(dict :label "Components" :href "/docs/components")
|
||||
(dict :label "Evaluator" :href "/docs/evaluator")
|
||||
(dict :label "Primitives" :href "/docs/primitives")
|
||||
(dict :label "Special Forms" :href "/docs/special-forms")
|
||||
(dict :label "Server Rendering" :href "/docs/server-rendering")))
|
||||
(dict :label "Introduction" :href "/language/docs/introduction")
|
||||
(dict :label "Getting Started" :href "/language/docs/getting-started")
|
||||
(dict :label "Components" :href "/language/docs/components")
|
||||
(dict :label "Evaluator" :href "/language/docs/evaluator")
|
||||
(dict :label "Primitives" :href "/language/docs/primitives")
|
||||
(dict :label "Special Forms" :href "/language/docs/special-forms")
|
||||
(dict :label "Server Rendering" :href "/language/docs/server-rendering")))
|
||||
|
||||
(define reference-nav-items (list
|
||||
(dict :label "Attributes" :href "/hypermedia/reference/attributes")
|
||||
(dict :label "Headers" :href "/hypermedia/reference/headers")
|
||||
(dict :label "Events" :href "/hypermedia/reference/events")
|
||||
(dict :label "JS API" :href "/hypermedia/reference/js-api")))
|
||||
(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")))
|
||||
|
||||
(define protocols-nav-items (list
|
||||
(dict :label "Wire Format" :href "/protocols/wire-format")
|
||||
(dict :label "Fragments" :href "/protocols/fragments")
|
||||
(dict :label "Resolver I/O" :href "/protocols/resolver-io")
|
||||
(dict :label "Internal Services" :href "/protocols/internal-services")
|
||||
(dict :label "ActivityPub" :href "/protocols/activitypub")
|
||||
(dict :label "Future" :href "/protocols/future")))
|
||||
(dict :label "Wire Format" :href "/applications/protocols/wire-format")
|
||||
(dict :label "Fragments" :href "/applications/protocols/fragments")
|
||||
(dict :label "Resolver I/O" :href "/applications/protocols/resolver-io")
|
||||
(dict :label "Internal Services" :href "/applications/protocols/internal-services")
|
||||
(dict :label "ActivityPub" :href "/applications/protocols/activitypub")
|
||||
(dict :label "Future" :href "/applications/protocols/future")))
|
||||
|
||||
(define examples-nav-items (list
|
||||
(dict :label "Click to Load" :href "/hypermedia/examples/click-to-load")
|
||||
(dict :label "Form Submission" :href "/hypermedia/examples/form-submission")
|
||||
(dict :label "Polling" :href "/hypermedia/examples/polling")
|
||||
(dict :label "Delete Row" :href "/hypermedia/examples/delete-row")
|
||||
(dict :label "Inline Edit" :href "/hypermedia/examples/inline-edit")
|
||||
(dict :label "OOB Swaps" :href "/hypermedia/examples/oob-swaps")
|
||||
(dict :label "Lazy Loading" :href "/hypermedia/examples/lazy-loading")
|
||||
(dict :label "Infinite Scroll" :href "/hypermedia/examples/infinite-scroll")
|
||||
(dict :label "Progress Bar" :href "/hypermedia/examples/progress-bar")
|
||||
(dict :label "Active Search" :href "/hypermedia/examples/active-search")
|
||||
(dict :label "Inline Validation" :href "/hypermedia/examples/inline-validation")
|
||||
(dict :label "Value Select" :href "/hypermedia/examples/value-select")
|
||||
(dict :label "Reset on Submit" :href "/hypermedia/examples/reset-on-submit")
|
||||
(dict :label "Edit Row" :href "/hypermedia/examples/edit-row")
|
||||
(dict :label "Bulk Update" :href "/hypermedia/examples/bulk-update")
|
||||
(dict :label "Swap Positions" :href "/hypermedia/examples/swap-positions")
|
||||
(dict :label "Select Filter" :href "/hypermedia/examples/select-filter")
|
||||
(dict :label "Tabs" :href "/hypermedia/examples/tabs")
|
||||
(dict :label "Animations" :href "/hypermedia/examples/animations")
|
||||
(dict :label "Dialogs" :href "/hypermedia/examples/dialogs")
|
||||
(dict :label "Keyboard Shortcuts" :href "/hypermedia/examples/keyboard-shortcuts")
|
||||
(dict :label "PUT / PATCH" :href "/hypermedia/examples/put-patch")
|
||||
(dict :label "JSON Encoding" :href "/hypermedia/examples/json-encoding")
|
||||
(dict :label "Vals & Headers" :href "/hypermedia/examples/vals-and-headers")
|
||||
(dict :label "Loading States" :href "/hypermedia/examples/loading-states")
|
||||
(dict :label "Request Abort" :href "/hypermedia/examples/sync-replace")
|
||||
(dict :label "Retry" :href "/hypermedia/examples/retry")))
|
||||
(dict :label "Click to Load" :href "/geography/hypermedia/examples/click-to-load")
|
||||
(dict :label "Form Submission" :href "/geography/hypermedia/examples/form-submission")
|
||||
(dict :label "Polling" :href "/geography/hypermedia/examples/polling")
|
||||
(dict :label "Delete Row" :href "/geography/hypermedia/examples/delete-row")
|
||||
(dict :label "Inline Edit" :href "/geography/hypermedia/examples/inline-edit")
|
||||
(dict :label "OOB Swaps" :href "/geography/hypermedia/examples/oob-swaps")
|
||||
(dict :label "Lazy Loading" :href "/geography/hypermedia/examples/lazy-loading")
|
||||
(dict :label "Infinite Scroll" :href "/geography/hypermedia/examples/infinite-scroll")
|
||||
(dict :label "Progress Bar" :href "/geography/hypermedia/examples/progress-bar")
|
||||
(dict :label "Active Search" :href "/geography/hypermedia/examples/active-search")
|
||||
(dict :label "Inline Validation" :href "/geography/hypermedia/examples/inline-validation")
|
||||
(dict :label "Value Select" :href "/geography/hypermedia/examples/value-select")
|
||||
(dict :label "Reset on Submit" :href "/geography/hypermedia/examples/reset-on-submit")
|
||||
(dict :label "Edit Row" :href "/geography/hypermedia/examples/edit-row")
|
||||
(dict :label "Bulk Update" :href "/geography/hypermedia/examples/bulk-update")
|
||||
(dict :label "Swap Positions" :href "/geography/hypermedia/examples/swap-positions")
|
||||
(dict :label "Select Filter" :href "/geography/hypermedia/examples/select-filter")
|
||||
(dict :label "Tabs" :href "/geography/hypermedia/examples/tabs")
|
||||
(dict :label "Animations" :href "/geography/hypermedia/examples/animations")
|
||||
(dict :label "Dialogs" :href "/geography/hypermedia/examples/dialogs")
|
||||
(dict :label "Keyboard Shortcuts" :href "/geography/hypermedia/examples/keyboard-shortcuts")
|
||||
(dict :label "PUT / PATCH" :href "/geography/hypermedia/examples/put-patch")
|
||||
(dict :label "JSON Encoding" :href "/geography/hypermedia/examples/json-encoding")
|
||||
(dict :label "Vals & Headers" :href "/geography/hypermedia/examples/vals-and-headers")
|
||||
(dict :label "Loading States" :href "/geography/hypermedia/examples/loading-states")
|
||||
(dict :label "Request Abort" :href "/geography/hypermedia/examples/sync-replace")
|
||||
(dict :label "Retry" :href "/geography/hypermedia/examples/retry")))
|
||||
|
||||
(define cssx-nav-items (list
|
||||
(dict :label "Overview" :href "/cssx/")
|
||||
(dict :label "Patterns" :href "/cssx/patterns")
|
||||
(dict :label "Delivery" :href "/cssx/delivery")
|
||||
(dict :label "Async CSS" :href "/cssx/async")
|
||||
(dict :label "Live Styles" :href "/cssx/live")
|
||||
(dict :label "Comparisons" :href "/cssx/comparisons")
|
||||
(dict :label "Philosophy" :href "/cssx/philosophy")))
|
||||
(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")))
|
||||
|
||||
(define essays-nav-items (list
|
||||
(dict :label "Why S-Expressions" :href "/essays/why-sexps"
|
||||
(dict :label "Why S-Expressions" :href "/etc/essays/why-sexps"
|
||||
:summary "Why SX uses s-expressions instead of HTML templates, JSX, or any other syntax.")
|
||||
(dict :label "The htmx/React Hybrid" :href "/essays/htmx-react-hybrid"
|
||||
(dict :label "The htmx/React Hybrid" :href "/etc/essays/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 "/essays/on-demand-css"
|
||||
(dict :label "On-Demand CSS" :href "/etc/essays/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 "/essays/client-reactivity"
|
||||
(dict :label "Client Reactivity" :href "/etc/essays/client-reactivity"
|
||||
:summary "Reactive UI updates without a virtual DOM, diffing library, or build step.")
|
||||
(dict :label "SX Native" :href "/essays/sx-native"
|
||||
(dict :label "SX Native" :href "/etc/essays/sx-native"
|
||||
:summary "Extending SX beyond the browser — native desktop and mobile rendering from the same source.")
|
||||
(dict :label "Tail-Call Optimization" :href "/essays/tail-call-optimization"
|
||||
(dict :label "Tail-Call Optimization" :href "/etc/essays/tail-call-optimization"
|
||||
:summary "How SX implements proper tail calls via trampolining in a language that doesn't have them.")
|
||||
(dict :label "Continuations" :href "/essays/continuations"
|
||||
(dict :label "Continuations" :href "/etc/essays/continuations"
|
||||
:summary "First-class continuations in a tree-walking evaluator — theory and implementation.")
|
||||
(dict :label "The Reflexive Web" :href "/essays/reflexive-web"
|
||||
(dict :label "The Reflexive Web" :href "/etc/essays/reflexive-web"
|
||||
:summary "A web where pages can inspect, modify, and extend their own rendering pipeline.")
|
||||
(dict :label "Server Architecture" :href "/essays/server-architecture"
|
||||
(dict :label "Server Architecture" :href "/etc/essays/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 "/essays/separation-of-concerns"
|
||||
(dict :label "Separate your Own Concerns" :href "/etc/essays/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 "/essays/sx-and-ai"
|
||||
(dict :label "SX and AI" :href "/etc/essays/sx-and-ai"
|
||||
:summary "Why s-expressions are the most AI-friendly representation for web interfaces.")
|
||||
(dict :label "There Is No Alternative" :href "/essays/no-alternative"
|
||||
(dict :label "There Is No Alternative" :href "/etc/essays/no-alternative"
|
||||
:summary "Every attempt to escape s-expressions leads back to s-expressions. This is not an accident.")
|
||||
(dict :label "sx sucks" :href "/essays/sx-sucks"
|
||||
(dict :label "sx sucks" :href "/etc/essays/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 "/essays/zero-tooling"
|
||||
(dict :label "Tools for Fools" :href "/etc/essays/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 "/essays/react-is-hypermedia"
|
||||
(dict :label "React is Hypermedia" :href "/etc/essays/react-is-hypermedia"
|
||||
:summary "A React Island is a hypermedia control. Its behavior is specified in SX.")
|
||||
(dict :label "The Hegelian Synthesis" :href "/essays/hegelian-synthesis"
|
||||
(dict :label "The Hegelian Synthesis" :href "/etc/essays/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.")))
|
||||
|
||||
(define philosophy-nav-items (list
|
||||
(dict :label "The SX Manifesto" :href "/philosophy/sx-manifesto"
|
||||
(dict :label "The SX Manifesto" :href "/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 "/philosophy/godel-escher-bach"
|
||||
(dict :label "Strange Loops" :href "/etc/philosophy/godel-escher-bach"
|
||||
:summary "Self-reference, and the tangled hierarchy of a language that defines itself.")
|
||||
(dict :label "SX and Wittgenstein" :href "/philosophy/wittgenstein"
|
||||
(dict :label "SX and Wittgenstein" :href "/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 "/philosophy/dennett"
|
||||
(dict :label "SX and Dennett" :href "/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 "/philosophy/existentialism"
|
||||
(dict :label "S-Existentialism" :href "/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
|
||||
(dict :label "Architecture" :href "/specs/")
|
||||
(dict :label "Core" :href "/specs/core")
|
||||
(dict :label "Parser" :href "/specs/parser")
|
||||
(dict :label "Evaluator" :href "/specs/evaluator")
|
||||
(dict :label "Primitives" :href "/specs/primitives")
|
||||
(dict :label "Special Forms" :href "/specs/special-forms")
|
||||
(dict :label "Renderer" :href "/specs/renderer")
|
||||
(dict :label "Adapters" :href "/specs/adapters")
|
||||
(dict :label "DOM Adapter" :href "/specs/adapter-dom")
|
||||
(dict :label "HTML Adapter" :href "/specs/adapter-html")
|
||||
(dict :label "SX Wire Adapter" :href "/specs/adapter-sx")
|
||||
(dict :label "Browser" :href "/specs/browser")
|
||||
(dict :label "SxEngine" :href "/specs/engine")
|
||||
(dict :label "Orchestration" :href "/specs/orchestration")
|
||||
(dict :label "Boot" :href "/specs/boot")
|
||||
(dict :label "Continuations" :href "/specs/continuations")
|
||||
(dict :label "call/cc" :href "/specs/callcc")
|
||||
(dict :label "Deps" :href "/specs/deps")
|
||||
(dict :label "Router" :href "/specs/router")))
|
||||
(dict :label "Architecture" :href "/language/specs/")
|
||||
(dict :label "Core" :href "/language/specs/core")
|
||||
(dict :label "Parser" :href "/language/specs/parser")
|
||||
(dict :label "Evaluator" :href "/language/specs/evaluator")
|
||||
(dict :label "Primitives" :href "/language/specs/primitives")
|
||||
(dict :label "Special Forms" :href "/language/specs/special-forms")
|
||||
(dict :label "Renderer" :href "/language/specs/renderer")
|
||||
(dict :label "Adapters" :href "/language/specs/adapters")
|
||||
(dict :label "DOM Adapter" :href "/language/specs/adapter-dom")
|
||||
(dict :label "HTML Adapter" :href "/language/specs/adapter-html")
|
||||
(dict :label "SX Wire Adapter" :href "/language/specs/adapter-sx")
|
||||
(dict :label "Browser" :href "/language/specs/browser")
|
||||
(dict :label "SxEngine" :href "/language/specs/engine")
|
||||
(dict :label "Orchestration" :href "/language/specs/orchestration")
|
||||
(dict :label "Boot" :href "/language/specs/boot")
|
||||
(dict :label "Continuations" :href "/language/specs/continuations")
|
||||
(dict :label "call/cc" :href "/language/specs/callcc")
|
||||
(dict :label "Deps" :href "/language/specs/deps")
|
||||
(dict :label "Router" :href "/language/specs/router")))
|
||||
|
||||
(define testing-nav-items (list
|
||||
(dict :label "Overview" :href "/testing/")
|
||||
(dict :label "Evaluator" :href "/testing/eval")
|
||||
(dict :label "Parser" :href "/testing/parser")
|
||||
(dict :label "Router" :href "/testing/router")
|
||||
(dict :label "Renderer" :href "/testing/render")
|
||||
(dict :label "Dependencies" :href "/testing/deps")
|
||||
(dict :label "Engine" :href "/testing/engine")
|
||||
(dict :label "Orchestration" :href "/testing/orchestration")
|
||||
(dict :label "Runners" :href "/testing/runners")))
|
||||
(dict :label "Overview" :href "/language/testing/")
|
||||
(dict :label "Evaluator" :href "/language/testing/eval")
|
||||
(dict :label "Parser" :href "/language/testing/parser")
|
||||
(dict :label "Router" :href "/language/testing/router")
|
||||
(dict :label "Renderer" :href "/language/testing/render")
|
||||
(dict :label "Dependencies" :href "/language/testing/deps")
|
||||
(dict :label "Engine" :href "/language/testing/engine")
|
||||
(dict :label "Orchestration" :href "/language/testing/orchestration")
|
||||
(dict :label "Runners" :href "/language/testing/runners")))
|
||||
|
||||
(define isomorphism-nav-items (list
|
||||
(dict :label "Roadmap" :href "/isomorphism/")
|
||||
(dict :label "Bundle Analyzer" :href "/isomorphism/bundle-analyzer")
|
||||
(dict :label "Routing Analyzer" :href "/isomorphism/routing-analyzer")
|
||||
(dict :label "Data Test" :href "/isomorphism/data-test")
|
||||
(dict :label "Async IO" :href "/isomorphism/async-io")
|
||||
(dict :label "Streaming" :href "/isomorphism/streaming")
|
||||
(dict :label "Affinity" :href "/isomorphism/affinity")
|
||||
(dict :label "Optimistic" :href "/isomorphism/optimistic")
|
||||
(dict :label "Offline" :href "/isomorphism/offline")))
|
||||
(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")))
|
||||
|
||||
(define plans-nav-items (list
|
||||
(dict :label "Status" :href "/plans/status"
|
||||
(dict :label "Status" :href "/etc/plans/status"
|
||||
:summary "Audit of all plans — what's done, what's in progress, and what remains.")
|
||||
(dict :label "Reader Macros" :href "/plans/reader-macros"
|
||||
(dict :label "Reader Macros" :href "/etc/plans/reader-macros"
|
||||
:summary "Extensible parse-time transformations via # dispatch — datum comments, raw strings, and quote shorthand.")
|
||||
(dict :label "Reader Macro Demo" :href "/plans/reader-macro-demo"
|
||||
(dict :label "Reader Macro Demo" :href "/etc/plans/reader-macro-demo"
|
||||
:summary "Live demo: #z3 translates SX spec declarations to SMT-LIB verification conditions.")
|
||||
(dict :label "Theorem Prover" :href "/plans/theorem-prover"
|
||||
(dict :label "Theorem Prover" :href "/etc/plans/theorem-prover"
|
||||
:summary "prove.sx — constraint solver and property prover for SX primitives, written in SX.")
|
||||
(dict :label "Self-Hosting Bootstrapper" :href "/plans/self-hosting-bootstrapper"
|
||||
(dict :label "Self-Hosting Bootstrapper" :href "/etc/plans/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 "/plans/js-bootstrapper"
|
||||
(dict :label "JS Bootstrapper" :href "/etc/plans/js-bootstrapper"
|
||||
:summary "js.sx — SX-to-JavaScript translator + ahead-of-time component compiler. Zero-runtime static sites.")
|
||||
(dict :label "SX-Activity" :href "/plans/sx-activity"
|
||||
(dict :label "SX-Activity" :href "/etc/plans/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 "/plans/predictive-prefetch"
|
||||
(dict :label "Predictive Prefetching" :href "/etc/plans/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 "/plans/content-addressed-components"
|
||||
(dict :label "Content-Addressed Components" :href "/etc/plans/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 "/plans/environment-images"
|
||||
(dict :label "Environment Images" :href "/etc/plans/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 "/plans/runtime-slicing"
|
||||
(dict :label "Runtime Slicing" :href "/etc/plans/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 "/plans/typed-sx"
|
||||
(dict :label "Typed SX" :href "/etc/plans/typed-sx"
|
||||
:summary "Gradual type system for SX. Optional annotations, checked at registration time, zero runtime cost. types.sx — specced, bootstrapped, catches composition errors.")
|
||||
(dict :label "Nav Redesign" :href "/plans/nav-redesign"
|
||||
(dict :label "Nav Redesign" :href "/etc/plans/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 "/plans/fragment-protocol"
|
||||
(dict :label "Fragment Protocol" :href "/etc/plans/fragment-protocol"
|
||||
:summary "Structured sexp request/response for cross-service component transfer.")
|
||||
(dict :label "Glue Decoupling" :href "/plans/glue-decoupling"
|
||||
(dict :label "Glue Decoupling" :href "/etc/plans/glue-decoupling"
|
||||
:summary "Eliminate all cross-app model imports via glue service layer.")
|
||||
(dict :label "Social Sharing" :href "/plans/social-sharing"
|
||||
(dict :label "Social Sharing" :href "/etc/plans/social-sharing"
|
||||
:summary "OAuth-based sharing to Facebook, Instagram, Threads, Twitter/X, LinkedIn, and Mastodon.")
|
||||
(dict :label "SX CI Pipeline" :href "/plans/sx-ci"
|
||||
(dict :label "SX CI Pipeline" :href "/etc/plans/sx-ci"
|
||||
:summary "Build, test, and deploy in s-expressions — CI pipelines as SX components.")
|
||||
(dict :label "Live Streaming" :href "/plans/live-streaming"
|
||||
(dict :label "Live Streaming" :href "/etc/plans/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 "/plans/sx-web-platform"
|
||||
(dict :label "sx-web Platform" :href "/etc/plans/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 "/plans/sx-forge"
|
||||
(dict :label "sx-forge" :href "/etc/plans/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 "/plans/sx-swarm"
|
||||
(dict :label "sx-swarm" :href "/etc/plans/sx-swarm"
|
||||
:summary "Container orchestration in SX — service definitions, environment macros, deploy pipelines. Replace YAML with a real language.")
|
||||
(dict :label "sx-proxy" :href "/plans/sx-proxy"
|
||||
(dict :label "sx-proxy" :href "/etc/plans/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 "/plans/async-eval-convergence"
|
||||
(dict :label "Async Eval Convergence" :href "/etc/plans/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 "/plans/wasm-bytecode-vm"
|
||||
(dict :label "WASM Bytecode VM" :href "/etc/plans/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 "/plans/generative-sx"
|
||||
(dict :label "Generative SX" :href "/etc/plans/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 "/plans/art-dag-sx"
|
||||
(dict :label "Art DAG on SX" :href "/etc/plans/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.")))
|
||||
|
||||
(define reactive-islands-nav-items (list
|
||||
(dict :label "Overview" :href "/reactive/"
|
||||
(dict :label "Overview" :href "/geography/reactive/"
|
||||
:summary "Architecture, four levels (L0-L3), and current implementation status.")
|
||||
(dict :label "Demo" :href "/reactive/demo"
|
||||
(dict :label "Demo" :href "/geography/reactive/demo"
|
||||
:summary "Live demonstration of signals, computed, effects, batch, and defisland — all transpiled from spec.")
|
||||
(dict :label "Event Bridge" :href "/reactive/event-bridge"
|
||||
(dict :label "Event Bridge" :href "/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 "/reactive/named-stores"
|
||||
(dict :label "Named Stores" :href "/geography/reactive/named-stores"
|
||||
:summary "Page-level signal containers via def-store/use-store — persist across island destruction/recreation.")
|
||||
(dict :label "Plan" :href "/reactive/plan"
|
||||
(dict :label "Plan" :href "/geography/reactive/plan"
|
||||
:summary "The full design document — rendering boundary, state flow, signal primitives, island lifecycle.")
|
||||
(dict :label "Marshes" :href "/reactive/marshes"
|
||||
:summary "Where reactivity and hypermedia interpenetrate — server writes to signals, reactive transforms reshape server content, client state modifies how hypermedia is interpreted.")
|
||||
(dict :label "Phase 2" :href "/reactive/phase2"
|
||||
(dict :label "Phase 2" :href "/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 "/bootstrappers/")
|
||||
(dict :label "JavaScript" :href "/bootstrappers/javascript")
|
||||
(dict :label "Python" :href "/bootstrappers/python")
|
||||
(dict :label "Self-Hosting (py.sx)" :href "/bootstrappers/self-hosting")
|
||||
(dict :label "Self-Hosting JS (js.sx)" :href "/bootstrappers/self-hosting-js")
|
||||
(dict :label "Page Helpers" :href "/bootstrappers/page-helpers")))
|
||||
(dict :label "Overview" :href "/language/bootstrappers/")
|
||||
(dict :label "JavaScript" :href "/language/bootstrappers/javascript")
|
||||
(dict :label "Python" :href "/language/bootstrappers/python")
|
||||
(dict :label "Self-Hosting (py.sx)" :href "/language/bootstrappers/self-hosting")
|
||||
(dict :label "Self-Hosting JS (js.sx)" :href "/language/bootstrappers/self-hosting-js")
|
||||
(dict :label "Page Helpers" :href "/language/bootstrappers/page-helpers")))
|
||||
|
||||
;; Spec file registry — canonical metadata for spec viewer pages.
|
||||
;; Python only handles file I/O (read-spec-file); all metadata lives here.
|
||||
@@ -327,21 +325,31 @@
|
||||
(define sx-nav-tree
|
||||
{:label "sx" :href "/"
|
||||
:children (list
|
||||
{:label "Reactive" :href "/reactive/" :children reactive-islands-nav-items}
|
||||
{:label "Hypermedia" :href "/hypermedia/"
|
||||
{:label "Geography" :href "/geography/"
|
||||
:children (list
|
||||
{:label "Reference" :href "/hypermedia/reference/" :children reference-nav-items}
|
||||
{:label "Examples" :href "/hypermedia/examples/" :children examples-nav-items})}
|
||||
{:label "Docs" :href "/docs/" :children docs-nav-items}
|
||||
{:label "CSSX" :href "/cssx/" :children cssx-nav-items}
|
||||
{:label "Protocols" :href "/protocols/" :children protocols-nav-items}
|
||||
{:label "Essays" :href "/essays/" :children essays-nav-items}
|
||||
{:label "Philosophy" :href "/philosophy/" :children philosophy-nav-items}
|
||||
{:label "Specs" :href "/specs/" :children specs-nav-items}
|
||||
{:label "Bootstrappers" :href "/bootstrappers/" :children bootstrappers-nav-items}
|
||||
{:label "Testing" :href "/testing/" :children testing-nav-items}
|
||||
{:label "Isomorphism" :href "/isomorphism/" :children isomorphism-nav-items}
|
||||
{:label "Plans" :href "/plans/" :children plans-nav-items})})
|
||||
{:label "Reactive Islands" :href "/geography/reactive/" :children reactive-islands-nav-items}
|
||||
{:label "Hypermedia Lakes" :href "/geography/hypermedia/"
|
||||
:children (list
|
||||
{:label "Reference" :href "/geography/hypermedia/reference/" :children reference-nav-items}
|
||||
{:label "Examples" :href "/geography/hypermedia/examples/" :children examples-nav-items})}
|
||||
{:label "Marshes" :href "/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/"
|
||||
:children (list
|
||||
{:label "Docs" :href "/language/docs/" :children docs-nav-items}
|
||||
{:label "Specs" :href "/language/specs/" :children specs-nav-items}
|
||||
{:label "Bootstrappers" :href "/language/bootstrappers/" :children bootstrappers-nav-items}
|
||||
{:label "Testing" :href "/language/testing/" :children testing-nav-items})}
|
||||
{:label "Applications" :href "/applications/"
|
||||
:children (list
|
||||
{:label "CSSX" :href "/applications/cssx/" :children cssx-nav-items}
|
||||
{:label "Protocols" :href "/applications/protocols/" :children protocols-nav-items})}
|
||||
{:label "Etc" :href "/etc/"
|
||||
:children (list
|
||||
{:label "Essays" :href "/etc/essays/" :children essays-nav-items}
|
||||
{:label "Philosophy" :href "/etc/philosophy/" :children philosophy-nav-items}
|
||||
{:label "Plans" :href "/etc/plans/" :children plans-nav-items})})})
|
||||
|
||||
;; Resolve a URL path to a nav trail + children.
|
||||
;; Returns {:trail [{:node N :siblings S} ...] :children [...] :depth N}
|
||||
@@ -384,11 +392,15 @@
|
||||
item)))
|
||||
items)
|
||||
;; Path contains section: /plans/typed-sx matches section with /plans/ children
|
||||
;; Also handles prefix matching on children for nested groups (e.g. Geography → Reactive Islands)
|
||||
(some (fn (item)
|
||||
(let ((children (get item "children")))
|
||||
(when children
|
||||
(when (some (fn (child)
|
||||
(= (get child "href") path))
|
||||
(let ((href (get child "href")))
|
||||
(or (= href path)
|
||||
(and (ends-with? href "/")
|
||||
(starts-with? path href)))))
|
||||
children)
|
||||
item))))
|
||||
items))))
|
||||
|
||||
Reference in New Issue
Block a user