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:
@@ -32,36 +32,36 @@
|
||||
(tbody
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.parser))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.parser))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.parser))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.parser))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"parser.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Tokenization and parsing of SX source text into AST"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.evaluator))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.evaluator))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.evaluator))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.evaluator))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"eval.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Tree-walking evaluation of SX expressions"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.primitives))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.primitives))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.primitives))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.primitives))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"primitives.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "All built-in pure functions and their signatures"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.special-forms))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.special-forms))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.special-forms))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.special-forms))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"special-forms.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "All special forms — syntactic constructs with custom evaluation rules"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.renderer))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.renderer))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.renderer))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.renderer))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"render.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Shared rendering registries and utilities used by all adapters"))))))
|
||||
@@ -79,32 +79,32 @@
|
||||
(tbody
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.adapter-dom))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.adapter-dom))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.adapter-dom))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.adapter-dom))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"adapter-dom.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Live DOM nodes")
|
||||
(td :class "px-3 py-2 text-stone-500" "Browser"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.adapter-html))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.adapter-html))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.adapter-html))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.adapter-html))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"adapter-html.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "HTML strings")
|
||||
(td :class "px-3 py-2 text-stone-500" "Server"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.adapter-sx))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.adapter-sx))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.adapter-sx))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.adapter-sx))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"adapter-sx.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "SX wire format")
|
||||
(td :class "px-3 py-2 text-stone-500" "Server to client"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.adapter-async))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.adapter-async))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.adapter-async))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.adapter-async))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"adapter-async.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "HTML/SX with awaited I/O")
|
||||
@@ -122,29 +122,29 @@
|
||||
(tbody
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.engine))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.engine))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.engine))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.engine))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"engine.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Pure logic — trigger parsing, swap algorithms, morph, history, SSE, indicators"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.orchestration))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.orchestration))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.orchestration))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.orchestration))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"orchestration.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Browser wiring — binds engine to DOM events, fetch, request lifecycle"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.boot))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.boot))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.boot))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.boot))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"boot.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Browser startup — mount, hydrate, script processing, head hoisting"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.router))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.router))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.router))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.router))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"router.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Client-side route matching — Flask-style patterns, param extraction"))))))
|
||||
@@ -161,8 +161,8 @@
|
||||
(tbody
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.signals))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.signals))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.signals))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.signals))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"signals.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Signal runtime — signal, deref, reset!, swap!, computed, effect, batch, island scope"))))))
|
||||
@@ -179,22 +179,22 @@
|
||||
(tbody
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.boundary))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.boundary))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.boundary))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.boundary))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"boundary.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Language boundary — I/O primitives, page helpers, tier declarations"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.forms))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.forms))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.forms))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.forms))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"forms.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Definition forms — defhandler, defquery, defaction, defpage"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.page-helpers))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.page-helpers))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.page-helpers))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.page-helpers))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"page-helpers.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Pure data-transformation helpers for page rendering"))))))
|
||||
@@ -248,29 +248,29 @@ deps.sx depends on: eval")))
|
||||
(tbody
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.continuations))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.continuations))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.continuations))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.continuations))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"continuations.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Delimited continuations — shift/reset"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.callcc))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.callcc))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.callcc))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.callcc))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"callcc.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Full first-class continuations — call/cc"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.types))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.types))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.types))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.types))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"types.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Gradual type system — registration-time checking, zero runtime cost"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(spec.deps))" :class "hover:underline"
|
||||
:sx-get "/(language.(spec.deps))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
(a :href "/sx/(language.(spec.deps))" :class "hover:underline"
|
||||
:sx-get "/sx/(language.(spec.deps))" :sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
"deps.sx"))
|
||||
(td :class "px-3 py-2 text-stone-700" "Component dependency analysis — bundling, IO detection, CSS scoping"))))))
|
||||
@@ -337,8 +337,8 @@ deps.sx depends on: eval")))
|
||||
(div :class "flex items-center gap-3 mb-4"
|
||||
(span :class "text-sm text-stone-400 font-mono" spec-filename)
|
||||
(span :class "text-sm text-stone-500 flex-1" spec-desc)
|
||||
(a :href (str "/(language.(spec.(explore." (replace spec-filename ".sx" "") ")))")
|
||||
:sx-get (str "/(language.(spec.(explore." (replace spec-filename ".sx" "") ")))")
|
||||
(a :href (str "/sx/(language.(spec.(explore." (replace spec-filename ".sx" "") ")))")
|
||||
:sx-get (str "/sx/(language.(spec.(explore." (replace spec-filename ".sx" "") ")))")
|
||||
:sx-target "#main-panel" :sx-select "#main-panel"
|
||||
:sx-swap "outerHTML" :sx-push-url "true"
|
||||
:class "text-sm text-violet-600 hover:text-violet-800 font-medium whitespace-nowrap"
|
||||
@@ -380,21 +380,21 @@ deps.sx depends on: eval")))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 text-stone-700" "JavaScript")
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(bootstrapper.javascript))" :class "hover:underline"
|
||||
(a :href "/sx/(language.(bootstrapper.javascript))" :class "hover:underline"
|
||||
"bootstrap_js.py"))
|
||||
(td :class "px-3 py-2 font-mono text-sm text-stone-500" "sx-browser.js")
|
||||
(td :class "px-3 py-2 text-green-600" "Live"))
|
||||
(tr :class "border-b border-stone-100"
|
||||
(td :class "px-3 py-2 text-stone-700" "Python")
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(bootstrapper.python))" :class "hover:underline"
|
||||
(a :href "/sx/(language.(bootstrapper.python))" :class "hover:underline"
|
||||
"bootstrap_py.py"))
|
||||
(td :class "px-3 py-2 font-mono text-sm text-stone-500" "sx_ref.py")
|
||||
(td :class "px-3 py-2 text-green-600" "Live"))
|
||||
(tr :class "border-b border-stone-100 bg-green-50"
|
||||
(td :class "px-3 py-2 text-stone-700" "Python (self-hosting)")
|
||||
(td :class "px-3 py-2 font-mono text-sm text-violet-700"
|
||||
(a :href "/(language.(bootstrapper.self-hosting))" :class "hover:underline"
|
||||
(a :href "/sx/(language.(bootstrapper.self-hosting))" :class "hover:underline"
|
||||
"py.sx"))
|
||||
(td :class "px-3 py-2 font-mono text-sm text-stone-500" "sx_ref.py")
|
||||
(td :class "px-3 py-2 text-green-600" "G0 == G1"))
|
||||
|
||||
Reference in New Issue
Block a user