Site: list all 51 published @lisp packages on /packages/

ober

034b32c074c8b1c0999d415d9b9d277c06cfba0d

diff --git a/secure-site.ss b/secure-site.ss
index b41803c..ad92a39 100644
--- a/secure-site.ss
+++ b/secure-site.ss
@@ -82,8 +82,103 @@
   (append
     site-forced-security-headers
     (list
-      (cons "Content-Type" content-type)
-      (cons "Content-Security-Policy" normal-content-security-policy))))
+       (cons "Content-Type" content-type)
+       (cons "Content-Security-Policy" normal-content-security-policy))))
+
+;; ── package registry data ──────────────────────────────────────────────
+
+(define (sourcehut-repo name)
+  (string-append "https://git.sr.ht/~lisp/" name))
+
+(define (package-card item)
+  (let ((name (list-ref item 0))
+        (version (list-ref item 1))
+        (desc (list-ref item 2))
+        (repo (list-ref item 3)))
+    (string-append
+      "<div class=\"repo-card\"><span class=\"label\">" version "</span>"
+      "<h3>" name "</h3><p>" desc "</p>"
+      "<a href=\"" (sourcehut-repo repo) "\">Source</a></div>")))
+
+(define (package-section title items)
+  (string-append
+    "<h3>" title " <span class=\"muted\">(" (number->string (length items)) ")</span></h3>"
+    "<div class=\"repo-grid\">"
+    (apply string-append (map package-card items))
+    "</div>"))
+
+(define registry-network-packages
+  (list
+    (list "@lisp/jerboa-ssh" "0.1.0" "SSH client and server: agent, Ed25519 keys, SFTP, port forwarding" "jerboa-ssh")
+    (list "@lisp/jerboa-sshd" "0.1.0" "SSH daemon for Jerboa" "jerboa-sshd")
+    (list "@lisp/jerboa-ssl" "0.1.0" "SSL/TLS primitives and FFI" "jerboa-ssl")
+    (list "@lisp/jerboa-https" "0.1.0" "HTTPS client and HTTP server" "jerboa-https")
+    (list "@lisp/jerboa-smtp" "0.1.0" "SMTP server and client" "jerboa-smtp")
+    (list "@lisp/jerboa-mail" "0.1.0" "IMAP/SMTP mail client" "jerboa-mail")
+    (list "@lisp/jerboa-dns" "0.1.0" "DNS client and server" "jerboa-dns")
+    (list "@lisp/jerboa-browser" "0.1.0" "Programmable Qt WebEngine browser" "jerboa-browser")
+    (list "@lisp/jerboa-webex" "0.1.0" "Web extraction toolkit" "jerboa-webex")
+    (list "@lisp/jerboa-websearch" "0.1.0" "Web search engine" "jerboa-websearch")
+    (list "@lisp/jerboa-wormhole" "0.1.0" "Magic-wormhole-style file transfer" "jerboa-wormhole")))
+
+(define registry-data-packages
+  (list
+    (list "@lisp/jerboa-crypto" "0.1.0" "Cryptographic primitives and FFI" "jerboa-crypto")
+    (list "@lisp/jerboa-db" "0.1.0" "Database abstractions" "jerboa-db")
+    (list "@lisp/jerboa-duckdb" "0.1.0" "DuckDB bindings" "jerboa-duckdb")
+    (list "@lisp/jerboa-sqlite" "0.1.0" "Pure Jerboa SQLite engine" "jerboa-sqlite")
+    (list "@lisp/jerboa-sqlite-ffi" "0.1.0" "SQLite FFI bindings" "jerboa-sqlite-ffi")
+    (list "@lisp/jerboa-pcre2" "0.1.0" "PCRE2 regex bindings" "jerboa-pcre2")
+    (list "@lisp/jerboa-pgp" "0.1.0" "OpenPGP implementation" "jerboa-pgp")
+    (list "@lisp/jerboa-yubikey" "0.1.0" "YubiKey / FIDO2 bindings" "jerboa-yubikey")))
+
+(define registry-security-packages
+  (list
+    (list "@lisp/jerboa-secmon" "0.1.0" "Security monitoring (SIEM)" "jerboa-secmon")
+    (list "@lisp/jerboa-secmonlib" "0.1.0" "Security monitoring library" "jerboa-secmonlib")
+    (list "@lisp/jerboa-semgrep" "0.1.0" "Semgrep-style pattern matching" "jerboa-semgrep")
+    (list "@lisp/jerboa-signal" "0.1.0" "Signal messenger client" "jerboa-signal")
+    (list "@lisp/jerboa-virus" "0.1.0" "Pure-Jerboa malware scanner" "jerboa-virus")
+    (list "@lisp/jerboa-gitsafe" "0.1.0" "Secret-scanning git hooks" "jerboa-gitsafe")))
+
+(define registry-systems-packages
+  (list
+    (list "@lisp/jerboa-coreutils" "0.1.0" "Core utilities (ls, cat, grep, etc.)" "jerboa-coreutils")
+    (list "@lisp/jerboa-awk" "0.1.0" "AWK implementation" "jerboa-awk")
+    (list "@lisp/jerboa-sed" "0.1.0" "SED stream editor" "jerboa-sed")
+    (list "@lisp/jerboa-top" "0.1.0" "Top-like process monitor" "jerboa-top")
+    (list "@lisp/jerboa-asm" "0.1.0" "Assembler and low-level code generation" "jerboa-asm")
+    (list "@lisp/jerboa-fuse" "0.1.0" "FUSE filesystem support" "jerboa-fuse")
+    (list "@lisp/jerboa-inotify" "0.1.0" "Linux inotify bindings" "jerboa-inotify")))
+
+(define registry-tools-packages
+  (list
+    (list "@lisp/jerboa-code" "0.1.0" "Portable AI coding agent" "jerboa-code")
+    (list "@lisp/jerboa-emacs" "0.1.0" "Emacs-like editor with terminal and Qt frontends" "jerboa-emacs")
+    (list "@lisp/jerboa-treesitter" "0.1.0" "Tree-sitter parser bindings" "jerboa-treesitter")
+    (list "@lisp/jerboa-scintilla" "0.1.0" "Scintilla editor component bindings" "jerboa-scintilla")))
+
+(define registry-platform-packages
+  (list
+    (list "@lisp/jerboa-android" "0.1.0" "Android target support for cross-compilation" "jerboa-android")
+    (list "@lisp/jerboa-aws" "0.1.0" "AWS SDK" "jerboa-aws")
+    (list "@lisp/jerboa-drive" "0.1.0" "Cloud drive abstraction" "jerboa-drive")
+    (list "@lisp/jerboa-edge" "0.1.0" "Edge computing runtime" "jerboa-edge")
+    (list "@lisp/jerboa-qt" "0.1.0" "Qt GUI bindings" "jerboa-qt")
+    (list "@lisp/jerboa-proton-bridge" "0.1.0" "Proton Mail bridge" "jerboa-proton-bridge")
+    (list "@lisp/jerboa-protonmail" "0.1.0" "Proton Mail API client" "jerboa-protonmail")))
+
+(define registry-core-packages
+  (list
+    (list "@lisp/jerboa-compat" "0.1.0" "Cross-implementation compatibility shims" "jerboa-compat")
+    (list "@lisp/jerboa-sinatra" "0.1.0" "Sinatra-style web framework" "jerboa-sinatra")
+    (list "@lisp/jerboa-site" "0.1.0" "Static site generator (this site!)" "jerboa-site")
+    (list "@lisp/jerboa-imagesite" "0.1.0" "Image hosting site builder" "jerboa-imagesite")
+    (list "@lisp/jerboa-ssd-recognizer" "0.1.0" "SSD object detection recognizer" "jerboa-ssd-recognizer")
+    (list "@lisp/jerboa-vision" "0.1.0" "Computer vision routines" "jerboa-vision")
+    (list "@lisp/jerboa-wafter" "0.1.0" "Network packet dissector" "jerboa-wafter")))
+
+;; ── install endpoint ────────────────────────────────────────────────────
 
 (define install-script
   (string-append
@@ -284,17 +379,18 @@
       "<h2>Commands</h2>"
       package-commands
       "<h2>Available Packages</h2>"
-      "<div class=\"repo-grid\">"
-      "<div class=\"repo-card\"><span class=\"label\">SSH</span><h3>@lisp/jerboa-ssh</h3><p>SSH client and server: agent protocol, Ed25519 keys, ssh-connect, ssh-run, SFTP, port forwarding.</p><a href=\"https://git.sr.ht/~lisp/jerboa-ssh\">Source</a></div>"
-      "<div class=\"repo-card\"><span class=\"label\">Coming Soon</span><h3>More Packages</h3><p>The registry is bootstrapped and accepts new packages via <code>jpkg publish</code>. Additional @lisp packages will be published as they pass review.</p><a href=\"https://git.sr.ht/~lisp/jerboa-registry\">Registry</a></div>"
-      "</div>"
+      "<p>51 packages published to the @lisp registry — all TUF-signed with Ed25519 signatures and SLSA provenance. Install any with <code>jerboa pkg add &lt;name&gt;</code>.</p>"
+      (package-section "Network and Web" registry-network-packages)
+      (package-section "Data and Crypto" registry-data-packages)
+      (package-section "Security" registry-security-packages)
+      (package-section "Systems and CLI" registry-systems-packages)
+      (package-section "Tools and Editors" registry-tools-packages)
+      (package-section "Platform" registry-platform-packages)
+      (package-section "Core" registry-core-packages)
       "<h2>Self-Host a Registry</h2>"
       "<p>Anyone can run a private registry: <code>jpkg publish --registry DIR --key FILE</code> bootstraps a TUF-signed staging registry. See the <a href=\"https://git.sr.ht/~lisp/jerboa/tree/master/item/docs/jpkg-guide.md\">jpkg guide</a> for the full workflow.</p>"
       "</section>")))
 
-(define (sourcehut-repo name)
-  (string-append "https://git.sr.ht/~lisp/" name))
-
 (define (repo-card item)
   (let ((name (list-ref item 0))
         (label (list-ref item 1))