~kris/9p

krisyotam.net

ref: 8bfa4b74cf61e74b5d7c8df7d0b0bceefe2569fe krisyotam.net/d/blog/graveyard.html -rw-r--r-- 18.8 KiB
8bfa4b74 — Kris Yotam ci: declare SourceHut source for push builds a month ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Graveyard | Kris Yotam</title>
    <link rel="stylesheet" href="../../c/site.css">
    <meta name="description" content="Every page and feature this site ever had and lost. Each one gets a headstone with the dates and the commit that buried it.">
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>
    <div class="mode-container">
      <input type="radio" name="theme" id="theme-auto" checked>
      <label for="theme-auto" class="auto" title="Auto theme"></label>
      <input type="radio" name="theme" id="theme-light">
      <label for="theme-light" class="light" title="Light theme"></label>
      <input type="radio" name="theme" id="theme-dark">
      <label for="theme-dark" class="dark" title="Dark theme"></label>
    </div>
    <div class="top-bar" role="navigation">
      <a href="../../index.html" title="Main page"><img src="../../c/sigma.svg" alt="Main page"></a>
      <a href="../../about.html" title="About"><img src="../../c/news.svg" alt="About"></a>
      <a href="#" title="Code"><img src="../../c/code.svg" alt="Code"></a>
      <a href="../../pics.html" title="Photography"><img src="../../c/camera.svg" alt="Photography"></a>
      <a href="#" title="Pictures"><img src="../../c/picture.svg" alt="Pictures"></a>
      <a href="../../vids.html" title="Videos"><img src="../../c/video.svg" alt="Videos"></a>
      <a href="#" title="Donations"><img src="../../c/beer.svg" alt="Donations"></a>
      <a href="#" title="Social"><img src="../../c/elephant.svg" alt="Social"></a>
    </div>
    <h1>Graveyard</h1>
    <pre class="stat">  File: <a href="../../blog.html">/n/kris/blog</a>/graveyard
  Size: 2263 words
Access: (0644/-rw-r--r--)  Uid: (1000/kris)  Gid: (100/users)
Modify: 2026-04-24
Status: <span class="status-growing">growing</span>  confidence: certain  importance: 5
  Tags: personal websites design
</pre>
    <p class="preview">Every page and feature this site ever had and lost. Each one gets a headstone with the dates and the commit that buried it.</p>
    <div class="prose">
<p>This is the graveyard. Every page and major feature that once lived on krisyotam.com and doesn't anymore. The site launched in mid-2025 and spent its first year accumulating things. Then I started killing them. Most recent burials first.</p>
<h3><code>/legal/*</code></h3>
<p><strong>Born:</strong> 2025-10-24
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>Ten legal documents: accessibility statement, affiliate disclosure, AI transparency notice, code licensing, cookie/tracking notice, copyright statement, disclaimers, DMCA policy, privacy policy, terms of use. Each was a <code>.ms</code> file rendered through a custom PDF viewer component. I wrote them because I thought a serious site needed them. It didn't.</p>
<h3><code>/rules-of-the-internet</code></h3>
<p><strong>Born:</strong> 2025-10-24
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>A searchable, scrollable list of the Rules of the Internet. Each rule had an explanation tooltip. Pulled data from reference.db. Supported lazy loading (50 at a time) with infinite scroll. It was fun to build. Nobody visited it.</p>
<table>
<tr><td>#</td><td>Rule</td></tr>
<tr><td>0</td><td>Don't fuck with cats.</td></tr>
<tr><td>1</td><td>You don't talk about /b/.</td></tr>
<tr><td>2</td><td>You DON'T talk about /b/.</td></tr>
<tr><td>3</td><td>We are Anonymous.</td></tr>
<tr><td>4</td><td>We are legion.</td></tr>
<tr><td>5</td><td>We do not forgive, we do not forget.</td></tr>
<tr><td>6</td><td>Anonymous can be a horrible, senseless, uncaring monster.</td></tr>
<tr><td>7</td><td>Anonymous is still able to deliver.</td></tr>
<tr><td>8</td><td>There are no real rules about posting.</td></tr>
<tr><td>9</td><td>There are no real rules about moderation either — enjoy your ban.</td></tr>
<tr><td>10</td><td>/b/ is not your personal army.</td></tr>
<tr><td>11</td><td>No matter how much you love debating, keep in mind that no one on the internet debates. Instead they mock your intelligence as well as your parents.</td></tr>
<tr><td>12</td><td>Anything you say can and will be used against you.</td></tr>
<tr><td>13</td><td>Anything you say can and will be turned into something else.</td></tr>
<tr><td>14</td><td>Do not argue with trolls—it means they win.</td></tr>
<tr><td>15</td><td>The harder you try, the harder you will fail.</td></tr>
<tr><td>16</td><td>If you fail in epic proportions, it may just become a winning failure.</td></tr>
<tr><td>17</td><td>Every win fails eventually.</td></tr>
<tr><td>18</td><td>Everything that can be labelled can be hated.</td></tr>
<tr><td>19</td><td>The more you hate it, the stronger it gets.</td></tr>
<tr><td>20</td><td>Nothing is to be taken seriously.</td></tr>
<tr><td>21</td><td>Original content is original only for a few seconds before it's no longer original.</td></tr>
<tr><td>22</td><td>Copypasta is made to ruin every last bit of originality.</td></tr>
<tr><td>23</td><td>Copypasta is made to ruin every last bit of originality.</td></tr>
<tr><td>24</td><td>Every post is always a repost of a repost.</td></tr>
<tr><td>25</td><td>Relation to the original topic decreases with every single post.</td></tr>
<tr><td>26</td><td>Any topic can be easily turned into something totally unrelated.</td></tr>
<tr><td>27</td><td>Always question a person's sexual preferences without any real reason.</td></tr>
<tr><td>28</td><td>Always question a person's gender - just in case it's really a man.</td></tr>
<tr><td>29</td><td>On the internet men are men, women are also men, and kids are undercover FBI agents.</td></tr>
<tr><td>30</td><td>Girls do not exist on the internet.</td></tr>
<tr><td>31</td><td>Tits or GTFO—the choice is yours.</td></tr>
<tr><td>32</td><td>You must have pictures to prove your statements/Anything can be explained with a picture.</td></tr>
<tr><td>33</td><td>Lurk more—it's never enough.</td></tr>
<tr><td>34</td><td>If it exists, there is porn of it. No exceptions.</td></tr>
<tr><td>35</td><td>If there is no porn of it, porn will be made of it.</td></tr>
<tr><td>36</td><td>No matter how fucked up it is, there is always worse than what you just saw.</td></tr>
<tr><td>37</td><td>You cannot divide by zero (just because the calculator says so).</td></tr>
<tr><td>38</td><td>No real limits of any kind apply here—not even the sky.</td></tr>
<tr><td>39</td><td>CAPS LOCK IS CRUISE CONTROL FOR COOL.</td></tr>
<tr><td>40</td><td>EVEN WITH CRUISE CONTROL YOU STILL HAVE TO STEER</td></tr>
<tr><td>41</td><td>Desu isn't funny. Seriously guys. It's worse than Chuck Norris jokes.</td></tr>
<tr><td>42</td><td>Nothing Is Sacred.</td></tr>
<tr><td>43</td><td>The more beautiful and pure a thing is—the more satisfying it is to corrupt it.</td></tr>
<tr><td>44</td><td>If it exists, there is a version of it for your fandom... and it has a wiki and possibly a tabletop version with a theme song performed by a Vocaloid.</td></tr>
<tr><td>45</td><td>When one sees a lion, one must get in the car.</td></tr>
<tr><td>46</td><td>The internet is SERIOUS FUCKING BUSINESS.</td></tr>
<tr><td>47</td><td>The pool is always closed.</td></tr>
<tr><td>48</td><td>The only good hentai is Yuri, that's how the internet works. Only exception may be Vanilla.</td></tr>
<tr><td>49</td><td>No matter what it is, it is somebody's fetish.</td></tr>
<tr><td>50</td><td>A Crossover, no matter how improbable, will eventually happen in Fan Art, Fan Fiction, or official release material, often through fanfiction of it.</td></tr>
<tr><td>61</td><td>Chuck Norris is the exception, no exceptions.</td></tr>
<tr><td>62</td><td>It has been cracked and pirated. You can find anything if you look long enough.</td></tr>
<tr><td>63</td><td>For every given male character, there is a female version of that character (and vice-versa). And there is always porn of that character.</td></tr>
<tr><td>64</td><td>If it exists, it has "LOOOOORRRREE!"</td></tr>
<tr><td>65</td><td>If it doesn't, there will be.</td></tr>
<tr><td>66</td><td>The longer the LORE around something is, the weirder it gets.</td></tr>
<tr><td>67</td><td>If it has lore, it also has lore from alternate timelines, especially if the main lore is copyrighted by a big power hungry corporation.</td></tr>
<tr><td>67/2</td><td>90% of fanfiction is the stuff of nightmares.</td></tr>
<tr><td>68</td><td>Everything has a fandom, everything.</td></tr>
<tr><td>69</td><td>Nice!</td></tr>
<tr><td>70</td><td>Do not talk about the 100M GET failure.</td></tr>
<tr><td>72</td><td>If a song exists, there's a Megalovania version of it.</td></tr>
<tr><td>77</td><td>The Internet makes you stupid.</td></tr>
<tr><td>78</td><td>If something is popular, there's brainrot of it</td></tr>
<tr><td>79</td><td>If something is popular, and there's no brainrot of it, it's coming soon</td></tr>
<tr><td>80</td><td>Gore is always present on the internet.</td></tr>
<tr><td>86</td><td>If something has two colors, it can play "Bad Apple!"</td></tr>
</table>
<h3><code>/cards</code></h3>
<p><strong>Born:</strong> 2026-02-13
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>The 404 gacha card collection. Every time you hit a 404, the site would deal you a random card with a quote, a rarity tier, and pull probabilities. This page was the index: all your cards displayed in a searchable grid with tier filters, status banners, and inline audio players. Image and video cards both supported.</p>
<h3><code>/subscribe</code></h3>
<p><strong>Born:</strong> 2025-12-27
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>A page embedding three Substack newsletters: krisyotam, towardavantgarde, varianotanda. Had a search bar to filter between them, which is a strange thing to need when there are only three items.</p>
<h3><code>/projects</code></h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>An index page for workbooks, textbooks, and courses. Pulled data from <code>getWorkbooks()</code>, <code>getTextbooks()</code>, <code>getCourses()</code>. Never had enough content to feel like a real page.</p>
<h3><code>/domains</code></h3>
<p><strong>Born:</strong> 2026-03-31
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>Not internet domains. This was a knowledge domain graph for tracking math study progress. A full canvas-based visualization: color-coded categories (Early Elementary through Calculus), mastery levels per topic (none through mastered), prerequisite chains, BFS pathfinding between topics, critical path computation, drag-to-pan, scroll-to-zoom, click-to-select. 650 lines of client code, 269 lines of CSS, a dedicated SQLite database (domains.db, 417KB). It tracked study sessions with timestamps and durations, stored resources per topic, and mapped cross-domain connections. The most complex single-page feature the site ever had. Lived 23 days.</p>
<h3><code>/library/*</code></h3>
<p><strong>Born:</strong> 2025-10-24
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>A catalog of my physical book collection and films, organized by Library of Congress classification. Hierarchical navigation: classification, subclassification, then individual title pages. Book detail pages (452 lines) and film detail pages (291 lines). Custom CSS. Had its own description: "a catalog of my personal physical library." The reading page survived; this didn't.</p>
<h3><code>/music/*</code></h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>Playlist browser with grid and list views, genre filtering, search. Normalized data from an external API, displayed cover art, linked out to Spotify and Tidal. Had a toggle between grid and list layout. 133 lines of client code plus the playlist components.</p>
<h3><code>/university/*</code></h3>
<p><strong>Born:</strong> 2026-03-12
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>A full academic section: <code>/university</code> landing, <code>/degrees</code>, <code>/lectures</code>, <code>/lectures/[slug]</code>, <code>/syllabi</code>. Lecture detail pages had download buttons and password-protected content. An API route handled lecture downloads. Lived about six weeks.</p>
<h3>Slashpages (9)</h3>
<p><strong>Born:</strong> ~2025-2026
<strong>Died:</strong> 2026-04-23 <code>f061744</code></p>
<p>appearances, elsewhere, groceries, nope, orders, pfp, verify, wish, yep. Single-purpose pages at vanity URLs. Most were half-filled or empty.</p>
<h3>Family Tree</h3>
<p><strong>Born:</strong> 2025-05-07
<strong>Died:</strong> 2026-04-23 <code>bd164c1</code></p>
<p>An interactive family tree visualization component. One of the oldest features on the site, predating most of the content system. Had no links pointing to it from anywhere else on the site by the time it was removed.</p>
<h3><code>/changelog</code></h3>
<p><strong>Born:</strong> 2025-05-21
<strong>Died:</strong> 2026-04-13 <code>994b9b1</code></p>
<p>A changelog page for site updates. Had its own route, a command menu entry, static metadata, a utils endpoint, and a path in the 404 suggester. All of it deleted. Replaced with a changelog panel inside the settings menu, reconstructed from 51 git log entries going back to 2019.</p>
<h3>Usenet Viewer (<code>/src/usenet/*</code>)</h3>
<p><strong>Born:</strong> 2026-04-11
<strong>Died:</strong> 2026-04-11 <code>da2a55f</code></p>
<p>A Usenet group and article browser with Plan 9 aesthetic. Five route files, custom CSS, an API wrapper. Added and removed in the same day. Replaced with static HTML served by nginx.</p>
<h3>Notes Content Type (<code>/notes</code>)</h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-04-07 <code>79a505d</code></p>
<p>The entire notes content type. 95 notes migrated to blog, 13 blog posts promoted to essays, notes table dropped from the database. Not so much a death as an organ donation. The command menu "Notes" entry now links out to notes.krisyotam.com.</p>
<h3><code>/type</code></h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-03-29 <code>2ed900a</code></p>
<p>An interactive typing speed test. 624 lines of client code. Moved to type.krisyotam.com as its own service.</p>
<h3>Weather Widgets</h3>
<p><strong>Born:</strong> 2026-03-27
<strong>Died:</strong> 2026-03-29 <code>ee846a6</code></p>
<p>The weather page launched with a three-column layout packed with sidebar widgets: ISS tracker, aurora/northern lights, planet cards for Jupiter, Mars, Mercury, Saturn, and Venus, a meteor shower tracker, and a moon phase display. Two days later it got stripped to a single 672px column. The core weather page survived; everything decorative around it didn't.</p>
<h3><code>/gallery</code></h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-03-27 <code>8a75dbc</code></p>
<p>Image gallery with a grid view, lightbox modal, animation variants, a download helper, and a last-viewed-photo hook. Seven files. Replaced by photos.krisyotam.com.</p>
<h3><code>/videos</code> and <code>/art</code></h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-03-27 <code>dc1e162</code></p>
<p>Two media pages. Art had a masonry grid layout with detail pages per piece. Videos had its own client page and layout. Both had database tables in system.db and media.db. Replaced by photos.krisyotam.com.</p>
<h3><code>/tools</code></h3>
<p><strong>Born:</strong> 2026-03-26
<strong>Died:</strong> 2026-03-27 <code>c83c0f6</code></p>
<p>Renamed to <code>/scripts</code> after one day. Same content, suckless naming.</p>
<h3>Supabase Reactions</h3>
<p><strong>Born:</strong> 2025-12-30
<strong>Died:</strong> 2026-03-25 <code>0d8f3b3</code></p>
<p>The last third-party data service. Supabase handled post reactions and comments. The client library (supabase.ts, 40 lines) and the @supabase/supabase-js dependency were deleted. Reactions moved to self-hosted SQLite (interactions.db). All data on own infrastructure now.</p>
<h3><code>/portfolio</code></h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-03-18 <code>8738f2c</code></p>
<p>A tabbed portfolio page with sections for posts, projects, CV, and about. Had its own hero component, a client-side CV viewer with section navigation (experience, education, skills, projects, certifications), and an about.mdx content file. Seven components in src/components/portfolio/. Portfolio CSS ran 288 lines.</p>
<h3><code>/shop</code></h3>
<p><strong>Born:</strong> pre-2026 (restructured 2026-01-16)
<strong>Died:</strong> 2026-03-18 <code>8738f2c</code></p>
<p>An online shop with eight categories: books, essays, courses, digital, prints, dropcaps, apparel, accessories. Each item had a name, price, payment URL, image, and aspect ratio. Search and category filtering. The infrastructure was there. The inventory wasn't.</p>
<h3>Object Storage Routes</h3>
<p><strong>Born:</strong> pre-2026
<strong>Died:</strong> 2026-01-14 <code>9f367da</code></p>
<p>Next.js API routes that proxied <code>/doc</code>, <code>/src</code>, and <code>/archive</code> paths to Hetzner S3 object storage. Replaced by nginx serving local files directly from STARGATE. The commit also rewired the nginx config for self-hosting: www redirect, /doc directory listing with autoindex, Tor hidden service block, proxy to Next.js on port 3080.</p>
<h3>Magic URLs</h3>
<p><strong>Born:</strong> 2025-10-24
<strong>Died:</strong> 2026-01-06 <code>fc11786</code></p>
<p>A system in proxy.ts that intercepted certain URL patterns and routed them through a magic-urls API. Replaced by the <code>[slug]</code> catch-all route (191 lines added in the same commit), which became the foundation for the sexy URL system.</p>
<h3><code>/cv</code></h3>
<p><strong>Born:</strong> 2024-07-26
<strong>Died:</strong> 2025-12-18 <code>465c928</code></p>
<p>A full CV page with framer-motion animations, section tabs (experience, education, skills, projects, certifications), and a gradient background. Pulled data from a <code>cv</code> data file. One of the oldest pages on the site.</p>
<h3><code>/resume</code></h3>
<p><strong>Born:</strong> ~2025
<strong>Died:</strong> 2025-12-18 <code>465c928</code></p>
<p>Companion to /cv. Removed in the same commit.</p>
<h3><code>/directory</code></h3>
<p><strong>Born:</strong> ~2025
<strong>Died:</strong> 2025-12-18 <code>465c928</code></p>
<p>A site directory page. Listed every page on the site with search, filtering, and category headers. 141 lines of client code, 155 lines of CSS. Showed title, subtitle, date, preview, status, confidence, and importance for each page.</p>
<h3><code>/lecture-notes</code></h3>
<p><strong>Born:</strong> ~2025
<strong>Died:</strong> 2025-12-18 <code>465c928</code></p>
<p>A lecture notes browser with category pages and individual note detail pages. Had password-protected downloads, a help dialog, and badge-based status indicators. 206 lines for the index, 146 lines for the detail view. Pulled from a JSON data file.</p>
    </div>
  </body>
</html>