---
title: Baby steps
layout: ./Site.layout.js
---
# Kitten
[toc]
Kitten is the signature `web0` framework by Aral by <
https://small-web.org> by <
https://small-tech.org>. 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

## 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`
<body>
<article>
<h1>screwlisp proposes a kitten</h1>
<p>lispy gopher climate
<p>Mastodon
<p>What do I even do
</article>
<nav>
<h1>list of links</h1>
<ul>
<li>this kittentroduction
<li>Aral's episode
</ul>
</nav>
</body>
`
```
## 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

## 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!
- <
https://mastodon.sdf.org/@screwtape>
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:
- <
https://anggtwu.net/index.html>
- <
https://emacs.social/@eduardoochs>
### Kent M. Pitman :0UTC_Wed_14_May_2025:
- <
https://nhplace.com>
- <
https://climatejustice.social/@Kentpitman>
- ( <
https://en.wikipedia.org/wiki/Kent_Pitman> )
### Recent Archives
1. Aral Balkan - small-web.org and kitten :0UTC_Wed_30April_2025:
- <
https://small-web.org>
- <
https://mastodon.ar.al/@aral>
- Episode archive:
<
https://communitymedia.video/w/kTjUgHSYCZsJwucUPVoLgx>