--- title: Baby steps layout: ./Site.layout.js --- # Kitten [toc] Kitten is the signature `web0` framework by Aral by by . Kitten inherits the federalization of web3, but the corruption and centralization of control is subtracted. Hence `web0`. In practice Kitten is a loosely federalizing web framework with an emphasis on gemini-style TLS authentication leaning heavily on Aral's powerful expertise in case-appropriate design. Two more descriptions of Kitten would be that it is an anti-Facebook, anti-Google web server expert system. There is no need to serve javascript web pages - javascript happens to have been the language with obvious existing support for web(0), used for dynamically generating and serving arbitrary web pages. Kitten's running, strongly persisted application database is directly available to the dynamic page generation. There is a clearly stated distinction between Kitten's use of first party cookies for two known parties to have TLS authenticated sessions, in contrast to evil, parasitic third party data mining cookies. Contrast a restaurant you are visiting remembering your gluten sensitivity while preparing your food, in contrast to the Sirius Cybernetics Corporation's Marketing Department tracking your gluten sensitivity. We want to have the former and not the latter. Kitten has a strong emphasis on serving md markdown markdown pages. # Common lisp for making Kittens While I respect that Aral wants to see lots of everyperson-style static markdown Kittens, this is lisp alien country. ## My choices :stack: - [Ruricolist](https://ruricolist.com/)'s [Spinneret](https://github.com/ruricolist/spinneret) for sexp html generation - [Mnl](https://hachyderm.io/@mnl)'s (descendents') [Parenscript](https://parenscript.common-lisp.dev/) via [spinneret/ps](https://github.com/ruricolist/spinneret?tab=readme-ov-file#parenscript) for loosely transpiling lisp to javascript. ## More choices - [jackdaniel](https://turtleware.eu/)'s [McCLIM](https://codeberg.org/McCLIM/McCLIM)'s built in directed graph visualizer to reason about html sexps - [orgmode](http://orgmode.org/org.html)'s markdown export - [Edrx](https://anggtwu.net/index.html)'s eev-mode's [eepitch](https://anggtwu.net/eepitch.html) for steering Kitten's expert system # Graph of planned site Note that I am not a web designer, and I have just guessed that the following are things based on occasionally having visited websites before. ## Hypothetical tree This is just the last way that I was using [CLIM spec's native graph support](https://www.lispworks.com/documentation/lwu41/climuser/GUID_286.HTM#HEADING286-0). ```lisp (defparameter *site-tree* '((:body (:article ((:h1 (:|screwlisp proposes a kitten|)) ((:p (:|lispy gopher climate|)) ((:p (:|Mastodon|)) ((:p (:|What do I even do|))))))) (:nav ((:h1 (:|list of links|)) ((:item (:|this lisp kitten|)) ((:item (|Aral's episode|))))))))) (find-application-frame 'graphs :graph *site-tree*) ``` ### Image ![A node graph of the tree structure shown above](/images/page-plan-graph.png) ## Revised spinneret sexp ### setup ```lisp (require :spinneret) (use-package :spinneret) ``` ### Generate html ```lisp (with-html-string (:body (:article (:h1 (:raw "screwlisp proposes a kitten")) (:p (:raw "lispy gopher climate")) (:p (:raw "Mastodon")) (:p (:raw "What do I even do"))) (:nav (:h1 (:raw "list of links")) (:ul (:li (:raw "this kittentroduction")) (:li (:raw "Aral's episode")))))) ``` # Generate a kitten page generater ```lisp (with-open-file (out "index.page.js" :direction :output :if-exists :supersede) (format out " export default () => kitten.html` ~a ` " (with-html-string (:body (:article (:h1 (:raw "screwlisp proposes a kitten")) (:p (:raw "lispy gopher climate")) (:p (:raw "Mastodon")) (:p (:raw "What do I even do"))) (:nav (:h1 (:raw "list of links")) (:ul (:li (:raw "this kittentroduction")) (:li (:raw "Aral's episode")))))))) ``` ## That generated index.page.js ```js export default () => kitten.html`

screwlisp proposes a kitten

lispy gopher climate

Mastodon

What do I even do

` ``` ## kitten Using eepitch.  eepitch-shell cd path/to/my/kittens kitten this serves that over eepitch. Note that it is tls-first. I visited `https://localhost` with eww: ## Image for the visually inclined ![Screenshot of how the index page renders](/images/eww-kitten-screenshot.png) ## Textually screwlisp proposes a kitten lispy gopher climate Mastodon What do I even do list of links * this kittentroduction * Aral's episode # Call this part 1 finished I think that's a solid mouthful. I need some follow-up pages to do as well after all. Hope to see everyone on the Mastodon! - and at the weekly show at 000UTC every Wednesday. Check the Mastodon. ## Coming up live episodes ### Eduardo Ochs maker of Emacs eev :0UTC_Wed_7_May_2025: - - ### Kent M. Pitman :0UTC_Wed_14_May_2025: - - - ( ) ### Recent Archives 1. Aral Balkan - small-web.org and kitten :0UTC_Wed_30April_2025: - - - Episode archive: