%% title = "what's going on inside the house? (a changelog)"
visibility = "Private"

% id = "01JHXX4CDT39HJJD020WM8F3BK"
- *revision 16:* lots of [little things](https://www.youtube.com/watch?v=zHBbNLvS7C8){.secret}

    % id = "01JHXX4CDT4CF83G8KXKW24A3T"
    - new permalinking experience: `/b` is now a _redirect_ to the target page, anchored on the branch, rather than a 200 OK serving you the target page but aliased.

        % id = "01JHXX4CDTS0DWGFM8TAN24TAY"
        + the permalink button on the right now copies the permalink to your clipboard directly, because navigating to the permalink only to be redirected to a non-permanent link would be pretty useless.

            % id = "01JHXX4CDT8PG48V92KWVAV61N"
            - this feature requires JavaScript, and if you have JavaScript disabled, it requires you to get real.

    % id = "01JHXX4CDTQBCYB2TWFF05WGHP"
    - subpage listings are now generated automatically.

        % id = "01JHXX4CDT1ZWQ70DJXACECTDQ"
        - this changes the inner structure of major categories a bit.
        nesting has been reduced and there's only a flat list of pages under each individual category.

        % id = "01JHXX4CDT3FQV7T1G63JMGEJZ"
        - in the future, I'd like to incorporate a fuzzy search & tagging system to make it a bit easier to find posts.
        maybe I'll also rewrite Atom feeds to be based off of this.

    % id = "01JHXX4CDTX5J7Q1PA08N2EYTE"
    - branch dates are now rendered server-side to prevent layout shifting on load.

        % id = "01JHXX4CDT7A7YFS5KXJVRQTCP"
        - because of this, dates now use `YYYY-MM-DD` format consistently in all locales.

        % id = "01JHXX4CDTFMK05DHJB3XDQXTC"
        - despite this, the dates are still corrected on the client side to account for time zone differences.

    % id = "01JHXX4CDT65ZFPW0T9AXTF58K"
    + the treehouse will now scale more nicely with your font size preferences, as you've set them in your browser.

        % id = "01JHXX4CDTHZE17KS06V8FR5TQ"
        - we now use `rem` units for everything.

    % id = "01JHXX4CDTA8FY9AHWFZZ73T85"
    - indent guides now consistently appear on touch devices.

% id = "01JESCRT21SSSNZ631HR5KWQ9W"
- *revision 15*: command line wonder

    % id = "01JESCRT21QNYCT76JJS62JRH1"
    - so I was looking for a place to dump random shit into and had the revelation that the answer lies within... text editors!

        % id = "01JESCRT21Q82WYYB8JA5CR92E"
        - therefore the treehouse now has a vim-inspired (...vimspired!) command line (or, put more modernly, _a command bar_---except my commands can take arguments, because hell why not.)

    % id = "01JESCRT21XSV8YBCVSJ1MF9B1"
    + you can trigger the command line by hitting `<kbd>:</kbd>`{=html} on your keyboard, or if you're not on a desktop, press the little `:|` button at the bottom.

        % id = "01JESCRT21VGQ0Y363GN4FQX20"
        - I'm a little annoyed how mobile browsers display the command bar at the moment, but it's likely [we'll have to wait about another two years](https://caniuse.com/mdn-api_virtualkeyboard) until we get progress on that.
        oh well.

            % id = "01JESCRT219MEDNWMS52K78FA5"
            - maybe I can make it work _at least_ in Chrome in the meantime.
            won't make me, a Firefox user, any more happy, but that's still a fair amount of market share.

    % id = "01JESCRT2139DSQX0KDH16VCSG"
    - this was intended to be a dev mode only feature, but it feels too good not to use it for a feature dump for anything that might clutter the main layout...

% id = "01JDZ7J157MB6KW18433A5WK3J"
- *revision 14:* [Feed Me Weird Things](https://squarepusher.bandcamp.com/album/feed-me-weird-things-remastered){.secret}

    % id = "01JDZ7J157MZCP7YH1J2FM030P"
    - there is now an Atom feed available on the website!
    add it to your favourite feed reader to follow any updates from [page:treehouse/new][].

% id = "01JDDE4YE6RT06B7EC1R7KBTJH"
- *revision 13:* [virtual insanity](https://www.youtube.com/watch?v=4JkIs37a2JE){.secret}

    % id = "01JDDE4YE6NQBA6Q0TJDEFHYQK"
    - removed version history :cry:

        % id = "01JDDE4YE6A70Q8WT8N3MVTK1G"
        + the quality of this feature was too low for my standards.
        this was caused by the treehouse's codebase being one giant pile of spaghetti, onto which bolting a version history feature only caused more havoc :oh:

            % id = "01JDDE4YE6Q6NY2NT12HY4Y510"
            - if you've ever run across broken branch links, you can thank version history jank for that.

    % id = "01JDDE4YE6VY4FWQ21H7X2VGQ4"
    - I refactored treehouse (the software) to no longer generate files upfront!
    instead, there's a _virtual file system_ from which the web server sources files.

        % id = "01JDDE4YE6K43DMZZ9GGNYT5G6"
        - this virtual file system, or at least [the part that assembles the page as it's served to you][vfs target], generates pages lazily---which causes my dev experience to be _faaaaaaaAAAAAAAAAAAAAAAAAAAA_

        st

        [vfs target]: https://src.liquidev.net/liquidex/treehouse/src/commit/0f8d05adebfe323908be487187d9afe6aaa2df36/crates/treehouse/src/generate.rs#L511

        % id = "01JDDE4YE6RQH27JGPN28ZAJYC"
        + this generally doesn't mean anything for you, but for me... man, does the treehouse feel fast to edit now!

            % id = "01JDDE4YE61YX8TC6NH1F0F2HF"
            - generating all the page versions upfront meant I needed to wait over a second for the page to refresh, which made editing any minute details _really_ painful.
            imagine I did all the previous layout refurnishment with that...

% id = "01JBWHXTMC7GZEMTH2WT7TN1GT"
- *revision 12:* refurnishment

    % id = "01JBWHXTMCHVAXKV18VZ3C5RS4"
    + I changed the layout of the treehouse to be more spacious and fit more branches on the screen

        % id = "01JBWHXTMCC4E4P8C3MBMB0M3Z"
        - you may have noticed the usable area for branches is now much wider without the branches themselves being too long.

            % id = "01JBWHXTMCBMBRXQ66J5F19DPD"
            - I like that balance, though I don't love how far to the right the branch buttons have gone now.
            feels like there's a lot of unnecessary mouse travel happening with that.

    % id = "01JBWHXTMCYXEFA2J18WEY3F83"
    - since the layout rules are a bit more complex than the previous one, I expect lots of bugs around narrow displays...

    % id = "01JBWHXTMCK7TJK4J1FM4AGY5M"
    + one rad change is that the liquidex brand colored hobby corners are now more elegant, displaying the whole icon, and using a tamer text underline than the previous long border.

        % id = "01JBWHXTMCVXNAACA86AET9BXD"
        - this icon is gonna be the death of me on narrow layouts

    % id = "01JBWHXTMCZN2Q7R0FS208A8FR"
    + page titles are now way bigger!

        % id = "01JBWHXTMCMVHB3T4GBM6SQM3D"
        - I like this change in particular because it clarifies the visual hierarchy between page titles and the commonly used level 3 header on pages

    % id = "01JBWHXTMCYJ0358SR76Q0V422"
    - the fact I'm still finding bugs in the layout as I'm writing this is not exactly the most encouraging, but I'm optimistic it's gonna be a change for the better :ralsei_love:

% id = "01J8YW9MZ4SD06KQY2H5GHJXRR"
- *revision 11:* version history

    % id = "01J8YW9MZ4KAPYZVS1QR00W7PJ"
    - there's now a little history icon next to the treehouse in the footer, which lets you see the history of a page.

        % id = "01J8YW9MZ4J48PXF7VDNZ299HV"
        - for example, [here's this page's history][page:h/treehouse/changelog]!

    % id = "01J8YW9MZ48M6JKWMAC8E8MZJQ"
    - there's still lots of work to be done around this feature---the endgame is to allow [JavaScript-less branch permalinking](https://src.liquidev.net/liquidex/treehouse/issues/33).

        % id = "01J8YW9MZ42J6ZAZBYS1VW2RS4"
        - currently linking to a branch on a historic version will send you to the correct page, but it will not highlight the branch due to the frontend being stupid.

        % id = "01J8YW9MZ4QGYEGGPQJJC0BD8A"
        - historic pages also _link to current pages and branches_, which is definitely not how it should work.
        this will require some big refactoring work though, so I haven't gotten around to doing it yet.

% id = "01J3NX4F6Z0JWN0E4B3DJMTAFH"
- *revision 10:* I am speed

    % id = "01J3NX4F6Z0WB2RN4GHTVFNRGB"
    + the treehouse now caches most static assets, so that they don't have to be redownloaded.
    especially that very large font, which I should probably optimize now that I think about it!

        % id = "01J3NX4F6ZMB691JYM61RHP4ZN"
        - there are some minor exceptions to this, which include:

            % id = "01J3NX4F6Z59655NYTS3QTA9EQ"
            + pages themselves. we cannot cache those at all. well, maybe in release mode, for like 10 seconds, which defeats the point.

                % id = "01J3NX4F6Z5J3PYZPBESR30CD8"
                - we can only cache those assets which are guaranteed not to change given their URL.

                caching on the treehouse is performed by means of a `?cache` query parameter which contains a truncated BLAKE3 sum of the cached file's contents.
                that way we can tell the browser to redownload the asset by changing out the hash.

                this is impossible to do for pages, because they may change at any point in time.

                % id = "01J3NX4F6ZBQVY66EZB5TY8R7Q"
                - I tend to update the treehouse very often - including post-deploy, if I fuck something up - so if I enable caching for e.g. an hour, and people visit the broken version, they're then stuck with a broken version for an hour.
                seriously, timed caching is not a good solution for incremental website updates.

                    % id = "01J3NX4F6ZXB360N1XXGN58964"
                    - except for `/sandbox` maybe, because that tends to be fetched in short bursts... I'll think about it.

            % id = "01J3NX4F6ZJE0JT8XY49DH52RX"
            - linked branches. it's hard and not worth it for the few extra kilobytes saved - for snappiness it would be much better to prefetch branch content when the user hovers over a branch.

                % id = "01J3NX4F6ZVA8PCQNMGMW2DDFB"
                - not sure what to do about mobile devices, because they don't have a hover state.

    % id = "01J3NX4F6ZASD2FCKKNKWZCJWB"
    - more images now have proper `width="" height=""` attributes, which should help eliminate layout shift when loading pages.

    % id = "01J3NX4F6Z5MZQ57ZTWHZZJZ7G"
    + the treehouse is now powered by Djot, not Markdown! took me an evening or two to rewrite everything to the new markup, but I think it'll be worth it.
    I can already see some pretty big clarity wins.

        % id = "01J3NX4F6Z0KWMDDMBCYGB836M"
        - my favorite feature so far is that you can add custom attributes to anything.
        like this, for example:

        ``````djot
        {:program=haku}
        ```haku
        (- 100 35)
        ```
        ``````

            % id = "01J3NX4F6ZGK01W6060BXTWJMJ"
            - and have you noticed that there's a code block inside this code block? you can't do that in Markdown!

            `````````djot
            ``````djot
            {:program=haku}
            ```haku
            (- 100 35)
            ```
            ``````
            `````````

    % id = "01J3NX4F6ZS93FTJ71YK2CASN7"
    - literate programming blocks are now correctly rendered with JavaScript disabled, thanks to me rewriting the HTML renderer in the Djot transition.

    % id = "01J3NX4F6ZDFZJX77DCZZJ8KKK"
    + I also took the liberty to add some highlighting to missing emojis.
    meaning they now stick out like a sore thumb :sore_thumb: to nag me about adding them in (or pulling them in from other branches. hello :verified: :TODO: :DONE: how have you been)

        % id = "01J3NX4F6ZY6M6RAA2DVP7TAJ4"
        - yeah yeah we all know how [ad blindness][] works, this is totally not gonna push me to do this isn't it

        [ad blindness]: https://en.wikipedia.org/wiki/Banner_blindness

% id = "01J09K0B6JGYBJVVZ07QFXB0FM"
- *revision 9:* summer cleaning

    % id = "01J09K0B6J8GM4NYXDFSN0C58P"
    - cleaned up a bunch of pages! see [new][page:treehouse/new] for the details

    % id = "01J09K0B6JVHX68NQA73TF2PSW"
    + there are now a bunch of colorful :folder: :page: icons next to pages

        % id = "01J09K0B6J2487XGCTAVENWBVA"
        - experiments show that this improves readability by 100% despite the icons being ugly and blurry due to not integer-scaling.
        it's not like I can really fix that though, since they're next to text; good luck making pixel-perfect icons that are meant to appear next to fonts of like 10 different sizes that increment by very little.

            % id = "01J09K0B6JWVDJA8NGCT7HEE90"
            - maybe one day I'll hint them to a bunch of sizes…

    % id = "01J09K0B6JF4QAX37WN4WPWR1V"
    + the treehouse's design is now certified 4% more accessible :verified: by means of using `rem` metrics for all the UI elements, so now the UI will scale depending on the font size you've set in your browser.
    ain't that cool?

        % id = "01J09K0B6JY47ME32NR6GC73S4"
        - on the one hand it seems cool, but I have to note here that I designed this website with 14px fonts and pixel metrics in mind.
        having switched it to `rem` everywhere might have produced some wonky layout bugs; if you find any, please [report them to me][branch:hello]!

        % id = "01J09K0B6JJJMHPMHJD78X8H1A"
        - I also have the feeling that the layout is now a lot more spacious, but I can't quite figure out why.
        you may expect the layout to shrink a bit in the coming days.
        or not.
        I use a slightly smaller font size in my browser so I might just forget about it.

% id = "01HYP17EQHKKXFDV71ZR0DWJN9"
- *revision 8:* fancy syntax highlighting

    % id = "01HYP17EQHKPBRZPMD85NYZPMT"
    - over the past few months the treehouse has been receiving a bunch more syntax highlighters

    % id = "01HYP17EQHWAG0W5BNC4RM8VK4"
    - there are now syntaxes for [Lua][branch:01HTAQ23YHXTEZ7WNVZREZ8WSZ], [Rust][branch:01HTWRAS0EHFG2V4N6NCR403C5], [JSON][branch:01HRT0W4AKQJEAMJ8XHJVMY4ZV], and [C][branch:01HY5R1ZW5R3808RNG6RAPC8H4]!

        % id = "01HYP17EQHZPTZ00YYM48ASJ34"
        + C++ probably coming soon™, but with its much more complex syntax it's likely the highlighting isn't gonna be as nice

            % id = "01HYP17EQHSD0WFJ57H7JB57QH"
            - and I'm only mentioning it because there are some C++ code snippets in the treehouse, and it would be _really_ nice if they finally started being highlighted

    % id = "01HYP17EQH21BNJ0VJXGN74ZSP"
    - what's cool is that all the syntax highlighters work even if you have JavaScript disabled.
    which I wouldn't recommend, but it's nice.
    because you absolutely do _not_ need to embed a heavyweight JavaScript library for this

        % id = "01HYP17EQHJH3VFBWKANHT52BG"
        - and it enhances the responsiveness!
        you don't need to _wait_ for code to be highlighted.

    % id = "01HYP17EQH83P776ZFMDC53XF7"
    - I was also told there's a secret now?
    like, no clue what they mean by that but cool?

% id = "01HRF1YCJ61Y4XAM94XNMRV3R7"
- *revision 7:* the main page is now a lot more colorful :rainbow:

    % id = "01HRF1YCJ6S5YBSFC13QPWKF3X"
    - ``` =html
    <style>
    span.treehouse\/changelog\:liquidex-brand-color {
        display: inline-block;
        width: 0.8em;
        height: 0.8em;
        border-radius: 100000px;

        margin: 0px 2px;

        &.red { background-color: var(--accent-red); }
        &.yellow { background-color: var(--accent-yellow); }
        &.green { background-color: var(--accent-green); }
        &.blue { background-color: var(--accent-blue); }
    }
    </style>
    ```

    each major content category now has an icon and a _liquidex brand color™_
    []{class="treehouse/changelog:liquidex-brand-color red"}[]{class="treehouse/changelog:liquidex-brand-color yellow"}[]{class="treehouse/changelog:liquidex-brand-color green"}[]{class="treehouse/changelog:liquidex-brand-color blue"}
    assigned to it

        % id = "01HRF1YCJ602RS1C4E7W7DVHZB"
        - there may be more colors in the future, given that there are probably gonna be more categories :smile:\
        and I'd like the other non-hobby categories to get their own colors too, but the four that are currently here are good enough for now.

% id = "01HR300JYTSEE1K1DH5R8QZ4K6"
- *revision 6:* it now works on Webkit

    % id = "01HR300JYTQA11TYPSX59Y4V2S"
    + this was a hefty refactor, but I introduced a replacement for the standard `is=""` attribute that works on Webkit.

        % id = "01HR300JYTX1J1SQW39SQM2A4X"
        + seriously, fuck you, Apple.
        wish the people who work there and oppose industry standards would stop sitting there with a finger up their ass and accept that reality is not always what you want it to be.

            % id = "01HR300JYTPHPKD0VCDGWT01HE"
            - even as I'm writing this, I'm trembling over how half my website is probably gonna break after this refactor, due to me having it written in pure JavaScript rather than TypeScript, but eh, fuck it.

            _reality is not always what you want it to be._

            % id = "01HR30AHZMS63DA3W3293HZ6WN"
            - just know that I'm writing this not because I think the standards are good, but because one vendor not following them just results in extra work on our part - the developers' part -
            doing more work than is actually really necessary to accomplish a certain task.

            % id = "01HR30AHZME866NBYNXZ15CR09"
            - using the browser's built-in capabilities is _good._
            you're just making me (and hundreds of thousands of other developers) write a shitty, slow version of what the browser could do by default, had it been following Web standards.

    % id = "01HR30XM8432QV9NHA26FJQX18"
    - also, the links are now a bit prettier! everybody likes pretty links, right?

        % id = "01HR30XM84P5NGJ83PAJ11PEMG"
        + page links no longer need to have the .html at the end. I'm still in progress of porting the website over to the new format, so you may see some spots where there's a .html extension.

            % id = "01HR30XM84M1A1CQF9CS92H340"
            - buut if you really wanna, you can strip it off when sending the link to other people.

% id = "01HQ94FDZK5SSXPSHQG9BCKA0T"
- *revision 5:* added [news page][page:treehouse/new]!

    % id = "01HQ94FDZKHSYR11K6A5CTAB4Q"
    - this page will show you all the updates that have been happening since your last visit

    % id = "01HQ94FDZKXFRMCH5NXXAB146E"
    + it will also lightly nag you whenever there are new posts with a *1* badge

        % id = "01HQ94FDZK5TJDM3CMNKQKES6Z"
        - if that's too annoying for you, it's easy to disable - scroll down on the [news page][page:treehouse/new] and there's a (collapsed by default) settings section for the page

    % id = "01HQ95D2GHKF807X294N3GBADP"
    - another thing: there are now indent guides! my girlfriend said these make the website a lot more readable for her, so I guess they're good

% id = "01HP5AKRNJRG1W71MDJ8QY4YFW"
- *revision 4:* there's now a thing in the footer

% id = "01HP45HV411QDDK8ZBNNBNR6AX"
- *revision 3:* just a bit more polish :relieved:

    % id = "01HP45HV41AP9PY0DZN47H8NJ2"
    - emoji tooltips now have a neat animation on hover rather than just sort of appearing and disappearing immediately

    % id = "01HP45HV4126B4M6KF7NJWEB3R"
    - pages can now have thumbnails that display in embeds

% id = "01HP20D2R4ZK30H85H0WBR5WK7"
- *revision 2:* just really comfy UX :relieved:

    % id = "01HP20D2R46FP213WVSZPHZXZN"
    - first thing you probably noticed: added indent guides (may require a modern browser due to usage of [`:has`](https://developer.mozilla.org/en-US/docs/Web/CSS/:has))

    % id = "01HP20D2R40HW0SMETK14WKDF2"
    + added some nice animations

        % id = "01HP20D2R4WD9CC3X8MP3RWWHR"
        - hovering over branches is now animated

        % id = "01HP20D2R4E24GK562RN108E34"
        - when a branch is focused via a hyperlink, the background will now pulse in and out to grab your attention

            % id = "01HP20D2R4SFE4S1JREWP50SQ5"
            - this replaces the previous dotted underline which my friends reported to be hard to spot

    % id = "01HP20D2R4C0DZAKKB84FCQNXN"
    + added dates to branches (requires JavaScript)

        % id = "01HP20D2R4BF3ZX5SVV6RJJ6HK"
        - JavaScript requirement due to dates being formatted in your system's locale

        % id = "01HP20RMB3YD660J8M2SJ2V6DT"
        - right now these are invisible on the mobile layout because it's unclear where they should be positioned :ralsei_dead:

    % id = "01HP20D2R4B5QDQ2JT06QF8G8E"
    - added page titles (you can see them on this page!)

    % id = "01HP20D2R4F2XZVBBQNVW6CVHE"
    + fixed "hey expand me" chevrons sometimes shifting layout when a branch is expanded

        % id = "01HP20D2R4W85SKCJX2R10RHHC"
        - yeah, _these_ ones - like the one that just disappeared when you clicked on the branch above

    % id = "01HP20RMB3RX6HSBHKM6FVDS44"
    + [`/b` endpoint](/b) is now used for shorter links. it also generates OpenGraph metadata so that Your Favorite Messaging Platform can display the linked branch's content

        % id = "01HP20RMB37M1XB6ZC9VWXK98R"
        - what's left here is to add some more OpenGraph to do stuff like: thumbnails, default descriptions, and so on and so forth - but the seeds for that have already been planted :smile:

    % id = "01HP20D2R4MBTW82TVT9MWY3GZ"
    - internals: branches are now based on flexboxes rather than background images.
    this requires sending a bit more HTML, but [the layout is a lot more stable][branch:01HP20D2R4F2XZVBBQNVW6CVHE] as well as being [easier to extend][branch:01HP20D2R4C0DZAKKB84FCQNXN]

