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

@@ -55,7 +55,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-click
:path "/(geography.(hypermedia.(example.(api.click))))"
:path "/sx/(geography.(hypermedia.(example.(api.click))))"
:method :get
:returns "element"
(&key)
@@ -73,7 +73,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-form
:path "/(geography.(hypermedia.(example.(api.form))))"
:path "/sx/(geography.(hypermedia.(example.(api.form))))"
:method :post
:csrf false
:returns "element"
@@ -92,7 +92,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-poll
:path "/(geography.(hypermedia.(example.(api.poll))))"
:path "/sx/(geography.(hypermedia.(example.(api.poll))))"
:method :get
:returns "element"
(&key)
@@ -113,7 +113,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-delete
:path "/(geography.(hypermedia.(example.(api.(delete.<sx:item_id>)))))"
:path "/sx/(geography.(hypermedia.(example.(api.(delete.<sx:item_id>)))))"
:method :delete
:csrf false
:returns "element"
@@ -130,7 +130,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-edit-form
:path "/(geography.(hypermedia.(example.(api.edit))))"
:path "/sx/(geography.(hypermedia.(example.(api.edit))))"
:method :get
:returns "element"
(&key)
@@ -143,7 +143,7 @@
:text (str "(~inline-edit-form :value \"" value "\")")))))
(defhandler ex-edit-save
:path "/(geography.(hypermedia.(example.(api.edit))))"
:path "/sx/(geography.(hypermedia.(example.(api.edit))))"
:method :post
:csrf false
:returns "element"
@@ -157,7 +157,7 @@
:text (str "(~inline-view :value \"" value "\")")))))
(defhandler ex-edit-cancel
:path "/(geography.(hypermedia.(example.(api.edit-cancel))))"
:path "/sx/(geography.(hypermedia.(example.(api.edit-cancel))))"
:method :get
:returns "element"
(&key)
@@ -175,7 +175,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-oob
:path "/(geography.(hypermedia.(example.(api.oob))))"
:path "/sx/(geography.(hypermedia.(example.(api.oob))))"
:method :get
:returns "element"
(&key)
@@ -195,7 +195,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-lazy
:path "/(geography.(hypermedia.(example.(api.lazy))))"
:path "/sx/(geography.(hypermedia.(example.(api.lazy))))"
:method :get
:returns "element"
(&key)
@@ -213,7 +213,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-scroll
:path "/(geography.(hypermedia.(example.(api.scroll))))"
:path "/sx/(geography.(hypermedia.(example.(api.scroll))))"
:method :get
:returns "element"
(&key)
@@ -227,7 +227,7 @@
(range start (+ start 5)))
(if (<= (+ pg 1) 6)
(div :id "scroll-sentinel"
:sx-get (str "/(geography.(hypermedia.(example.(api.scroll))))?page=" (+ pg 1))
:sx-get (str "/sx/(geography.(hypermedia.(example.(api.scroll))))?page=" (+ pg 1))
:sx-trigger "intersect once"
:sx-target "#scroll-items"
:sx-swap "beforeend"
@@ -244,7 +244,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-progress-start
:path "/(geography.(hypermedia.(example.(api.progress-start))))"
:path "/sx/(geography.(hypermedia.(example.(api.progress-start))))"
:method :post
:csrf false
:returns "element"
@@ -261,7 +261,7 @@
:text (str "(~progress-status :percent 0 :job-id \"" job-id "\")"))))))
(defhandler ex-progress-status
:path "/(geography.(hypermedia.(example.(api.progress-status))))"
:path "/sx/(geography.(hypermedia.(example.(api.progress-status))))"
:method :get
:returns "element"
(&key)
@@ -282,7 +282,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-search
:path "/(geography.(hypermedia.(example.(api.search))))"
:path "/sx/(geography.(hypermedia.(example.(api.search))))"
:method :get
:returns "element"
(&key)
@@ -304,7 +304,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-validate
:path "/(geography.(hypermedia.(example.(api.validate))))"
:path "/sx/(geography.(hypermedia.(example.(api.validate))))"
:method :get
:returns "element"
(&key)
@@ -331,7 +331,7 @@
:text (nth result 1))))))
(defhandler ex-validate-submit
:path "/(geography.(hypermedia.(example.(api.validate-submit))))"
:path "/sx/(geography.(hypermedia.(example.(api.validate-submit))))"
:method :post
:csrf false
:returns "element"
@@ -347,7 +347,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-values
:path "/(geography.(hypermedia.(example.(api.values))))"
:path "/sx/(geography.(hypermedia.(example.(api.values))))"
:method :get
:returns "element"
(&key)
@@ -367,7 +367,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-reset-submit
:path "/(geography.(hypermedia.(example.(api.reset-submit))))"
:path "/sx/(geography.(hypermedia.(example.(api.reset-submit))))"
:method :post
:csrf false
:returns "element"
@@ -387,7 +387,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-editrow-form
:path "/(geography.(hypermedia.(example.(api.(editrow.<sx:row_id>)))))"
:path "/sx/(geography.(hypermedia.(example.(api.(editrow.<sx:row_id>)))))"
:method :get
:returns "element"
(&key row-id)
@@ -402,7 +402,7 @@
:text (str "(~edit-row-form :id \"" (get row "id") "\" ...)"))))))
(defhandler ex-editrow-save
:path "/(geography.(hypermedia.(example.(api.(editrow.<sx:row_id>)))))"
:path "/sx/(geography.(hypermedia.(example.(api.(editrow.<sx:row_id>)))))"
:method :post
:csrf false
:returns "element"
@@ -420,7 +420,7 @@
:text (str "(~edit-row-view :id \"" row-id "\" ...)")))))
(defhandler ex-editrow-cancel
:path "/(geography.(hypermedia.(example.(api.(editrow-cancel.<sx:row_id>)))))"
:path "/sx/(geography.(hypermedia.(example.(api.(editrow-cancel.<sx:row_id>)))))"
:method :get
:returns "element"
(&key row-id)
@@ -439,7 +439,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-bulk
:path "/(geography.(hypermedia.(example.(api.bulk))))"
:path "/sx/(geography.(hypermedia.(example.(api.bulk))))"
:method :post
:csrf false
:returns "element"
@@ -476,7 +476,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-swap-log
:path "/(geography.(hypermedia.(example.(api.swap-log))))"
:path "/sx/(geography.(hypermedia.(example.(api.swap-log))))"
:method :post
:csrf false
:returns "element"
@@ -500,7 +500,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-dashboard
:path "/(geography.(hypermedia.(example.(api.dashboard))))"
:path "/sx/(geography.(hypermedia.(example.(api.dashboard))))"
:method :get
:returns "element"
(&key)
@@ -530,7 +530,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-tabs
:path "/(geography.(hypermedia.(example.(api.(tabs.<sx:tab>)))))"
:path "/sx/(geography.(hypermedia.(example.(api.(tabs.<sx:tab>)))))"
:method :get
:returns "element"
(&key tab)
@@ -551,7 +551,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-animate
:path "/(geography.(hypermedia.(example.(api.animate))))"
:path "/sx/(geography.(hypermedia.(example.(api.animate))))"
:method :get
:returns "element"
(&key)
@@ -571,7 +571,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-dialog
:path "/(geography.(hypermedia.(example.(api.dialog))))"
:path "/sx/(geography.(hypermedia.(example.(api.dialog))))"
:method :get
:returns "element"
(&key)
@@ -584,7 +584,7 @@
:text "(~dialog-modal :title \"Confirm Action\" :message \"...\")")))
(defhandler ex-dialog-close
:path "/(geography.(hypermedia.(example.(api.dialog-close))))"
:path "/sx/(geography.(hypermedia.(example.(api.dialog-close))))"
:method :get
:returns "element"
(&key)
@@ -598,7 +598,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-keyboard
:path "/(geography.(hypermedia.(example.(api.keyboard))))"
:path "/sx/(geography.(hypermedia.(example.(api.keyboard))))"
:method :get
:returns "element"
(&key)
@@ -617,7 +617,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-pp-edit-all
:path "/(geography.(hypermedia.(example.(api.putpatch-edit-all))))"
:path "/sx/(geography.(hypermedia.(example.(api.putpatch-edit-all))))"
:method :get
:returns "element"
(&key)
@@ -631,7 +631,7 @@
:text (str "(~pp-form-full :name \"" (get p "name") "\" ...)")))))
(defhandler ex-pp-put
:path "/(geography.(hypermedia.(example.(api.putpatch))))"
:path "/sx/(geography.(hypermedia.(example.(api.putpatch))))"
:method :put
:csrf false
:returns "element"
@@ -648,7 +648,7 @@
:text (str "(~pp-view :name \"" name "\" ...)")))))
(defhandler ex-pp-cancel
:path "/(geography.(hypermedia.(example.(api.putpatch-cancel))))"
:path "/sx/(geography.(hypermedia.(example.(api.putpatch-cancel))))"
:method :get
:returns "element"
(&key)
@@ -667,7 +667,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-json-echo
:path "/(geography.(hypermedia.(example.(api.json-echo))))"
:path "/sx/(geography.(hypermedia.(example.(api.json-echo))))"
:method :post
:csrf false
:returns "element"
@@ -688,7 +688,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-echo-vals
:path "/(geography.(hypermedia.(example.(api.echo-vals))))"
:path "/sx/(geography.(hypermedia.(example.(api.echo-vals))))"
:method :get
:returns "element"
(&key)
@@ -705,7 +705,7 @@
:text (str "(~echo-result :label \"values\" :items (list ...))")))))))
(defhandler ex-echo-headers
:path "/(geography.(hypermedia.(example.(api.echo-headers))))"
:path "/sx/(geography.(hypermedia.(example.(api.echo-headers))))"
:method :get
:returns "element"
(&key)
@@ -725,7 +725,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-slow
:path "/(geography.(hypermedia.(example.(api.slow))))"
:path "/sx/(geography.(hypermedia.(example.(api.slow))))"
:method :get
:returns "element"
(&key)
@@ -744,7 +744,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-slow-search
:path "/(geography.(hypermedia.(example.(api.slow-search))))"
:path "/sx/(geography.(hypermedia.(example.(api.slow-search))))"
:method :get
:returns "element"
(&key)
@@ -764,7 +764,7 @@
;; --------------------------------------------------------------------------
(defhandler ex-flaky
:path "/(geography.(hypermedia.(example.(api.flaky))))"
:path "/sx/(geography.(hypermedia.(example.(api.flaky))))"
:method :get
:returns "element"
(&key)