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

% 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(--liquidex-brand-red); }
        &.yellow { background-color: var(--liquidex-brand-yellow); }
        &.green { background-color: var(--liquidex-brand-green); }
        &.blue { background-color: var(--liquidex-brand-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 .red} 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]

