diff --git a/.obsidian/app.json b/.obsidian/app.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/.obsidian/app.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/.obsidian/appearance.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json
new file mode 100644
index 0000000..3f2ab43
--- /dev/null
+++ b/.obsidian/core-plugins.json
@@ -0,0 +1,32 @@
+{
+ "file-explorer": true,
+ "global-search": true,
+ "switcher": true,
+ "graph": true,
+ "backlink": true,
+ "canvas": true,
+ "outgoing-link": true,
+ "tag-pane": true,
+ "footnotes": false,
+ "properties": true,
+ "page-preview": true,
+ "daily-notes": true,
+ "templates": true,
+ "note-composer": true,
+ "command-palette": true,
+ "slash-command": false,
+ "editor-status": true,
+ "bookmarks": true,
+ "markdown-importer": false,
+ "zk-prefixer": false,
+ "random-note": false,
+ "outline": true,
+ "word-count": true,
+ "slides": false,
+ "audio-recorder": false,
+ "workspaces": false,
+ "file-recovery": true,
+ "publish": false,
+ "sync": true,
+ "bases": true
+}
\ No newline at end of file
diff --git a/.obsidian/workspace-mobile.json b/.obsidian/workspace-mobile.json
new file mode 100644
index 0000000..1971cf2
--- /dev/null
+++ b/.obsidian/workspace-mobile.json
@@ -0,0 +1,166 @@
+{
+ "main": {
+ "id": "e8bfc73671d0fd49",
+ "type": "split",
+ "children": [
+ {
+ "id": "557d046612eff0b3",
+ "type": "tabs",
+ "children": [
+ {
+ "id": "6c81bb5943e0257c",
+ "type": "leaf",
+ "state": {
+ "type": "empty",
+ "state": {},
+ "icon": "lucide-file",
+ "title": "New tab"
+ }
+ }
+ ]
+ }
+ ],
+ "direction": "vertical"
+ },
+ "left": {
+ "id": "1d4c9dd39cec21f6",
+ "type": "mobile-drawer",
+ "children": [
+ {
+ "id": "e803d16f3dee61b8",
+ "type": "leaf",
+ "state": {
+ "type": "file-explorer",
+ "state": {
+ "sortOrder": "alphabetical",
+ "autoReveal": false
+ },
+ "icon": "lucide-folder-closed",
+ "title": "Files"
+ }
+ },
+ {
+ "id": "cace4dbf96a7a627",
+ "type": "leaf",
+ "state": {
+ "type": "search",
+ "state": {
+ "query": "",
+ "matchingCase": false,
+ "explainSearch": false,
+ "collapseAll": false,
+ "extraContext": false,
+ "sortOrder": "alphabetical"
+ },
+ "icon": "lucide-search",
+ "title": "Search"
+ }
+ },
+ {
+ "id": "143ed61800d25d3c",
+ "type": "leaf",
+ "state": {
+ "type": "tag",
+ "state": {
+ "sortOrder": "frequency",
+ "useHierarchy": true,
+ "showSearch": false,
+ "searchQuery": ""
+ },
+ "icon": "lucide-tags",
+ "title": "Tags"
+ }
+ },
+ {
+ "id": "df957e21b52bd308",
+ "type": "leaf",
+ "state": {
+ "type": "all-properties",
+ "state": {
+ "sortOrder": "frequency",
+ "showSearch": false,
+ "searchQuery": ""
+ },
+ "icon": "lucide-archive",
+ "title": "All properties"
+ }
+ },
+ {
+ "id": "49ebc6850c1d1f27",
+ "type": "leaf",
+ "state": {
+ "type": "bookmarks",
+ "state": {},
+ "icon": "lucide-bookmark",
+ "title": "Bookmarks"
+ }
+ }
+ ],
+ "currentTab": 0
+ },
+ "right": {
+ "id": "26036b51aba6cbe0",
+ "type": "mobile-drawer",
+ "children": [
+ {
+ "id": "03e973d6cece3716",
+ "type": "leaf",
+ "state": {
+ "type": "backlink",
+ "state": {
+ "collapseAll": false,
+ "extraContext": false,
+ "sortOrder": "alphabetical",
+ "showSearch": false,
+ "searchQuery": "",
+ "backlinkCollapsed": false,
+ "unlinkedCollapsed": true
+ },
+ "icon": "links-coming-in",
+ "title": "Backlinks"
+ }
+ },
+ {
+ "id": "a57520cfe52cc0ae",
+ "type": "leaf",
+ "state": {
+ "type": "outgoing-link",
+ "state": {
+ "linksCollapsed": false,
+ "unlinkedCollapsed": true
+ },
+ "icon": "links-going-out",
+ "title": "Outgoing links"
+ }
+ },
+ {
+ "id": "07fa693d853fc9e7",
+ "type": "leaf",
+ "state": {
+ "type": "outline",
+ "state": {
+ "followCursor": false,
+ "showSearch": false,
+ "searchQuery": ""
+ },
+ "icon": "lucide-list",
+ "title": "Outline"
+ }
+ }
+ ],
+ "currentTab": 0
+ },
+ "left-ribbon": {
+ "hiddenItems": {
+ "switcher:Open quick switcher": false,
+ "graph:Open graph view": false,
+ "canvas:Create new canvas": false,
+ "daily-notes:Open today's daily note": false,
+ "templates:Insert template": false,
+ "command-palette:Open command palette": false,
+ "bases:Create new base": false
+ }
+ },
+ "active": "6c81bb5943e0257c",
+ "lastOpenFiles": []
+}
\ No newline at end of file
diff --git a/.stfolder/syncthing-folder-0ddacb.txt b/.stfolder/syncthing-folder-0ddacb.txt
new file mode 100644
index 0000000..63d467c
--- /dev/null
+++ b/.stfolder/syncthing-folder-0ddacb.txt
@@ -0,0 +1,5 @@
+# This directory is a Syncthing folder marker.
+# Do not delete.
+
+folderID: yz2bz-fshsf
+created: 2025-11-30T03:50:07-05:00
diff --git a/content/posts/fp.md b/content/posts/fp.md
index a07c246..e7f0107 100755
--- a/content/posts/fp.md
+++ b/content/posts/fp.md
@@ -51,9 +51,10 @@ Do any of these mean anything? No, so lets start at the beginning
- This is also associative because Trust Me Bro
- Another example of a Monoid is RGBA colors
- The identity here is `rgba(0,0,0,0)` since adding clear to any color doesn't change it
- - Colors are closed since you can add two of them and get a color back*
+ - Colors are closed under saturating addition since you can add two of them and get a color back*
- *Actually I'm sure there's some sort of floating-point nonsense that makes this not true but IEEE 754 can go suck a log
- - RGBA Colors are associative because I said so
+ - actually you know what, lets pretend that #RRGGBBAA is a real notation that real people use, since it'll let us replace define multiplication as 8-bit saturating addition which is a much more well defined thing to do to colors
+ - RGBA Color addition is associative because I said so
- Absolutely unrelated, but I'm pretty sure OKLab isn't closed under the set of displayable colors, which feels cursed but is probably reasonable tbh
# Categories
diff --git a/content/shitposts/.gitattributes b/content/shitposts/.gitattributes
new file mode 100644
index 0000000..24a8e87
--- /dev/null
+++ b/content/shitposts/.gitattributes
@@ -0,0 +1 @@
+*.png filter=lfs diff=lfs merge=lfs -text
diff --git a/content/shitposts/140-2.svg b/content/shitposts/140-2.svg
new file mode 100644
index 0000000..7906478
--- /dev/null
+++ b/content/shitposts/140-2.svg
@@ -0,0 +1,290 @@
+
+
diff --git a/content/shitposts/140-3.svg b/content/shitposts/140-3.svg
new file mode 100644
index 0000000..e9d93af
--- /dev/null
+++ b/content/shitposts/140-3.svg
@@ -0,0 +1,68 @@
+
+
diff --git a/content/shitposts/OpenIKEA.svg b/content/shitposts/OpenIKEA.svg
new file mode 100644
index 0000000..62701cf
--- /dev/null
+++ b/content/shitposts/OpenIKEA.svg
@@ -0,0 +1,141 @@
+
+
+
+
diff --git a/content/shitposts/cat.svg b/content/shitposts/cat.svg
new file mode 100644
index 0000000..289841a
--- /dev/null
+++ b/content/shitposts/cat.svg
@@ -0,0 +1,121 @@
+
+
diff --git a/content/shitposts/cisco_nerv.svg b/content/shitposts/cisco_nerv.svg
new file mode 100644
index 0000000..619ba05
--- /dev/null
+++ b/content/shitposts/cisco_nerv.svg
@@ -0,0 +1,149 @@
+
+
+
+
diff --git a/content/shitposts/cubanetes.svg b/content/shitposts/cubanetes.svg
new file mode 100644
index 0000000..41c9c19
--- /dev/null
+++ b/content/shitposts/cubanetes.svg
@@ -0,0 +1,115 @@
+
+
+
+
diff --git a/content/shitposts/fortinet.svg b/content/shitposts/fortinet.svg
new file mode 100644
index 0000000..5d69502
--- /dev/null
+++ b/content/shitposts/fortinet.svg
@@ -0,0 +1,143 @@
+
+
diff --git a/content/shitposts/fortnite.svg b/content/shitposts/fortnite.svg
new file mode 100644
index 0000000..b26366b
--- /dev/null
+++ b/content/shitposts/fortnite.svg
@@ -0,0 +1,100 @@
+
+
diff --git a/content/shitposts/fux.svg b/content/shitposts/fux.svg
new file mode 100644
index 0000000..318b1ae
--- /dev/null
+++ b/content/shitposts/fux.svg
@@ -0,0 +1,190 @@
+
+
diff --git a/content/shitposts/kulupu_ne.svg b/content/shitposts/kulupu_ne.svg
new file mode 100644
index 0000000..f88e1bd
--- /dev/null
+++ b/content/shitposts/kulupu_ne.svg
@@ -0,0 +1,170 @@
+
+
+
+
diff --git a/content/shitposts/kyubeynetes.svg b/content/shitposts/kyubeynetes.svg
new file mode 100644
index 0000000..4555352
--- /dev/null
+++ b/content/shitposts/kyubeynetes.svg
@@ -0,0 +1,180 @@
+
+
+
+
diff --git a/content/shitposts/megastarmiekles.svg b/content/shitposts/megastarmiekles.svg
new file mode 100644
index 0000000..f53504c
--- /dev/null
+++ b/content/shitposts/megastarmiekles.svg
@@ -0,0 +1,264 @@
+
+
+
+
diff --git a/content/shitposts/meshtastic_pillbox.svg b/content/shitposts/meshtastic_pillbox.svg
new file mode 100644
index 0000000..25990ab
--- /dev/null
+++ b/content/shitposts/meshtastic_pillbox.svg
@@ -0,0 +1,761 @@
+
+
+
+
diff --git a/content/shitposts/meshtastic_pillbox_rendered.svg b/content/shitposts/meshtastic_pillbox_rendered.svg
new file mode 100644
index 0000000..b8b577f
--- /dev/null
+++ b/content/shitposts/meshtastic_pillbox_rendered.svg
@@ -0,0 +1,442 @@
+
+
+
+
diff --git a/content/shitposts/pingpong.svg b/content/shitposts/pingpong.svg
new file mode 100644
index 0000000..f2595f1
--- /dev/null
+++ b/content/shitposts/pingpong.svg
@@ -0,0 +1,64 @@
+
+
diff --git a/content/shitposts/q_combinator.svg b/content/shitposts/q_combinator.svg
new file mode 100644
index 0000000..2a69a40
--- /dev/null
+++ b/content/shitposts/q_combinator.svg
@@ -0,0 +1,153 @@
+
+
diff --git a/content/shitposts/rotom.svg b/content/shitposts/rotom.svg
new file mode 100755
index 0000000..02a3d44
--- /dev/null
+++ b/content/shitposts/rotom.svg
@@ -0,0 +1,162 @@
+
+
diff --git a/content/shitposts/starbleed.svg b/content/shitposts/starbleed.svg
new file mode 100644
index 0000000..1bcd0d8
--- /dev/null
+++ b/content/shitposts/starbleed.svg
@@ -0,0 +1,93 @@
+
+
diff --git a/content/shitposts/starmiekles.svg b/content/shitposts/starmiekles.svg
new file mode 100644
index 0000000..71f20c1
--- /dev/null
+++ b/content/shitposts/starmiekles.svg
@@ -0,0 +1,305 @@
+
+
+
+
diff --git a/static/the-monospace-web b/static/the-monospace-web
index 113962a..90df20c 160000
--- a/static/the-monospace-web
+++ b/static/the-monospace-web
@@ -1 +1 @@
-Subproject commit 113962a84741febc1102b5cb2943cec4729f4ce8
+Subproject commit 90df20cd6a06a5bb59d5120a94de73515fc4a55a