diff --git a/content/about-treehouse.tree b/content/about-treehouse.tree
index 9188d39..2f807a3 100644
--- a/content/about-treehouse.tree
+++ b/content/about-treehouse.tree
@@ -145,7 +145,7 @@
+ ### the treehouse is a mostly statically generated website
% id = "01H89RFHCQ2GWJPTAKTRGS1QAC"
- - weird poems and philosophical talk are over, it's time to focus on the tech.
+ + weird poems and philosophical talk are over, it's time to focus on the tech.
% id = "01H8V55APDEF8WTQ3KFC7E9HWB"
- call this an overview, Defense of Design, or what have you
@@ -170,14 +170,14 @@
- (yes, I know that website is super old, but I still find it incredibly funny :hueh:)
% id = "01H89RFHCQRA4BBBWDC8K68BB0"
- - if you wanna browse the source code, feel free to [check it out on GitHub][def:treehouse/repo]
+ - if you wanna browse the source code, feel free to [check it out here][def:treehouse/repo]
% id = "01H89RFHCQFWC2FWBAE9PVNC08"
- as I alluded to [here][branch:01H89RFHCQ3EAP0F6PRSEK7S1T], treehouse is built to decay gracefully
as you take away the fancy parts.
% id = "01H8V55APDMPF3WFTNTFSYBQRF"
- - you will be able to read it just fine without JavaScript, just that it'll be a little
+ + you will be able to read it just fine without JavaScript, just that it'll be a little
less pleasant.
% id = "01H8V55APD1RSSRMDZ3CEE9S9C"
@@ -220,7 +220,7 @@
janky, but the content should still be fully readable.
% id = "01H8V55APDWN8TV31K4SXBTTWB"
- - myself, I'm writing this content in a bespoke format called `.tree`.
+ + myself, I'm writing this content in a bespoke format called `.tree`.
% id = "01H8V55APDGX4EYV8W7ECXZ6FP"
- the structure of `.tree` files is extremely minimal. there are only a few syntactic features to speak of.
@@ -229,7 +229,7 @@
- here's a taste of `.tree`:
% id = "01H8V55APD5686J8GTXP118V8E"
- - ```
+ - ```treehouse
% id = "root"
- this is a branch
@@ -276,10 +276,10 @@
- …actually, that's a lie. see that code example above? Markdown code fences \`\`\` are handled specially to let embed `.tree` source code blocks within `.tree` files. that's all.
% id = "01H8V55APDVQB6AD23Y6PZPPB8"
- - you may have noticed in that code example above that almost every branch has an `id` attribute.
+ - every branch in the treehouse has a globally unique ID.
% id = "01H8V55APD4H5JT8NTYCCTN77G"
- - this is because I want every branch to be individually linkable and quotable.
+ + this is because I want every branch to be individually linkable and quotable.
% id = "01H8V55APDPSZNP9AK7QRK62BG"
- if you ever want to link anything I said in an argument online: hover over a branch, right-click that little _permalink_ icon that's on the right side of the screen, and _Copy Link_.
@@ -288,7 +288,7 @@
- but manually coming up with ids for branches would be quite the nuisance.
% id = "01H8V55APDXV0KRVEF9PTA72J7"
- - that's why with the power of Tools Programming™, I built a tool that fills out all the ids for me.
+ + that's why with the power of Tools Programming™, I built a tool that fills out all the ids for me.
% id = "01H8V55APD8VG7WE6JX5JBDJEC"
- I chose [ulids](https://github.com/ulid/spec) for generated ids, for a few reasons:
@@ -324,10 +324,20 @@
- which is cool because it's much denser while avoiding ambiguous characters - `0`, `O`, and `o` are all interpreted as `0` (zero).
% id = "01H8V55APDXT064G9PA78JW0CM"
- - noticed how fast the treehouse restores your state? there's basically no delay.
+ + noticed how fast the treehouse restores your state? there's basically no delay.
% id = "01H8V55APDGS626M5Y6DDAS9ZE"
- - this is because it restores your state _as it's loading in_, by using [Web Components](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements).
+ + this is because it restores your state _as it's loading in_, by using a [`MutationObserver`](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver).
+
+ % id = "01J09E55GTGHTGJP3JQN1SY4BM"
+ - initially the treehouse used Web Components, but for Webkit compatibility reasons, I had to switch that out to a more bespoke solution.
+
+ % redirect_here = ["01H8V55APD4V54M2EKQKQ4GNP8"]
+ id = "01J09E55GTFSQW46JSG3T3SSMQ"
+ - elements such as linked branches are implemented using _spells_, which are a custom framework for composing behaviors on top of existing elements.
+
+ % id = "01J09E55GTHJXWRG0P9MADASRQ"
+ + in addition to that, many things on the treehouse are Web Components, which are another awesome API that lets you prepare the DOM as soon as everything is ready.
% id = "01H8V55APD73AG65NP2VGX6169"
- despite many people calling that API extremely low-level, I beg to differ. it's actually pretty easy and pleasant to use.
@@ -335,20 +345,17 @@
% id = "01H8V55APDDHYNRZXQDEG0A242"
- most importantly it lets me enhance vanilla `
` elements with custom behavior executed on load, which I use to restore your reading progress as the page is loading in.
- % id = "01H8V55APD4V54M2EKQKQ4GNP8"
- - linked branches also use Web Components by the way.
-
% id = "01H8V55APDKY0HYEJM2C1CJHEG"
- - while not strictly a technical topic, I'd like to shout out [Recursive](https://recursive.design) for being an awesome font :ralsei_love:
+ + while not strictly a technical topic, I'd like to shout out [Recursive](https://recursive.design) for being an awesome font :ralsei_love:
% id = "01H8V55APD88JCQBQ4SHVCYR97"
- (not to be confused with [Font Awesome](https://fontawesome.com/), which I do not use here. icon designs are my own.)
% id = "01H8V55APD0S00ACN0YY7Y9MSW"
- - being a variable font, I can tweak the text's look and feel on many different axes.
+ + being a variable font, I can tweak the text's look and feel on many different axes.
% id = "01H8V55APDRG88JRV74MMDTV4J"
- - the one that I wanted to shout out in particular is `CASL`, which lets me make it look a lot more happy and playful.
+ + the one that I wanted to shout out in particular is `CASL`, which lets me make it look a lot more happy and playful.
% id = "01H8V55APDMP5FE9ZCMRACH18W"
+ almost like Comic Sans, but without all the stigma.
@@ -363,7 +370,7 @@
- not everyone runs Windows or macOS, so just assuming the reader has Comic Sans installed isn't ideal.
% id = "01H8V55APD2BPGQXEK7JARYJ9H"
- - ~~in particular the variant on my website is 100% casual (`CASL`), and -2.0 slanted (`slnt`).~~
+ + ~~in particular the variant on my website is 100% casual (`CASL`), and -2.0 slanted (`slnt`).~~
% id = "01H8V55APDXZJE3HHH5AQ8ZQHF"
+ that little bit of slant makes it look just a little more like handwriting.
@@ -384,4 +391,4 @@
- not to mention I'd have to handwrite a lot of text, and *then* either use OCR or type it all out again for accessibility. yeah, no thanks methinks.
% id = "01HRD97CSJSQN78SGM691B6PNQ"
- - UPDATE: not slanted anymore. `slnt` is 0.
+ - NOTE: not slanted anymore. `slnt` is 0.
diff --git a/content/about.tree b/content/about.tree
index 7c7c0c4..b4aa5b8 100644
--- a/content/about.tree
+++ b/content/about.tree
@@ -1,192 +1,169 @@
%% title = "who that! (about me)"
-% id = "01H89P3CH836K8WKQ9BPR6RE3C"
-- hello! I am liquidex
+% id = "01J09B2BZXJ989S2SGWBNZ397C"
++ hello! I am **liquidex**.
- % id = "01H89P3CH8YZY1MTZS3DZGGFKX"
- + also known as…
+ % id = "01J09B2BZX54T2GSP8H3D62S6J"
+ + also known as **liquidex**
- % id = "01H89P3CH8GAHS8DDW1HHEWA3P"
- - **liquidex** (just including this here for linking sake)
+ % id = "01J09B2BZXQ31FV1M3PMM6Q0GX"
+ - this is [the identity function](https://en.wikipedia.org/wiki/Identity_function) applied to my nickname
- % id = "01H89P3CH8ER0M5WZBXQ292A2N"
- - **liquidev** on various [programming-related platforms][def:social/github]
+ % id = "01J09B2BZX0R0AX5QHND6EBRFE"
+ - also known as **liquidev** on [various programming platforms][def:social/github]
- % id = "01H89P3CH8943QGT52K7MRW12Q"
- - **lqdev**, before I realized that name is taken. since then I use liquidev but you may see
- this older name in some places
+ % id = "01J09B2BZXT6AAJNPEQ044KCDR"
+ - also known as **lqdev**, before I realized that name was taken.
+ you may notice this older name in some places.
- % id = "01H89P3CH81FTHTQ552N7N1S3A"
- - **daknus** [on SoundCloud][def:social/soundcloud]
+ % id = "01J09B2BZXBS2K6MRQYXFH43PW"
+ - also known as **daknus** [on SoundCloud][def:social/soundcloud].
+ I use this as my music making alias.
- % id = "01H89P3CH8PB76G26M4T8P6QDZ"
- + **limiter** sometimes jokingly on Discord
+ % id = "01J09B2BZXAD196RA16JTY3K3T"
+ + also known as **limiter**?
- % id = "01H89P3CH8Z4MXQ0C9EWV01DPX"
- + **limitre**, which is British for limiter
+ % id = "01J09B2BZXNRYX758J5S00EZRG"
+ - or **limitre**, which is British for limiter.
- % id = "01H89P3CH8P7HAGDJVGVWD96K7"
- - y'know. like centre is British for center, metre is British for meter? :hueh:
+% id = "01J09B2BZX25TN31D0F18YQPB2"
++ I'm a *he/him*-type cat person doing various stuff with computers
- % id = "01H89P3CH8FA0JTX1TPRZV4BFM"
- - before you ask, pronouns are _he/him_
+ % id = "01J09B2BZXWB695M9XYF7CZ2ZF"
+ - > you said cat person, does that mean you don't like dogs?
- % id = "01H89P3CH8A12NYRT3SC324Y2M"
- - I'm a programmer from Poland
+ % id = "01J09E55G0QWS7X0YNBWRW222X"
+ - I prefer cats myself. though foxes are canids and I consider them pretty cute :smile:
- % id = "01H89P3CH8VN1MPKS4RQFFW778"
- + I work in the game industry
+ % id = "01J09E55G0MZ0WFQ3WC98YDDGT"
+ - > unless by *cat person* you mean…
- % id = "01H89P3CH88PKW82498V91VZ4W"
- + somehow my skills brought me to work as a game programmer at CD PROJEKT RED
+ % id = "01J09E55G0YWYMAP62Q7AM18BE"
+ + what? :clueless:
- % id = "01H89P3CH8SPX5RZDWR00CZ436"
- + not sure how that happened still so don't ask
+ % id = "01J09E55G09K80E6YE1T4E3KJJ"
+ - > y'know… like a *furry*?
- % id = "01H8YJDNJFB2BGT0ASDNM8S4JJ"
- - impostor syndrome going hard right now
+ % id = "01J09E55G0F5TVAK2MT80H598M"
+ + :clueless:
- % id = "01H89P3CH8QSQY1M7TZVH1FYQM"
- - but that game programming thing is just coincidence, in reality I love toying with
- computers in general
+ % id = "01J09E55G0WS63QCFBPP12EMRM"
+ + …
- % id = "01H89P3CH8TACWXWWZGGHQD2MK"
- - so you may see me doing other random and weird stuff
+ % id = "01J09E55G0H58Q8V8NV23QSQGC"
+ - huh. you're still here? :ahyes:
- % id = "01H89P3CH89P2Q9XGQD7BCF0R6"
- - perhaps [compilers][def:stitchkit/repo] are one of those weird things
+ welcome to the club!
- % id = "01H89P3CH8DYZHMQTGZDAEBNXN"
- + or [audio][def:dawd3/repo]
+ unfortunately I've got no fursona to show off at this moment, please come back later.
- % id = "01H89P3CH859AAGFEABN8EANSJ"
- - my favorite part of that is blowing my own eardrums out with my math skill, which is rather *underdeveloped* so to speak
+% id = "01J09B2BZX9QV3PM9YWPS628PJ"
++ I'm a game developer by trade :rarog:
- % id = "01H89P3CH8R9WKSMMQVY0XARSF"
- + heck even web development out of all things. I mean you're reading _my_ website right
- now after all
+ % id = "01J09B2BZXNE1H2SXW9KSZK7Z5"
+ + I do various developer productivity-related stuff at CD PROJEKT RED, mostly focusing on the DX of delivering breathtaking games using the Unreal Engine.
- % id = "01H89P3CH88M1GZ3WN3RXCW1NN"
- - like truly *my my* website with *my own* backend, static generator, and all that
+ % id = "01J09B2BZX00X6A8Z6H4R16BDS"
+ - technically I don't really love *playing* big and serious games, but making one is a whole other challenge - a challenge of *scale*.
+ which is what really gets me going!
- % id = "01H89P3CH8CFBVXBF5W3GYA70X"
- - none of that pre-built stuff, this baby is generated from the *purest* samples
- of Uranium-235 I could source
+% id = "01J09B2BZXQKWYHC51D7QCJ6PF"
+- other than game development, I program various other things…
- % id = "01H89P3CH8HYM5XZRH56880TP5"
- - … wait you're saying building your own nuclear reactor at home is illegal? UHHHHHHHHHH
+ % id = "01J09B2BZXRE1VPASMR52RWNTH"
+ - [compilers][def:stitchkit/repo],
- % id = "01H89P3CH8EGD14MHJEET6MJ27"
- - who knows at this point
+ % id = "01J09B2BZXYXA16X95H2JKDJNK"
+ + [audio][def:dawd3/repo],
- % id = "01H89P3CH8RFRCTC500059H5G8"
- - apart from programming I also take interest in other various things
+ % id = "01J09B2BZXY51P9D4BM8AADGYW"
+ - my favorite part of that is blowing out my own eardrums with my math skill, which is rather *underdeveloped* so to speak,
- % id = "01H89P3CH864VWM4JXQ0N5C1YV"
- - like video games
+ % id = "01J09B2BZX2P7XDH81BJ079PCP"
+ + [websites](/),
- % id = "01H89P3CH8WK8F2XKBXFVE8KNX"
- - yeah those are pretty great aren't they
+ % id = "01J09B2BZXN6GWK2JPC7YGT0E1"
+ + after all the treehouse is *my* website, with *my* own backend, static generator, *my* own design, [an only partially stolen color scheme](https://github.com/ayu-theme/ayu-colors), and most important, lots of fun stuff hidden underneath the surface.
- % id = "01H89P3CH817HEVWCFHGJEGQHR"
- - my faves are:
+ % id = "01J09B2BZXZAEPD36XG495WYFH"
+ + like have you wondered just how deep the rabbit hole goes?
+ I'm sure you can find some rather interesting easter eggs in there if you look hard enough.
+ who knows what you may find?
- % id = "01H89P3CH8MHZMYKRFV30GSYWC"
- - [A Hat in Time](https://hatintime.com)
+ % id = "01J09B2BZX0M925RBXR023XM6X"
+ -
- % id = "01H89P3CH8G625Q1NQVT8CJ3K1"
- - [DELTARUNE](https://deltarune.com)
+ % id = "01J09B2BZXX2R1TH10GGZC25KG"
+ + you name it. as long as it poses a cool and fun challenge, I'll be on it :verified:
- % id = "01H89P3CH89TQ3SFG2Z40J29HX"
- - they're pretty great you should check them out
+ % id = "01J09B2BZX5WED9XE2RAADFW8M"
+ - there's probably only one thing I *don't* like and it's backend web development. where did all the simplicity go?
- % id = "01H89P3CH8AJATQ5DJBBFXJ1NH"
- - or [music][page:music]
+ % id = "01J09B2BZXQQMPDYQJ052131GT"
+ - obviously treehouse is a very simple website with a very simple backend, but. seriously.
+ why do people have to make websites be so complicated. and slow.
- % id = "01H89P3CH8XQ59YZD3RFRYQ2BM"
- - various genres from electronic through jazz and even rock
+% id = "01J09B2BZXS6NZKYS6CTWMG1QY"
+- and other than programming, I do various other things…
- % id = "01H89P3CH8V8H7BVWYTFHYQQTZ"
- - in that order of priority
+ % id = "01J09B2BZXX9PFV33J591B3C9K"
+ + like video games! those are pretty great, aren't they?
- % id = "01H89P3CH8ZMVBKS6CXGRB8QHB"
- - electronic definitely leaning toward the more um, _eccentric_ side
+ % id = "01J09B2BZXDB8CZK0X6JMRMNR1"
+ + my favorites are :hueh: [A Hat in Time](https://hatintime.com) and :nap: [DELTARUNE](https://deltarune.com).
+ if you haven't played them yet, I highly recommend checking them out!
- % id = "01H89P3CH836WYRR77815D8HCH"
- - all you have to know is I listen to Venetian Snares pretty regularly
+ % id = "01J09B2BZX9CM8B5G42E2KYDBT"
+ - (you may wanna check out [UNDERTALE](https://undertale.com/) before you play Deltarune though.)
- % id = "01H89P3CH8C719GX9CTK36FXXN"
- + if you don't know what that means then good for you
+ % id = "01J09B2BZXYCRJDVJAVYT1P50P"
+ + [music][page:music] is also cool.
+ did you know I listen to a lot of [music][page:music]?
+ and I mean, [a lot of ][def:social/listenbrainz][music][page:music]!
- % id = "01H8V55G7M7KEKBYX2D2RP9QQE"
- + but if you so insist… [you have been warned](https://www.youtube.com/watch?v=BB7ExLcUuH0)
+ % id = "01J09B2BZX5C2KBA2ZC0X0YYD6"
+ -
- % id = "01H8V55G7MWC7MQ9YQVDDFZ9QV"
- - (this is one of the more crazy ones anyways. he makes some [more normal stuff](https://www.youtube.com/watch?v=IuI6MMUtNdU) too if you care)
+ % id = "01J09B2BZX39FGP634BM5HJ0FD"
+ + did I mention [music][page:music]?
+ I also ~~aspire to~~ [make ][def:social/soundcloud][music][page:music][ sometimes][def:social/soundcloud].
- % id = "01H89P3CH8XP6ZA1RWYVZWRXN3"
- - jazz and rock I don't really know as well but I've been trying to broaden my
- horizons a bit
+ % id = "01J09B2BZXGG5HYVYDNPVFRKY1"
+ - I say aspire because I'd really like to be better at it, but *time*, man…
- % id = "01H89P3CH8EYKDYN83VPQQ088C"
- + I really like artists who merge them with elements of electronic music
+ % id = "01J09B2BZXY6AN3242DYECK74Z"
+ + from time to time I also try to draw things, but *time*, it's killing me, man…
- % id = "01H89P3CH8G5CFPME3Z88GNDD8"
- - ~~while the music corner is under construction I can recommend [Elaenia by Floating Points](https://floatingpoints.bandcamp.com/album/elaenia)
- as a good example of that~~ the music corner is no longer under construction. go [check it out][page:music]!
+ % id = "01J09B2BZXN3263NEHCKQ931TS"
+ - I'm sure one day you'll see the results of my practice, (unless you've already seen them :ralsei_wave:,) but for now I keep them largely to myself.
- % id = "hello"
- - feel free to come up to me and say hi!
+% id = "hello"
++ if all that sounds like an interesting bunch of words, feel free to come up to me and say hi!
- % id = "01H89P3CH823H89YQJKH9DWMW9"
- - I would love to make some new friends :ralsei_love:
+ % id = "01J09B2BZXEVKP4AM4NJ0ZY8VJ"
+ - I'd love to make some new friends :ralsei_love:
- % id = "01H89P3CH8ZQ11ABP0YW86APN7"
- - in person I'm pretty much exactly as on this website lol
+ % id = "01J09B2BZXMMYDQG3SD6KK8M5H"
+ - you can reach out to me via
- % id = "01H89P3CH8DHJC5BJMHVBMDAXS"
- - like this website is literally meant to be a reflection of my personality and a literal braindump
+ % id = "01J09B2BZXZQSRXV8EHT68YE7M"
+ - Discord - username is [this][branch:01J09B2BZX54T2GSP8H3D62S6J]
- % id = "01H89P3CH80XYPAHXH1QZJ9SMZ"
- + so I type here like I would type on some chat platform. but it's a tree, just like Reddit!
+ % id = "01J09E55G1DB0RCJ2Z0DND38KF"
+ - Matrix - username is [this][branch:01J09B2BZXT6AAJNPEQ044KCDR]
- % id = "01H8V55G7MS3NBPFFFKYE8YGFK"
- - except on chat I don't capitalize "I" so if that pisses you off you may wanna brace yourself (or just tell me, I'll do my best to adapt)
+ % id = "01J09E55G1VQ1K14BZ1QW1X2CA"
+ + email - for people, it's under this domain and is `hi`
- % id = "01H9DAJRZDNS9MSC9SK6HTEX2Z"
- - and Reddit sucks!
+ % id = "01J09E55G1AE9HZZYV2A7S8FR7"
+ - if you're not a person you can, I dunno.
+ what do robots like doing?
- % id = "01H89P3CH8CD28KGX9GVRFK60E"
- - anyways you can find me on
+ % id = "01J09E55G1AGZ51ZV5ZGFMF78H"
+ - listen I'm trying to ward off spam with this weird wording, but I bet you can figure out my email adddress from this pretty easily.
- % id = "01H89P3CH8EMM31JEMJRVRAKF4"
- + Discord - username is [this][branch:01H89P3CH8GAHS8DDW1HHEWA3P]
+ % id = "01J09E55G1XKF12N27Y8TCMQPY"
+ - if not then my email is not that hard to find in other places.
- % id = "01H89P3CH89HHDVHGB9GE287TR"
- - I'm most active there so you'll have the best chance of getting a reply
-
- % id = "01H89P3CH8FBBJ6FKDCYDMD3T5"
- - you'll know it's me if you see a profile with a fluffy boy avatar
-
- % id = "01H89P3CH8WTBKXP0GGN0HYQK2"
- + Matrix - username is [this][branch:01H89P3CH8943QGT52K7MRW12Q] at gacko.pl
-
- % id = "01H89P3CH832E4GK0NJ77KED06"
- - I try to be as active there as on Discord but my availability may be a little more
- limited
-
- % id = "01H89P3CH8A31GJE0A0JTMK00B"
- - just don't forget to wave at me when you do! I need to tell you apart from bots somehow
-
- % id = "01H89P3CH8R323RCDZAG6Y6C1X"
- - my email for people is under this domain and is `hi`
-
- % id = "01H89P3CH8TAC5AB4QVA3E2Z0E"
- - if you are not a person you can, I dunno. what do robots like doing?
-
- % id = "01H89P3CH8QTANJJ5F1E4GCBNK"
- - listen I'm trying to ward off the spam with this weird wording but I bet you can
- figure out my email address from this pretty easily
-
- % id = "01H89P3CH80QR285WFDTK5X5VF"
- - if not then look at my GitHub it also has an email address
+ % id = "01J09E55G1T4PPVBXH7PSR8ZNY"
+ - just don't forget to wave at me if you do - I need to tell you apart from bots somehow!
diff --git a/content/about/v1.tree b/content/about/v1.tree
new file mode 100644
index 0000000..abf0848
--- /dev/null
+++ b/content/about/v1.tree
@@ -0,0 +1,192 @@
+%% title = "who that! (about me) (version 1, archived 2024-06-13)"
+
+% id = "01H89P3CH836K8WKQ9BPR6RE3C"
+- hello! I am liquidex
+
+ % id = "01H89P3CH8YZY1MTZS3DZGGFKX"
+ + also known as…
+
+ % id = "01H89P3CH8GAHS8DDW1HHEWA3P"
+ - **liquidex** (just including this here for linking sake)
+
+ % id = "01H89P3CH8ER0M5WZBXQ292A2N"
+ - **liquidev** on various [programming-related platforms][def:social/github]
+
+ % id = "01H89P3CH8943QGT52K7MRW12Q"
+ - **lqdev**, before I realized that name is taken. since then I use liquidev but you may see
+ this older name in some places
+
+ % id = "01H89P3CH81FTHTQ552N7N1S3A"
+ - **daknus** [on SoundCloud][def:social/soundcloud]
+
+ % id = "01H89P3CH8PB76G26M4T8P6QDZ"
+ + **limiter** sometimes jokingly on Discord
+
+ % id = "01H89P3CH8Z4MXQ0C9EWV01DPX"
+ + **limitre**, which is British for limiter
+
+ % id = "01H89P3CH8P7HAGDJVGVWD96K7"
+ - y'know. like centre is British for center, metre is British for meter? :hueh:
+
+ % id = "01H89P3CH8FA0JTX1TPRZV4BFM"
+ - before you ask, pronouns are _he/him_
+
+ % id = "01H89P3CH8A12NYRT3SC324Y2M"
+ - I'm a programmer from Poland
+
+ % id = "01H89P3CH8VN1MPKS4RQFFW778"
+ + I work in the game industry
+
+ % id = "01H89P3CH88PKW82498V91VZ4W"
+ + somehow my skills brought me to work as a game programmer at CD PROJEKT RED
+
+ % id = "01H89P3CH8SPX5RZDWR00CZ436"
+ + not sure how that happened still so don't ask
+
+ % id = "01H8YJDNJFB2BGT0ASDNM8S4JJ"
+ - impostor syndrome going hard right now
+
+ % id = "01H89P3CH8QSQY1M7TZVH1FYQM"
+ - but that game programming thing is just coincidence, in reality I love toying with
+ computers in general
+
+ % id = "01H89P3CH8TACWXWWZGGHQD2MK"
+ - so you may see me doing other random and weird stuff
+
+ % id = "01H89P3CH89P2Q9XGQD7BCF0R6"
+ - perhaps [compilers][def:stitchkit/repo] are one of those weird things
+
+ % id = "01H89P3CH8DYZHMQTGZDAEBNXN"
+ + or [audio][def:dawd3/repo]
+
+ % id = "01H89P3CH859AAGFEABN8EANSJ"
+ - my favorite part of that is blowing my own eardrums out with my math skill, which is rather *underdeveloped* so to speak
+
+ % id = "01H89P3CH8R9WKSMMQVY0XARSF"
+ + heck even web development out of all things. I mean you're reading _my_ website right
+ now after all
+
+ % id = "01H89P3CH88M1GZ3WN3RXCW1NN"
+ - like truly *my my* website with *my own* backend, static generator, and all that
+
+ % id = "01H89P3CH8CFBVXBF5W3GYA70X"
+ - none of that pre-built stuff, this baby is generated from the *purest* samples
+ of Uranium-235 I could source
+
+ % id = "01H89P3CH8HYM5XZRH56880TP5"
+ - … wait you're saying building your own nuclear reactor at home is illegal? UHHHHHHHHHH
+
+ % id = "01H89P3CH8EGD14MHJEET6MJ27"
+ - who knows at this point
+
+ % id = "01H89P3CH8RFRCTC500059H5G8"
+ - apart from programming I also take interest in other various things
+
+ % id = "01H89P3CH864VWM4JXQ0N5C1YV"
+ - like video games
+
+ % id = "01H89P3CH8WK8F2XKBXFVE8KNX"
+ - yeah those are pretty great aren't they
+
+ % id = "01H89P3CH817HEVWCFHGJEGQHR"
+ - my faves are:
+
+ % id = "01H89P3CH8MHZMYKRFV30GSYWC"
+ - [A Hat in Time](https://hatintime.com)
+
+ % id = "01H89P3CH8G625Q1NQVT8CJ3K1"
+ - [DELTARUNE](https://deltarune.com)
+
+ % id = "01H89P3CH89TQ3SFG2Z40J29HX"
+ - they're pretty great you should check them out
+
+ % id = "01H89P3CH8AJATQ5DJBBFXJ1NH"
+ - or [music][page:music]
+
+ % id = "01H89P3CH8XQ59YZD3RFRYQ2BM"
+ - various genres from electronic through jazz and even rock
+
+ % id = "01H89P3CH8V8H7BVWYTFHYQQTZ"
+ - in that order of priority
+
+ % id = "01H89P3CH8ZMVBKS6CXGRB8QHB"
+ - electronic definitely leaning toward the more um, _eccentric_ side
+
+ % id = "01H89P3CH836WYRR77815D8HCH"
+ - all you have to know is I listen to Venetian Snares pretty regularly
+
+ % id = "01H89P3CH8C719GX9CTK36FXXN"
+ + if you don't know what that means then good for you
+
+ % id = "01H8V55G7M7KEKBYX2D2RP9QQE"
+ + but if you so insist… [you have been warned](https://www.youtube.com/watch?v=BB7ExLcUuH0)
+
+ % id = "01H8V55G7MWC7MQ9YQVDDFZ9QV"
+ - (this is one of the more crazy ones anyways. he makes some [more normal stuff](https://www.youtube.com/watch?v=IuI6MMUtNdU) too if you care)
+
+ % id = "01H89P3CH8XP6ZA1RWYVZWRXN3"
+ - jazz and rock I don't really know as well but I've been trying to broaden my
+ horizons a bit
+
+ % id = "01H89P3CH8EYKDYN83VPQQ088C"
+ + I really like artists who merge them with elements of electronic music
+
+ % id = "01H89P3CH8G5CFPME3Z88GNDD8"
+ - ~~while the music corner is under construction I can recommend [Elaenia by Floating Points](https://floatingpoints.bandcamp.com/album/elaenia)
+ as a good example of that~~ the music corner is no longer under construction. go [check it out][page:music]!
+
+ % id = "hello/v1"
+ - feel free to come up to me and say hi!
+
+ % id = "01H89P3CH823H89YQJKH9DWMW9"
+ - I would love to make some new friends :ralsei_love:
+
+ % id = "01H89P3CH8ZQ11ABP0YW86APN7"
+ - in person I'm pretty much exactly as on this website lol
+
+ % id = "01H89P3CH8DHJC5BJMHVBMDAXS"
+ - like this website is literally meant to be a reflection of my personality and a literal braindump
+
+ % id = "01H89P3CH80XYPAHXH1QZJ9SMZ"
+ + so I type here like I would type on some chat platform. but it's a tree, just like Reddit!
+
+ % id = "01H8V55G7MS3NBPFFFKYE8YGFK"
+ - except on chat I don't capitalize "I" so if that pisses you off you may wanna brace yourself (or just tell me, I'll do my best to adapt)
+
+ % id = "01H9DAJRZDNS9MSC9SK6HTEX2Z"
+ - and Reddit sucks!
+
+ % id = "01H89P3CH8CD28KGX9GVRFK60E"
+ - anyways you can find me on
+
+ % id = "01H89P3CH8EMM31JEMJRVRAKF4"
+ + Discord - username is [this][branch:01H89P3CH8GAHS8DDW1HHEWA3P]
+
+ % id = "01H89P3CH89HHDVHGB9GE287TR"
+ - I'm most active there so you'll have the best chance of getting a reply
+
+ % id = "01H89P3CH8FBBJ6FKDCYDMD3T5"
+ - you'll know it's me if you see a profile with a fluffy boy avatar
+
+ % id = "01H89P3CH8WTBKXP0GGN0HYQK2"
+ + Matrix - username is [this][branch:01H89P3CH8943QGT52K7MRW12Q] at gacko.pl
+
+ % id = "01H89P3CH832E4GK0NJ77KED06"
+ - I try to be as active there as on Discord but my availability may be a little more
+ limited
+
+ % id = "01H89P3CH8A31GJE0A0JTMK00B"
+ - just don't forget to wave at me when you do! I need to tell you apart from bots somehow
+
+ % id = "01H89P3CH8R323RCDZAG6Y6C1X"
+ - my email for people is under this domain and is `hi`
+
+ % id = "01H89P3CH8TAC5AB4QVA3E2Z0E"
+ - if you are not a person you can, I dunno. what do robots like doing?
+
+ % id = "01H89P3CH8QTANJJ5F1E4GCBNK"
+ - listen I'm trying to ward off the spam with this weird wording but I bet you can
+ figure out my email address from this pretty easily
+
+ % id = "01H89P3CH80QR285WFDTK5X5VF"
+ - if not then look at my GitHub it also has an email address
diff --git a/content/design.tree b/content/design.tree
index f08886c..842b48e 100644
--- a/content/design.tree
+++ b/content/design.tree
@@ -22,8 +22,8 @@ this branch is about that.
% content.link = "design/sidebars"
id = "01HR9ZTS6T2ZBWGMJP8376NGX1"
-+ sidebars
++ :page: sidebars
% content.link = "design/digital-textures"
id = "01HQ8JHZ5QTZXQW3M26CXPFQDF"
-+ on digital textures
++ :page: on digital textures
diff --git a/content/design/sidebars.tree b/content/design/sidebars.tree
index f894d14..54ef44e 100644
--- a/content/design/sidebars.tree
+++ b/content/design/sidebars.tree
@@ -41,7 +41,7 @@
% id = "01HR9ZTS6PKYGVTFF0F78XVXH2"
- (I'm not saying this structure is any better than a conventional blog though.
it has its own set of challenges you need to take into account while writing, like *when to split*, and *when to nest*.
- arguably, I still haven't learned how to write the treehouse well, but I think I'm getting better at it; compare [about][page:about] to this page and you'll see what I mean.)
+ arguably, I still haven't learned how to write the treehouse well, but I think I'm getting better at it; compare [about (version 1)][page:about/v1] to this page and you'll see what I mean.)
% id = "01HR9ZTS6P484GD6Y9QR4TEGWD"
- I'm glad most individuals' blogs are foregoing sidebars, but unfortunately I still regularly see them on various news sites and older blogs
diff --git a/content/games.tree b/content/games.tree
index bb3196b..53ec10d 100644
--- a/content/games.tree
+++ b/content/games.tree
@@ -1,5 +1,8 @@
% id = "01H9R1NKAXQMXWBA9Z65E4CG2T"
-- sorry, nothing to see here in this section yet!
++ sorry, nothing to see here in this section yet!
+
+ % id = "01J09B24M33NAE3D4VHKTR361J"
+ - (I'm just waiting for DELTARUNE Chapters 3 and 4 to come out to kickstart my theory-crafting)
% id = "01H9R1NKAX7F0AEF374RWD4026"
- it's just here for permalinking purposes. for now.
@@ -8,7 +11,7 @@
- soon... I may put something here.
% id = "games/oneshot"
-+ ### OneShot
++ ### :page: OneShot
% id = "01HA4HJKR3PBM0NJH7MZMYK6V9"
- buy: [Steam](https://store.steampowered.com/app/420530/OneShot/)
@@ -17,7 +20,7 @@
- on little cat feet
% id = "games/the-talos-principle"
-+ ### The Talos Principle
++ ### :page: The Talos Principle
% id = "01H9R1NKAXN8NKBPYBEZASA1RA"
- buy: [Steam](https://store.steampowered.com/app/257510/The_Talos_Principle/)
diff --git a/content/music.tree b/content/music.tree
index 5e8af89..4db1868 100644
--- a/content/music.tree
+++ b/content/music.tree
@@ -3,15 +3,15 @@
% content.link = "music/reviews"
id = "01H969NN1BJYFYJJR0F458ACPN"
-+ ### stuff I listen to
++ ### :folder: stuff I listen to
% content.link = "music/fuck-drm"
id = "01HPECQ3ZE1YKC1FS2X23H77R2"
-+ ### fuck DRM
++ ### :folder: fuck DRM
% content.link = "music/spotify"
id = "01HVNX7FMW6KJC9H3CQ7TX8ST6"
-+ ### Spotify
++ ### :folder: Spotify
% id = "01H969NN1BR7BH7M7SXBPGB0WC"
- in the future this section may grow another branch related to music making.
diff --git a/content/music/fuck-drm.tree b/content/music/fuck-drm.tree
index 3c95030..20fda54 100644
--- a/content/music/fuck-drm.tree
+++ b/content/music/fuck-drm.tree
@@ -7,7 +7,7 @@
- I'm aware they know *very well* what they're doing. just, y'know, *fuck them.*
% id = "01HPWEESFV7TPXA6H5BCZVZKD6"
-+ exhibit 2: ODDTAXI soundtrack
++ :page: exhibit 2: ODDTAXI soundtrack
% id = "01HPWEESFVY5WGP5NY94QXFQ2A"
- I watched this anime recently and I really liked the soundtrack, so I thought to myself "cool, gotta buy it and enjoy it in glorious FLAC while I'm driving my ~~taxi~~ car"
@@ -32,7 +32,7 @@
They handle my payments. the money goes to the artists. and all the parties involved are happy!
% id = "01HPECQ3Z1SG5J6Y12TD2E4Q1B"
-+ exhibit 1: The Flashbulb's music is gone from Spotify
++ :page: exhibit 1: The Flashbulb's music is gone from Spotify
% id = "01HPECQ3Z10FVJTAKE90W57X7R"
- today I went to listen to some good ol'e Benn Jordan The Flashbulb at work, and guess what do I see?
diff --git a/content/music/reviews.tree b/content/music/reviews.tree
index fd4a2ac..84ac63e 100644
--- a/content/music/reviews.tree
+++ b/content/music/reviews.tree
@@ -1,3 +1,7 @@
+% id = "01J09B24KXE16SKSHFTWPE5AM9"
+- NOTE: I haven't updated this branch in a while because I kind of got bored of doing music reviews.
+however the content's still here if you wanna read it
+
% id = "01H969NN1B0752RC4VSEEK1CAT"
+ here you can find my thoughts on music I listen to
@@ -39,44 +43,44 @@
% id = "music/album/aphex-twin/syro"
content.link = "music/reviews/aphex-twin/syro"
-+ ### album: Aphex Twin - Syro
++ ### :page: album: Aphex Twin - Syro
% id = "music/album/radiohead/a-moon-shaped-pool"
content.link = "music/reviews/radiohead/a-moon-shaped-pool"
-+ ### album: Radiohead - A Moon Shaped Pool
++ ### :page: album: Radiohead - A Moon Shaped Pool
% id = "music/album/radiohead/ok-computer"
content.link = "music/reviews/radiohead/ok-computer"
-+ ### album: Radiohead - OK Computer
++ ### :page: album: Radiohead - OK Computer
% id = "music/album/telefon-tel-aviv/map-of-what-is-effortless"
content.link = "music/reviews/telefon-tel-aviv/map-of-what-is-effortless"
-+ ### album: Telefon Tel Aviv - Map of What Is Effortless
++ ### :page: album: Telefon Tel Aviv - Map of What Is Effortless
% id = "01H9R1NKBDKVKZ2515CJJ2G8HJ"
+ the following albums I haven't had time to review yet, but I'm including them here for permalinking in case I do review them in the future
% id = "music/album/aphex-twin/drukqs"
content.link = "music/reviews/aphex-twin/drukqs"
- + ### album: Aphex Twin - drukQs
+ + ### :page: album: Aphex Twin - drukQs
% id = "01H9JB094GTG1TJ029CQ4PNMS0"
- buy: [Bandcamp](https://aphextwin.bandcamp.com/album/drukqs)
% id = "music/album/the-flashbulb/our-simulacra"
- + ### album: The Flashbulb - Our Simulacra
+ + ### :page: album: The Flashbulb - Our Simulacra
% id = "01H9R1NKBD8JA76ZBEFTJ62XV0"
- buy: [Bandcamp](https://theflashbulb.bandcamp.com/album/our-simulacra)
% id = "music/album/radiohead/hail-to-the-thief"
- + ### album: Radiohead - Hail to the Thief
+ + ### :page: album: Radiohead - Hail to the Thief
% id = "01H969NN1B6W19ENMTBJ0D48AF"
- buy: [Bandcamp](https://radiohead.bandcamp.com/album/hail-to-the-thief)
% id = "music/album/radiohead/the-king-of-limbs"
- + ### album: Radiohead - The King of Limbs
+ + ### :page: album: Radiohead - The King of Limbs
% id = "01H9JB094HBXF1G48ZME4WV2JA"
- buy: [Bandcamp](https://radiohead.bandcamp.com/album/the-king-of-limbs)
diff --git a/content/music/spotify.tree b/content/music/spotify.tree
index a4ee89d..c72cb0e 100644
--- a/content/music/spotify.tree
+++ b/content/music/spotify.tree
@@ -12,7 +12,7 @@
from a consumer standpoint it's also really nice for discovering new music, because you don't have to pay a large amount just to give a listen to an album you may not end up liking.
% id = "01HVNX7FMSR6TFJK3A9VVQ667K"
-- a couple days ago I've noticed the queue in the desktop app has changed...
+- :page: a couple days ago I've noticed the queue in the desktop app has changed...
% id = "01HVNX7FMSREB52W6J2D8EYK7W"
- this is how it looks now:
diff --git a/content/philosophy.tree b/content/philosophy.tree
index e2a1cce..09521bf 100644
--- a/content/philosophy.tree
+++ b/content/philosophy.tree
@@ -16,7 +16,7 @@
of a a "this is interesting" than "I disagree with this" vibe
% id = "01HFYZKREV634J021ZMCDSP7G4"
-+ hedonic treadmill ([wikipedia](https://en.wikipedia.org/wiki/Hedonic_treadmill))
++ :page: hedonic treadmill ([wikipedia](https://en.wikipedia.org/wiki/Hedonic_treadmill))
% id = "01HFYZKREVV2CX1GYJQ18BJS78"
+ a concept that's incredibly useful in keeping it cool
@@ -37,7 +37,7 @@
it then.
% id = "01HREVZNAHB1H9VMD0NPPFTEQ0"
-+ just shut up sometimes
++ :page: just shut up sometimes
% id = "01HREVZNAH8XFRMVB9G58TPV8R"
- I just caught myself writing a few paragraphs long comment on [Lobsters](https://lobste.rs) without really understanding what the author of the comment meant in the broader context of the discussion,
diff --git a/content/programming.tree b/content/programming.tree
index ecc4079..cfcfe6c 100644
--- a/content/programming.tree
+++ b/content/programming.tree
@@ -4,44 +4,44 @@
% id = "01H8Y427B4WC1CF9RHPZPXE77W"
- and also more than just bit magic but I like how that sounds
-% id = "programming/projects"
- content.link = "programming/projects"
-+ ### projects
-
% id = "01HPD4XQQ5GPQ20C6BPA8G670F"
-- ### blog
+- ### :folder: blog
% content.link = "programming/blog/tairu"
id = "01HPD4XQQ5WM0APCAX014HM43V"
- + featured tairu - an interactive exploration of 2D autotiling techniques
+ + :page: featured tairu - an interactive exploration of 2D autotiling techniques
% content.link = "programming/blog/lvalues"
id = "01HY5R1ZW0M0Y5KQ1E8F0Q73ZT"
- + places, or what is up with `*x` not always meaning the same thing
+ + :page: places, or what is up with `*x` not always meaning the same thing
% content.link = "programming/blog/or-types"
id = "01HTWN4XB2YMF3615BE8V6Y76A"
- + OR-types
+ + :page: OR-types
+
+% id = "programming/projects"
+ content.link = "programming/projects"
++ ### :folder: projects
% id = "01HRG2RJCNKT9JJJVQ8WVRC9CA"
-- ### languages
+- ### :folder: languages
% content.link = "programming/languages/cxx"
id = "programming/languages/cxx"
- + ### C++
+ + #### :folder: C++
% content.link = "programming/languages/lua"
id = "programming/languages/lua"
- + ### Lua
+ + #### :page: Lua
% id = "01HRG2RJCN8J42NK0KWD3SBSJA"
-- ### technologies
+- ### :folder: technologies
% content.link = "programming/technologies/unreal-engine"
id = "programming/technologies/unreal-engine"
- + ### Unreal Engine
+ + #### :folder: Unreal Engine
% content.link = "programming/opinions"
id = "programming/opinions"
-+ ### opinions
++ ### :folder: opinions
diff --git a/content/programming/languages/cxx.tree b/content/programming/languages/cxx.tree
index d9f4030..a9c1517 100644
--- a/content/programming/languages/cxx.tree
+++ b/content/programming/languages/cxx.tree
@@ -1,8 +1,10 @@
+%% title = "C++"
+
% id = "01H9R1KJESR2F420HE67HW4AVR"
- design lessons from the best programming language of all time that everyone loves (not really)
% id = "programming/cxx/access-modifiers-as-labels"
-+ access modifiers as labels (`private:`, `protected:`, and `public:`)
++ :page: access modifiers as labels (`private:`, `protected:`, and `public:`)
% id = "01H9R1KJES39Z6RBCKY4E71PYD"
- although Java and C#'s approach to symbol privacy may be verbose, it has one great advantage: it is stateless.
diff --git a/content/programming/opinions.tree b/content/programming/opinions.tree
index e943b6a..86e39a0 100644
--- a/content/programming/opinions.tree
+++ b/content/programming/opinions.tree
@@ -4,7 +4,7 @@
- > "Hotland - Bad Opinion Zone"
% id = "01HBTSXTTAMWJ2BM6395YS72FN"
-+ log verbosity levels are stupid
++ :page: log verbosity levels are stupid
% id = "01HBTSXTTA946PJ04NN50P393T"
- because when should you use any log level other than `error`, `warn`, or `info`?
@@ -60,7 +60,7 @@
- I have no clue how well that will work but it would be pretty interesting
% id = "01HBTSXTTASQDZK2HMCZXR3JJ4"
-+ tracing is better than logging
++ :page: tracing is better than logging
% id = "01HBTSXTTA08SCA313HSFWB13T"
- information about time spans is very valuable for profiling
@@ -89,7 +89,7 @@
be a worthwhile thing to do
% id = "01HCD90XT3G0J8G9Y48H5QT1GJ"
-+ don't use [`RefCell`](https://doc.rust-lang.org/std/cell/struct.RefCell.html)
++ :page: don't use [`RefCell`](https://doc.rust-lang.org/std/cell/struct.RefCell.html)
% id = "01HCD90XT3X82R37WTJJABZF4Y"
+ usually if you have to resort to `RefCell`, it means something is wrong with your architecture
@@ -149,7 +149,7 @@
drop the temporary `Ref<'b, T>` guard after the expression ends
% id = "01HCG7KTGGAFS07QYJXZG6WHJJ"
-+ `None` or `Invalid` cases in enums are a bad idea
++ :page: `None` or `Invalid` cases in enums are a bad idea
% id = "01HCG7KTGGHWTT1ME9GQ5VPFPR"
- by having them, you're forcing your users into an API that forces them to think about the
@@ -163,7 +163,7 @@
to represent a possibly-invalid case
% id = "01HPEMVAH9JZWYPVN53GVFQNQY"
-+ NaNs should crash the program
++ :page: NaNs should crash the program
% id = "01HPEMVAH97PDHJJS70SKG5VMN"
- any time I see a NaN I cry inside knowing how much pain debugging it's gonna be.
@@ -178,7 +178,7 @@
- worst case scenario you pull a Rust and disable those checks on release mode. that *does* work, but I don't like the idea of disabling numeric safety checks on release mode either.
% id = "01HPEQ01JRMM17Y30BP7ZFKZRJ"
-+ operator overloading is good, but getters and setters are not
++ :page: operator overloading is good, but getters and setters are not
% id = "01HPEQ01JR57B057439SY90BQ9"
- this one stems from an argument I had today, so I'll write my thoughts for future generations' enjoyment here
diff --git a/content/programming/technologies/unreal-engine.tree b/content/programming/technologies/unreal-engine.tree
index 39e116a..8fbf9af 100644
--- a/content/programming/technologies/unreal-engine.tree
+++ b/content/programming/technologies/unreal-engine.tree
@@ -1,3 +1,5 @@
+%% title = "Unreal Engine"
+
% id = "01H8Y0CKD0ZDHAH1ET3BJNDS4E"
- this is that really cool game engine I work with on a daily basis
@@ -9,16 +11,16 @@
% id = "programming/technologies/unreal-engine/blueprint"
content.link = "programming/technologies/unreal-engine/blueprint"
-+ ### thoughts on Blueprint
++ ### :page: thoughts on Blueprint
% id = "01HP1FESY5WVJG4X80AZ4ZBX5D"
-- ### random but cool things
+- ### :folder: random but cool things
% content.link = "programming/technologies/unreal-engine/generated-body"
id = "01HV1DGFHP6GB268MDGGDXMR12"
- + how does `GENERATED_BODY()` work exactly?
+ + :page: how does `GENERATED_BODY()` work exactly?
% content.link = "programming/technologies/unreal-engine/fixes"
id = "01HP1FESY5ZS6YTZXA8QTT5V1Z"
- + data validation quick fixes
+ + :page: data validation quick fixes
diff --git a/crates/treehouse/src/cli/serve.rs b/crates/treehouse/src/cli/serve.rs
index 6ab4ef2..f0138c6 100644
--- a/crates/treehouse/src/cli/serve.rs
+++ b/crates/treehouse/src/cli/serve.rs
@@ -160,7 +160,13 @@ async fn sandbox(State(state): State>) -> Response {
async fn branch(RawQuery(named_id): RawQuery, State(state): State>) -> Html {
if let Some(named_id) = named_id {
- if let Some(&branch_id) = state.treehouse.branches_by_named_id.get(&named_id) {
+ let branch_id = state
+ .treehouse
+ .branches_by_named_id
+ .get(&named_id)
+ .copied()
+ .or_else(|| state.treehouse.branch_redirects.get(&named_id).copied());
+ if let Some(branch_id) = branch_id {
let branch = state.treehouse.tree.branch(branch_id);
if let Source::Tree { input, tree_path } = state.treehouse.source(branch.file_id) {
let file_path = state.target_dir.join(format!("{tree_path}.html"));
diff --git a/crates/treehouse/src/state.rs b/crates/treehouse/src/state.rs
index 4ec4e27..fb1e555 100644
--- a/crates/treehouse/src/state.rs
+++ b/crates/treehouse/src/state.rs
@@ -43,6 +43,8 @@ pub struct Treehouse {
pub branches_by_named_id: HashMap,
pub roots: HashMap,
+ pub branch_redirects: HashMap,
+
missingno_generator: ulid::Generator,
}
@@ -56,6 +58,8 @@ impl Treehouse {
branches_by_named_id: HashMap::new(),
roots: HashMap::new(),
+ branch_redirects: HashMap::new(),
+
missingno_generator: ulid::Generator::new(),
}
}
diff --git a/crates/treehouse/src/tree.rs b/crates/treehouse/src/tree.rs
index ee11f9a..d80280f 100644
--- a/crates/treehouse/src/tree.rs
+++ b/crates/treehouse/src/tree.rs
@@ -166,6 +166,8 @@ impl SemaBranch {
attributes.id
);
+ let redirect_here = attributes.redirect_here.clone();
+
let branch = Self {
file_id,
indent_level: branch.indent_level,
@@ -210,6 +212,38 @@ impl SemaBranch {
)
}
+ for source_branch_named_id in redirect_here {
+ if let Some(old_branch_id) = treehouse
+ .branch_redirects
+ .insert(source_branch_named_id.clone(), new_branch_id)
+ {
+ let new_branch = treehouse.tree.branch(new_branch_id);
+ let old_branch = treehouse.tree.branch(old_branch_id);
+
+ treehouse.diagnostics.push(
+ Diagnostic::warning()
+ .with_code("sema")
+ .with_message(format!(
+ "two branches serve as redirect targets for `{source_branch_named_id}`"
+ ))
+ .with_labels(vec![
+ Label {
+ style: LabelStyle::Primary,
+ file_id,
+ range: new_branch.kind_span.clone(),
+ message: String::new(),
+ },
+ Label {
+ style: LabelStyle::Primary,
+ file_id: old_branch.file_id,
+ range: old_branch.kind_span.clone(),
+ message: String::new(),
+ },
+ ]),
+ )
+ }
+ }
+
new_branch_id
}
diff --git a/crates/treehouse/src/tree/attributes.rs b/crates/treehouse/src/tree/attributes.rs
index 025195c..8fbf2f9 100644
--- a/crates/treehouse/src/tree/attributes.rs
+++ b/crates/treehouse/src/tree/attributes.rs
@@ -61,6 +61,12 @@ pub struct Attributes {
#[serde(default)]
pub id: String,
+ /// Redirect old and deleted listed in the list to this branch.
+ ///
+ /// This can be used to keep links permanent even in case the structure of the treehouse changes.
+ #[serde(default)]
+ pub redirect_here: Vec,
+
/// Controls how the block should be presented.
#[serde(default)]
pub content: Content,
diff --git a/static/emoji/clueless.png b/static/emoji/clueless.png
new file mode 100644
index 0000000..c30b957
Binary files /dev/null and b/static/emoji/clueless.png differ
diff --git a/static/emoji/folder.svg b/static/emoji/folder.svg
new file mode 100644
index 0000000..cc61bdf
--- /dev/null
+++ b/static/emoji/folder.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/emoji/page.svg b/static/emoji/page.svg
new file mode 100644
index 0000000..b8a4cb9
--- /dev/null
+++ b/static/emoji/page.svg
@@ -0,0 +1,7 @@
+
diff --git a/static/emoji/rarog.png b/static/emoji/rarog.png
new file mode 100644
index 0000000..f94dd71
Binary files /dev/null and b/static/emoji/rarog.png differ
diff --git a/treehouse.toml b/treehouse.toml
index ca739a0..e3950f3 100644
--- a/treehouse.toml
+++ b/treehouse.toml
@@ -15,6 +15,7 @@ description = "a place on the Internet I like to call home"
# Social garbage
"social/github" = "https://github.com/liquidev"
"social/soundcloud" = "https://soundcloud.com/daknus"
+"social/listenbrainz" = "https://listenbrainz.org/user/liquidev/"
# My own repositories
"stitchkit/repo" = "https://github.com/abyteintime/stitchkit"