<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Krizdingus</title><description>Writing from krizdingus.com: essays, build stories, and whatever else I can&apos;t stop thinking about.</description><link>https://krizdingus.com/</link><language>en</language><atom:link href="https://krizdingus.com/rss.xml" rel="self" type="application/rss+xml"/><item><title>Finishing someone else&apos;s website</title><link>https://krizdingus.com/blog/finishing-someone-elses-website/</link><guid isPermaLink="true">https://krizdingus.com/blog/finishing-someone-elses-website/</guid><description>A Miami developer handed me a half-built Elementor site and about a week to finish it. What I inherited, what the client&apos;s notes actually meant, and the twenty-one minutes it took to go live.</description><pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-files-before-the-quote&quot;&gt;The files before the quote&lt;/h2&gt;
&lt;p&gt;On Thursday, October 8th, sometime in the evening, I got thrown into a group message between a client of mine and Ellen of Prospera Real Estate Collective. I was told she needed a web development manager for an existing website. I was given very little. I ended up speaking with Ellen the next day.&lt;/p&gt;
&lt;p&gt;She told me she had a website she wanted to redo, and she wanted it done pretty quickly. The developer she typically worked with was too busy.&lt;/p&gt;
&lt;p&gt;I did ask for the files before I committed to anything, because I wanted to see what was done. Everything she had sent him to get started, her proposal, all that stuff. I wouldn’t have taken it on if I thought it was a genuine mess.&lt;/p&gt;
&lt;p&gt;What came back was an Elementor kit exported from the previous developer’s own test site. It carried the global colors, navy and copper, and the Astro font the brand uses. It had a Home page with a video hero, a section called Our Philosophy, and a label reading “Latest Insights” with nothing underneath it. It had one CTA template, which said “Let’s build the future together.” There was no header, no footer, no menus, no posts and no other pages.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/prospera/r/old-home-480.avif 480w, /images/blog/prospera/r/old-home-800.avif 800w, /images/blog/prospera/r/old-home-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/prospera/r/old-home-480.webp 480w, /images/blog/prospera/r/old-home-800.webp 800w, /images/blog/prospera/r/old-home-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/prospera/old-home.jpg&quot; alt=&quot;The old Prospera home page: a pale blue sky with clouds and a gull, the copper Prospera logo at top left, and white text reading Transforming Communities via Human-Centered Development.&quot; width=&quot;1440&quot; height=&quot;900&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;The site that was there, photographed the morning of launch day.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;It was unfinished, and there was still a lot to build. But it was a good start. I wasn’t inheriting some slacker’s work.&lt;/p&gt;
&lt;p&gt;I happened to have a solid two weeks where all I really needed to do was play video games. I’d just bought Star Wars Galactic Racer that day, and I had Final Fantasy Resonance on pre-order, so I’d kind of just planned on playing those with my free time. And then this fell into my lap. I’m not gonna say no to work and money.&lt;/p&gt;
&lt;h2 id=&quot;why-nobody-wanted-it&quot;&gt;Why nobody wanted it&lt;/h2&gt;
&lt;p&gt;I don’t have nearly as much experience with Elementor as I do with other page builders, like Divi, and especially Enfold. Having built a lot of WordPress websites with page builders for clients, I almost feel like it can sometimes take longer. Because to do it right, you’ve got to make sure you’ve either styled these elements or saved templates, as well as written documentation for if they want to edit their site. You do a bunch of CSS, HTML, PHP, JavaScript. And then you’re building all over again when you’re going in and adding your content. So it’s like you’re building twice. And it gets annoying.&lt;/p&gt;
&lt;p&gt;I personally don’t like web builders. I understand why they exist. They exist for clients who need to manage their websites. For me, they largely slow me down.&lt;/p&gt;
&lt;p&gt;Though concerning Elementor, thanks to things like AI, searching through documentation and figuring out weird issues is easier than the traditional way of going through Google, searching documentation, searching forums. For answers to things you can just kind of ask ChatGPT: hey, I’m having this issue, do you have any idea what’s going on here? You can ask it, has anyone else experienced this? And it will find blog articles, forum comments, help articles.&lt;/p&gt;
&lt;p&gt;It’s her website. She picked the thing she can run. That’s the limit, and you work inside it.&lt;/p&gt;
&lt;p&gt;There just wasn’t time to pivot. She needed a website, and she needed it done. We were talking on the 8th. She wanted it on the 23rd.&lt;/p&gt;
&lt;h2 id=&quot;the-database-is-never-the-only-copy&quot;&gt;The database is never the only copy&lt;/h2&gt;
&lt;p&gt;Before any of it started, I set one rule for the build: the site had to exist as files, not just as a database. Every page, template, post and setting had to be reproducible from a folder. The database was never going to be the only copy of the work.&lt;/p&gt;
&lt;p&gt;At an agency I worked for, all of their websites used page builders. There was no breaking out of this. I would find that before I got to this agency, they were using the tools inside the page builders to customize everything. So there’s always CSS. If it wasn’t custom tooling on the elements themselves, there might be custom CSS in different parts of the website: in a custom CSS file, in Enfold or the theme’s own custom CSS, as well as inside the elements. It just was frustrating.&lt;/p&gt;
&lt;p&gt;I said, no more of this, and started styling these elements directly in one CSS file. As clients used these websites, they would never necessarily remember all these little things when they wanted to publish new content. And no matter all the training they were given, design would drift. So the less they have to touch to style things, the better.&lt;/p&gt;
&lt;p&gt;If you’re taking one of these over, here’s the shape I’d recommend. Build the pages in the editor, like a person. But keep the exportable artifacts in a folder under version control: the kit export, the posts, the field definitions, the stylesheet, the logo and the fonts. Write the runbook, which is the ordered list of what gets imported and in what order, along with the traps. Then rehearse it. Build an empty WordPress, import only that folder, follow your own runbook, and check the result. Do it again after every round of revisions.&lt;/p&gt;
&lt;h2 id=&quot;her-notes&quot;&gt;Her notes&lt;/h2&gt;
&lt;p&gt;I sent the preview out Monday the 19th. I sat on my work a little bit, to review it and give it some time. It was originally scoped for Wednesday, so we were still ahead of schedule, and I didn’t want to rush anything out just in case I found something, because things were going so smoothly.&lt;/p&gt;
&lt;p&gt;Her notes came back on the Thursday. Eleven of them in the morning, left as pins on the preview in a review tool called Pastel. I read them, sorted them against what the proposal actually covered, and sent her questions about the handful that needed her input. She didn’t answer the questions. She kept reviewing instead. Forty-four more notes arrived over the course of the afternoon, on every page of the site. All of it was rebuilt and back on the preview that night.&lt;/p&gt;
&lt;p&gt;I don’t like working that way. The platform she was sending notes on was entirely new to me, so I had to first figure it out. And that’s what made triaging the notes important. As I was working, notes were coming in, and yeah, that frustrated me.&lt;/p&gt;
&lt;p&gt;A frustration I had with Ellen was getting her to answer questions. More often than not she never really directly responded to them. She would just go in and leave more notes.&lt;/p&gt;
&lt;p&gt;The tool was hers, not mine. I had no account with Pastel; I was a guest on a shared link. So before I built anything, I copied every one of her notes out into a file of my own, word for word, with where each one was pinned.&lt;/p&gt;
&lt;p&gt;The next morning, six more had arrived overnight. Reading the whole set of sixty-one again against that copy, four of the notes said something different than they had the day before. No new pin, no notification, no reply in the thread. One of them had changed a line she’d already approved. Pastel’s activity log only ever says “created,” so there is no record of an edit.&lt;/p&gt;
&lt;p&gt;Without it, I wouldn’t have caught her stealth edits.&lt;/p&gt;
&lt;p&gt;It nearly didn’t work, either. One entry in my copy had been paraphrased rather than transcribed, and a few rounds later that paraphrase read as an edit that had never happened. A copy you paraphrased is not a copy.&lt;/p&gt;
&lt;p&gt;One of her notes asked me to “make this the correct logo color (it’s like a pink/peach).” The logo file was already the brand copper. A CSS filter was turning it white over the video on the home page, and the fix was deleting one rule.&lt;/p&gt;
&lt;p&gt;It’s pretty common. So it’s important, when you’re approached with those things, not to stay locked into what the client’s report says is the obvious cause. Once I realized the logo was already the correct color, clearly there was something else going on. CSS was really my first guess.&lt;/p&gt;
&lt;p&gt;The other one she couldn’t name. “Something doesn’t feel quite right,” on a heading, and then again on other pages as the font bothering her, too thin for headline text. She was right. The body text was set in the bold weight of the brand font and the headings in the light one, so on every page the paragraphs outweighed the headlines above them. Switching the headings to the heavier weight fixed the whole site at once.&lt;/p&gt;
&lt;p&gt;I think it’s natural, especially when you get this quite a bit from clients. When they don’t have the language, I can empathize with it, because I often struggle to find the language to articulate what I’m looking for outside my own areas of expertise. In creative circles, whether it’s design or development, it’s common to express frustration with this sort of feedback. But it’s useful to keep in mind the ways that we do it ourselves.&lt;/p&gt;
&lt;p&gt;How it got past me, I don’t really know. Maybe I was too married to the original design to really see the issue. Maybe I thought that’s what she wanted. I think a failure on me was not asking more probing questions.&lt;/p&gt;
&lt;p&gt;I got a design degree. I should be able to find the vocabulary for those who don’t have it. That’s part of the education. It’s part of the job. It’s part of the challenge.&lt;/p&gt;
&lt;p&gt;I sent the revisions back on the Friday morning, said the preview was updated, and asked for a launch day. Nothing came back that day, or over the weekend. I followed up on the Monday and sixteen more notes arrived within a couple of hours, three of them reversing earlier notes of her own. I built those too, as a goodwill wrap-up. The proposal included one round of revisions. This was the fourth.&lt;/p&gt;
&lt;h2 id=&quot;launch-it-tonight&quot;&gt;Launch it tonight&lt;/h2&gt;
&lt;p&gt;I had offered to launch the website late Tuesday night. I had planned for Monday night to make myself some dinner and play some games. I didn’t even expect her to follow up, to be honest, given how things had been going. So I went downstairs and was ignoring my phone. I can’t remember if I was watching television or playing a video game. And I just happened to hear the email notification come in from my desktop upstairs, and something told me to go check. Sure enough, she wanted to launch that night.&lt;/p&gt;
&lt;p&gt;I wanted to say no. I did. But I had no real reason other than that I just didn’t want to work, and that didn’t sit right with me.&lt;/p&gt;
&lt;p&gt;She was going to a conference the next morning. That was one of the reasons she wanted the website done so quickly in the first place: she wanted to show it to people. And if I decided to be lazy because I wanted to play some video games, and launched it Tuesday instead, I still would have made my money. But then all these folks she’s meeting go to her website, and they say, well, that’s a nice website. They might ask her who did it. And I’ll be top of mind to her.&lt;/p&gt;
&lt;p&gt;I planned for this. Way in advance of launch I did the whole thing in reverse, to rehearse it and make sure it went as smoothly as possible. I coached her to expect up to four hours: maybe an hour and a half of real work, then thirty to forty-five minutes of checking. So I’m not losing any time. I have everything to gain. I rehearsed for this. Let’s do it.&lt;/p&gt;
&lt;p&gt;Backups first, three ways. The holding page went up at 8:27 and the site was live at 8:48, so visitors saw “we’re updating our website” for twenty-one minutes.&lt;/p&gt;
&lt;p&gt;About fifteen of those twenty-one minutes went on four problems the rehearsal could not have found, because a rehearsal imports from a source that stays online and a real launch doesn’t.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Elementor’s import screen crashed on the kit.&lt;/li&gt;
&lt;li&gt;The video and the images inside two of the essays were still loading from the preview server, and would have broken the moment its password went back on.&lt;/li&gt;
&lt;li&gt;The band across the bottom of every page vanished: the footer pointed at an ID that only existed in the build.&lt;/li&gt;
&lt;li&gt;WordPress refused the logo, because it was an SVG.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two more had already been caught, an hour before go-live, by running the rehearsal one last time. The launch files had been regenerated that afternoon with a placeholder in place of the real address, so every image in them pointed at nothing and the import would have arrived with no pictures at all. And the four category lists on the Insights page store category IDs, which change on import, so all four would have come up empty. Both of those were introduced by the later rounds of revisions, after the previous rehearsal.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/prospera/r/new-home-480.avif 480w, /images/blog/prospera/r/new-home-800.avif 800w, /images/blog/prospera/r/new-home-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/prospera/r/new-home-480.webp 480w, /images/blog/prospera/r/new-home-800.webp 800w, /images/blog/prospera/r/new-home-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/prospera/new-home.jpg&quot; alt=&quot;The rebuilt home page: a dark, slow video of palm fronds behind white text reading We create high-performing neighborhoods that deliver greater value for People, Place, and Partners.&quot; width=&quot;1440&quot; height=&quot;900&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;The rebuilt home page. The control in the bottom corner pauses the video.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The “it’s live” email went out at 9:58.&lt;/p&gt;
&lt;h2 id=&quot;the-things-that-were-already-broken&quot;&gt;The things that were already broken&lt;/h2&gt;
&lt;p&gt;Two things were broken before I got there.&lt;/p&gt;
&lt;p&gt;The first was her email. On day one I went through the hosting read-only, without changing anything, and found that mail was set to route locally, while her actual email runs on Microsoft 365. Every message the contact form ever sent would have stopped on the web server. In the database were 66 messages from the old site’s form, dating from December 2023 to October 2026. I exported them to a spreadsheet and sent them to her with everything else at the end.&lt;/p&gt;
&lt;p&gt;The second was the server. The site was running PHP 7.4.33, which stopped being supported at the end of 2022. The week before launch, two critical remote-code-execution bugs were disclosed in PHP and were already being exploited. There was no official fix for 7.4. She was also paying GoDaddy a few dollars a year for an add-on whose only function is to keep you on a version that old. Everything from 8.2 onward is free.&lt;/p&gt;
&lt;p&gt;The fact that she’s paying anything at all to stay on an end-of-life PHP version is nuts for a brochure website. Extended support is for systems that are genuinely pinned: a vendor application, something under a compliance freeze. This is a brochure website. There’s nothing in it that can’t be upgraded.&lt;/p&gt;
&lt;p&gt;I’d have done the upgrade regardless, because I’m not going to put my name on a site that I can’t reliably say, on day one, is as secure and as up to date as I can reasonably assure it to be.&lt;/p&gt;
&lt;p&gt;It went to 8.3.36, every page came back identical, and the add-on came off with her approval.&lt;/p&gt;
&lt;h2 id=&quot;the-things-nobody-asked-for&quot;&gt;The things nobody asked for&lt;/h2&gt;
&lt;p&gt;The things I throw in that weren’t in the proposal, those are me.&lt;/p&gt;
&lt;p&gt;All of these little things I do after, at some point in my career, being confronted with what happens if you don’t. The professional embarrassment that hits you when one of these little gaps gets noticed.&lt;/p&gt;
&lt;p&gt;A perfect Lighthouse score matters to me so I can point to real numbers. Clients are always vaguely asking about SEO, and frankly they’re used to getting equally vague answers from SEO snake oil salesmen. This is something I can point at and say, this is how your website performs, and this is how it affects your search visibility. It’s a badge of pride.&lt;/p&gt;
&lt;p&gt;So many freelancers forget the branded 404 page. I used to, earlier in my career. Then there’s the author archive, which is one of those annoying things about WordPress, because people are using a blogging platform for everything except blogging. So you have to go in and hide comments and author archives. Because when they show up and people see them and they look like garbage, even if those people don’t care and just move on, I’m embarrassed by it. I don’t like that embarrassment.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/prospera/r/branded-404-480.avif 480w, /images/blog/prospera/r/branded-404-800.avif 800w, /images/blog/prospera/r/branded-404-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/prospera/r/branded-404-480.webp 480w, /images/blog/prospera/r/branded-404-800.webp 800w, /images/blog/prospera/r/branded-404-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/prospera/branded-404.jpg&quot; alt=&quot;The site&apos;s 404 page in the same navy and copper as the rest of it: ERROR 404 above the words Page not found, with buttons back to the home page and to Insights and Media.&quot; width=&quot;1440&quot; height=&quot;1064&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;Nobody asks for this one.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The video pause button is just good practice. I kind of get annoyed when clients want to take it out.&lt;/p&gt;
&lt;h2 id=&quot;would-i-do-it-again&quot;&gt;Would I do it again&lt;/h2&gt;
&lt;p&gt;Would I take another job finishing someone else’s half-built site? Sure. I’ve done it before, and this was probably one of the better ones, if not the best half-built site I’ve ever taken over. I’d do it again. I don’t think I’ll get a project where I’m resuming someone else’s work again, at least freelance, with as good a foundation as this one had.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/prospera/r/cta-band-480.avif 480w, /images/blog/prospera/r/cta-band-800.avif 800w, /images/blog/prospera/r/cta-band-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/prospera/r/cta-band-480.webp 480w, /images/blog/prospera/r/cta-band-800.webp 800w, /images/blog/prospera/r/cta-band-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/prospera/cta-band.jpg&quot; alt=&quot;A pale grey band reading Connect with Us, with the line About a project, a partnership, or a conversation, and a copper Contact button.&quot; width=&quot;1440&quot; height=&quot;238&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;The CTA band from the previous developer&apos;s kit, still running across the bottom of every page.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The CTA template from that first export is still on the site. It’s the band that runs across the bottom of every page, the one that disappeared during the import and had to be put back at ten o’clock at night. The wording is different now. The thing itself is his.&lt;/p&gt;
</content:encoded><category>case-study</category><category>wordpress</category></item><item><title>Documentaries should probably take a few years off</title><link>https://krizdingus.com/blog/documentaries-should-probably-take-a-few-years-off/</link><guid isPermaLink="true">https://krizdingus.com/blog/documentaries-should-probably-take-a-few-years-off/</guid><description>Somebody on Threads said You Can See Everything did to documentaries what Walk Hard did to musical biopics. I think they might be right, which is bad news for everybody else making documentaries.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Every so often, somebody makes something so good that it becomes everyone else’s problem.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I saw a post on Threads suggesting that Nathan Fielder and Lance Oppenheim’s &lt;em&gt;You Can See Everything&lt;/em&gt; has done to documentaries what &lt;em&gt;Walk Hard&lt;/em&gt; did to musical biopics. And that it’ll take the genre fifteen to twenty years to recover.&lt;/p&gt;
&lt;p&gt;I’m including Lance Oppenheim there because the last time I called it Nathan Fielder’s movie, somebody on Threads corrected me. Oppenheim co-directed it. Everyone knew what I meant. I was shitposting, not writing a Letterboxd review. I don’t even have a Letterboxd account.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/nathan-fielder-lance-oppenheim-480.avif 480w, /images/blog/documentaries/r/nathan-fielder-lance-oppenheim-800.avif 800w, /images/blog/documentaries/r/nathan-fielder-lance-oppenheim-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/nathan-fielder-lance-oppenheim-480.webp 480w, /images/blog/documentaries/r/nathan-fielder-lance-oppenheim-800.webp 800w, /images/blog/documentaries/r/nathan-fielder-lance-oppenheim-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/nathan-fielder-lance-oppenheim.jpg&quot; alt=&quot;Nathan Fielder in a dark zip-up jacket, and Lance Oppenheim in round glasses and a bow tie, smiling.&quot; width=&quot;1400&quot; height=&quot;933&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;&lt;em&gt;You Can See Everything&lt;/em&gt;, directed by Nathan Fielder and Lance Oppenheim. Both of them.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I think the post might be right. At the very least, documentary filmmakers should probably consider taking the rest of the year off. Spend some time with their families. Maybe get into woodworking.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Walk Hard&lt;/em&gt; took every convention of the musical biopic and played each one completely straight. The childhood tragedy is young Dewey Cox accidentally cutting his brother in half with a machete. His father spends the rest of the movie reminding him the wrong kid died. The drugs, the marriages, the backup singer who’s obviously the one, the run-in with the Beatles: it’s all in there. Before one show, somebody backstage explains, very seriously, that Dewey has to think about his entire life before he plays.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/walk-hard-sam-tim-meadows-480.avif 480w, /images/blog/documentaries/r/walk-hard-sam-tim-meadows-800.avif 800w, /images/blog/documentaries/r/walk-hard-sam-tim-meadows-1199.avif 1199w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/walk-hard-sam-tim-meadows-480.webp 480w, /images/blog/documentaries/r/walk-hard-sam-tim-meadows-800.webp 800w, /images/blog/documentaries/r/walk-hard-sam-tim-meadows-1199.webp 1199w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/walk-hard-sam-tim-meadows.jpg&quot; alt=&quot;Sam the drummer, played by Tim Meadows, stares into the camera in a smoky back room in Walk Hard.&quot; width=&quot;1199&quot; height=&quot;630&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;A24, marketing &lt;em&gt;You Can See Everything&lt;/em&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Walk Hard&lt;/em&gt; bombed at the box office. Hell, at the time I even worked at a movie theater, and I didn’t see it. Unless I was screening a print I’d built, I really wasn’t watching a lot of the movies. Part of it was lack of interest. Part of it was doing dumb townie things.&lt;/p&gt;
&lt;p&gt;I first saw &lt;em&gt;Walk Hard&lt;/em&gt; on DVD. We didn’t pay for cable TV in my twenty-something slacker apartment, just my PS2 slim for entertainment. Dudes would bring over DVDs and they’d become part of the collection, either from roommates or even random visitors. I never bought it. I don’t know whose copy it was. It was just there. Often DVDs would just be on loop for like 2 weeks straight. &lt;em&gt;Walk Hard&lt;/em&gt; ended up being one of them.&lt;/p&gt;
&lt;p&gt;John C. Reilly later told &lt;a href=&quot;https://www.theringer.com/2019/05/29/movies/walk-hard-dewey-cox-oral-history-john-c-reilly-music-biopic-jake-kasdan-judd-apatow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;The Ringer&lt;span class=&quot;sr-only&quot;&gt; (opens in a new tab)&lt;/span&gt;&lt;/a&gt;, “we tried to kill the musical biopic with this movie.” It didn’t work.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Bohemian Rhapsody&lt;/em&gt; came out eleven years later and made something like $900 million. Then came &lt;em&gt;Rocketman&lt;/em&gt;, &lt;em&gt;Elvis&lt;/em&gt;, &lt;em&gt;Bob Marley: One Love&lt;/em&gt; and &lt;em&gt;Back to Black&lt;/em&gt;. The reviews for nearly all of them brought up Dewey Cox at some point. You can hardly watch a musician struggle with addiction without expecting John C. Reilly to wander into the scene.&lt;/p&gt;
&lt;p&gt;I saw &lt;em&gt;Rocketman&lt;/em&gt;, largely because I like the song “Rocket Man,” as well as “I’m Still Standing.” I didn’t see the others, and legit had no interest in &lt;em&gt;Bohemian Rhapsody&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Fifteen to twenty years is weirdly specific. &lt;em&gt;Walk Hard&lt;/em&gt; came out nineteen years ago, so by that math musical biopics should be just about recovered. They spent the whole time winning Oscars.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/rami-malek-oscars-2019-480.avif 480w, /images/blog/documentaries/r/rami-malek-oscars-2019-800.avif 800w, /images/blog/documentaries/r/rami-malek-oscars-2019-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/rami-malek-oscars-2019-480.webp 480w, /images/blog/documentaries/r/rami-malek-oscars-2019-800.webp 800w, /images/blog/documentaries/r/rami-malek-oscars-2019-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/rami-malek-oscars-2019.jpg&quot; alt=&quot;Rami Malek at the Oscars podium in a tuxedo, smiling mid-speech with his Best Actor statuette.&quot; width=&quot;1280&quot; height=&quot;720&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;In lieu of flowers, four Oscars.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;So &lt;em&gt;Walk Hard&lt;/em&gt; made its genre look stupid. &lt;em&gt;You Can See Everything&lt;/em&gt; does something more inconsiderate. It makes the rest of its genre look like it hasn’t been trying particularly hard.&lt;/p&gt;
&lt;p&gt;Other people have careers. They’ve got mortgages. They’re trying to make perfectly respectable documentaries about unsolved murders, and here come Fielder and Oppenheim making everybody reconsider what it even means to know something. They could have just made a normal Elizabeth Holmes documentary. Alex Gibney already made one for HBO in 2019. Do you remember it? I don’t. Seven years went by before anybody made Gibney’s look like a rough draft.&lt;/p&gt;
&lt;p&gt;It’s worse when the timing is tight. &lt;em&gt;Planet of the Apes&lt;/em&gt; came out in 1968. It was a hit and got four sequels. People who’ve never seen it know how it ends. It also premiered about two months before &lt;em&gt;2001: A Space Odyssey&lt;/em&gt;. Nobody says &lt;em&gt;Planet of the Apes&lt;/em&gt; is bad. But &lt;em&gt;2001&lt;/em&gt; went on to be the greatest sci-fi film of all time. &lt;em&gt;Planet of the Apes&lt;/em&gt; became one of the most parodied movies for the next thirty years or so.&lt;/p&gt;
&lt;p&gt;The story goes that &lt;em&gt;2001&lt;/em&gt;’s ape-men were convincing enough that some people assumed Kubrick had just used apes. &lt;em&gt;Planet of the Apes&lt;/em&gt; got an honorary Oscar for its makeup. I’ve seen the original with Chuck Heston and the Tim Burton remake with Mark Wahlberg and honestly I dig both for what they are.&lt;/p&gt;
&lt;p&gt;Science fiction already had a long history with men in ape suits. Fifteen years earlier, the alien invader in &lt;em&gt;Robot Monster&lt;/em&gt; was a man in a gorilla suit wearing a diving helmet. I would watch that tonight, frankly. I’d watch an astronaut fight a rubber monster any night of the week. But after &lt;em&gt;2001&lt;/em&gt;, it got a lot harder to make one with a straight face.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/robot-monster-ro-man-480.avif 480w, /images/blog/documentaries/r/robot-monster-ro-man-528.avif 528w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/robot-monster-ro-man-480.webp 480w, /images/blog/documentaries/r/robot-monster-ro-man-528.webp 528w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/robot-monster-ro-man.jpg&quot; alt=&quot;The Ro-Man from Robot Monster, a man in a gorilla suit and a diving helmet, at his control console.&quot; width=&quot;528&quot; height=&quot;420&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;Science fiction, before Kubrick ruined it.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Kubrick wanted everything in that movie to look real, the apes and the spaceships both. He spent nearly three years on it. The film won the Oscar for special effects and the statue went to Kubrick alone. It’s the only one he ever won. The man’s entire Academy Award career is a group project he didn’t share credit on.&lt;/p&gt;
&lt;p&gt;Then he had the models and blueprints destroyed, so when somebody made a sequel sixteen years later, they had to build the spaceships again from scratch. I like that sequel, for the record. &lt;em&gt;2010&lt;/em&gt; is a completely different movie and very much a product of 1984, but it’s good. The Arthur C. Clarke novel it’s based on is even better.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;2001&lt;/em&gt; is the harder sell. People still watch it for the first time, usually because they’ve decided it’s time to get serious about movies. I first watched &lt;em&gt;2001&lt;/em&gt; sometime in high school, can’t remember exactly the year. I know it was a VHS copy, not a DVD, and I remember being a dork about it. It was late and I fell asleep twice watching it. I really wanted to love it, and in a lot of ways I do, but it can be a chore to watch.&lt;/p&gt;
&lt;p&gt;I recently saw someone on Threads give it “10/10. I kinda hated it.” Yeah, me too I guess. It’s a movie about space travel, evolution, artificial intelligence, and whatever the hell was happening in that hotel room. It takes all of it extremely seriously, including the long stretches where nothing happens.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/2001-a-space-odyssey-hotel-room-480.avif 480w, /images/blog/documentaries/r/2001-a-space-odyssey-hotel-room-800.avif 800w, /images/blog/documentaries/r/2001-a-space-odyssey-hotel-room-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/2001-a-space-odyssey-hotel-room-480.webp 480w, /images/blog/documentaries/r/2001-a-space-odyssey-hotel-room-800.webp 800w, /images/blog/documentaries/r/2001-a-space-odyssey-hotel-room-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/2001-a-space-odyssey-hotel-room.jpg&quot; alt=&quot;An astronaut in a red spacesuit stands in an ornate white bedroom near the end of 2001.&quot; width=&quot;1400&quot; height=&quot;788&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;Whatever the hell this is.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A lot of what seemed strange about &lt;em&gt;2001&lt;/em&gt; in 1968 is just how space movies work now. Space travel involves waiting rooms. The computer talks in a soothing voice while it’s trying to kill you. Nobody calls that Kubrick anymore. It’s just what space looks like.&lt;/p&gt;
&lt;p&gt;Ridley Scott, who made &lt;em&gt;Alien&lt;/em&gt; and &lt;em&gt;Blade Runner&lt;/em&gt;, said in 2007 that science fiction was as dead as the western and nothing would ever beat &lt;em&gt;2001&lt;/em&gt;. Then he went and made &lt;em&gt;Prometheus&lt;/em&gt;, &lt;em&gt;The Martian&lt;/em&gt; and &lt;em&gt;Alien: Covenant&lt;/em&gt;. For a dead genre, he sure kept showing up for work. Those three movies together made $1.3 billion worldwide, fyi. Remarkably productive zombie genre.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/prometheus-2012-480.avif 480w, /images/blog/documentaries/r/prometheus-2012-800.avif 800w, /images/blog/documentaries/r/prometheus-2012-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/prometheus-2012-480.webp 480w, /images/blog/documentaries/r/prometheus-2012-800.webp 800w, /images/blog/documentaries/r/prometheus-2012-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/prometheus-2012.jpg&quot; alt=&quot;Prometheus art: a giant alien ship crashes nose-first while four people in spacesuits run from it.&quot; width=&quot;1400&quot; height=&quot;788&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;&lt;em&gt;Prometheus&lt;/em&gt; (2012), five years after the death of science fiction.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;George Miller was seventy when &lt;em&gt;Mad Max: Fury Road&lt;/em&gt; came out, which seems unnecessarily hostile to the career prospects of younger directors. It took him about fifteen years to get it made. At one point the production had to move to Namibia because it rained so much in the Australian desert that the desert bloomed into wildflowers. His cinematographer, John Seale, was even older. He was retired until Miller talked him back into it.&lt;/p&gt;
&lt;p&gt;What they came back with is a movie where a group of people drive across a desert, find out they don’t like what’s on the other side, and drive back. There’s barely any dialogue. And it’s fantastic.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/fury-road-going-480.avif 480w, /images/blog/documentaries/r/fury-road-going-800.avif 800w, /images/blog/documentaries/r/fury-road-going-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/fury-road-going-480.webp 480w, /images/blog/documentaries/r/fury-road-going-800.webp 800w, /images/blog/documentaries/r/fury-road-going-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/fury-road-going.jpg&quot; alt=&quot;The War Rig from Mad Max: Fury Road rolls out across orange desert, escort cars trailing behind.&quot; width=&quot;1400&quot; height=&quot;580&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;Going.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/fury-road-coming-back-480.avif 480w, /images/blog/documentaries/r/fury-road-coming-back-800.avif 800w, /images/blog/documentaries/r/fury-road-coming-back-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/fury-road-coming-back-480.webp 480w, /images/blog/documentaries/r/fury-road-coming-back-800.webp 800w, /images/blog/documentaries/r/fury-road-coming-back-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/fury-road-coming-back.jpg&quot; alt=&quot;The War Rig races back across the sand beside a chrome-grilled tanker whose rear is on fire.&quot; width=&quot;1400&quot; height=&quot;580&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;Coming back.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I saw some guys arguing in a comment section somewhere and one guy said the action’s so easy to follow because the movie has less cuts. That comment had a lot of likes, so I figured that made some sense but then fact-checked it like a dork and found out that’s garbage and that it has about 2,700 shots. I looked up &lt;em&gt;The Road Warrior&lt;/em&gt; for shits and giggles to find out &lt;em&gt;Fury Road&lt;/em&gt; has over twice as many.&lt;/p&gt;
&lt;p&gt;Apparently nearly everything important sits &lt;a href=&quot;https://vashivisuals.com/the-editing-of-mad-max-fury-road/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;right in the middle of the frame&lt;span class=&quot;sr-only&quot;&gt; (opens in a new tab)&lt;/span&gt;&lt;/a&gt;, so you never have to go looking for it. There’s a name for this, “crosshair framing,” and I’m going to act like I already knew that. Most people probably never notice it. I can’t say I particularly noticed that either. Most times when I’m watching it I’m just appreciating the spectacle.&lt;/p&gt;
&lt;p&gt;Hard to imitate something people don’t even notice. &lt;em&gt;The Matrix&lt;/em&gt; was the opposite. Everybody noticed bullet time. It turned up in so many movies and commercials that &lt;em&gt;Shrek&lt;/em&gt; was making fun of it two years later.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/matrix-trinity-kick-480.avif 480w, /images/blog/documentaries/r/matrix-trinity-kick-800.avif 800w, /images/blog/documentaries/r/matrix-trinity-kick-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/matrix-trinity-kick-480.webp 480w, /images/blog/documentaries/r/matrix-trinity-kick-800.webp 800w, /images/blog/documentaries/r/matrix-trinity-kick-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/matrix-trinity-kick.jpg&quot; alt=&quot;Trinity from The Matrix hangs frozen mid-air, knee raised, about to kick a police officer.&quot; width=&quot;1400&quot; height=&quot;788&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;1999.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/shrek-fiona-bullet-time-480.avif 480w, /images/blog/documentaries/r/shrek-fiona-bullet-time-800.avif 800w, /images/blog/documentaries/r/shrek-fiona-bullet-time-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/shrek-fiona-bullet-time-480.webp 480w, /images/blog/documentaries/r/shrek-fiona-bullet-time-800.webp 800w, /images/blog/documentaries/r/shrek-fiona-bullet-time-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/shrek-fiona-bullet-time.jpg&quot; alt=&quot;Princess Fiona from Shrek frozen mid-air in a Matrix-style slow-motion shot beside Robin Hood&apos;s men.&quot; width=&quot;1400&quot; height=&quot;788&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;2001.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Shrek&lt;/em&gt; opens with a storybook fairy tale. Then Shrek tears out a page and takes it to the outhouse. It was made by a studio run by a guy who’d left Disney on very bad terms. A good chunk of it is making fun of Disney, down to a castle town with turnstiles at the entrance.&lt;/p&gt;
&lt;p&gt;Unlike &lt;em&gt;Walk Hard&lt;/em&gt;, it actually worked. Before &lt;em&gt;Shrek&lt;/em&gt;, animated fairy tales were mostly told with a straight face. After it, for about a decade, a lot of animated movies came with pop songs, celebrity voices, and a main character who knew exactly how stupid fairy tales were. Some of that was the wrong lesson. Other studios saw how much money &lt;em&gt;Shrek&lt;/em&gt; made and decided the secret was the smirk.&lt;/p&gt;
&lt;p&gt;I caught scenes and was familiar with a lot of these movies because I was a manager and projectionist from like 2003 into 2010. I built the print for &lt;em&gt;Shark Tale&lt;/em&gt; when it came in, so I had to watch it. Bobby De Niro plays a shark who learns to accept his gay son. I liked the movie and got so tickled at the idea of it being a spiritual follow-up to &lt;em&gt;Goodfellas&lt;/em&gt; that I wrote a piece about it for a freshman writing class. I never turned it in. &lt;em&gt;Madagascar&lt;/em&gt; and &lt;em&gt;Over the Hedge&lt;/em&gt; brought lots of kids in. The only thing I recall about &lt;em&gt;Hoodwinked&lt;/em&gt; is smoking cigarettes outside the theater, looking at that poster and thinking, oh, another one.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/goodfellas-jimmy-henry-courthouse-480.avif 480w, /images/blog/documentaries/r/goodfellas-jimmy-henry-courthouse-800.avif 800w, /images/blog/documentaries/r/goodfellas-jimmy-henry-courthouse-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/goodfellas-jimmy-henry-courthouse-480.webp 480w, /images/blog/documentaries/r/goodfellas-jimmy-henry-courthouse-800.webp 800w, /images/blog/documentaries/r/goodfellas-jimmy-henry-courthouse-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/goodfellas-jimmy-henry-courthouse.jpg&quot; alt=&quot;Robert De Niro as Jimmy Conway, his arm around a teenage Henry Hill in a courtroom in Goodfellas.&quot; width=&quot;1400&quot; height=&quot;783&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;&lt;em&gt;Shark Tale&lt;/em&gt;, 2004.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Eventually even Disney came around. In &lt;em&gt;Enchanted&lt;/em&gt;, they made fun of their own princesses. In &lt;em&gt;Frozen&lt;/em&gt;, a big part of the point is that you shouldn’t marry a guy you met that afternoon, which would have been news to about half the Disney catalog.&lt;/p&gt;
&lt;p&gt;Disney used to make documentaries. In 1959 it won the Oscar for Best Documentary Feature with &lt;em&gt;White Wilderness&lt;/em&gt;, a 1958 nature film best remembered for a scene of lemmings hurling themselves off a cliff into the sea.&lt;/p&gt;
&lt;p&gt;Lemmings don’t do that. The crew brought them in and pushed them off. It was also filmed in Alberta, which is landlocked. Nobody really found out until a Canadian TV investigation in 1982. And I didn’t know it was a myth until researching this essay.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/white-wilderness-lemmings-480.avif 480w, /images/blog/documentaries/r/white-wilderness-lemmings-624.avif 624w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/white-wilderness-lemmings-480.webp 480w, /images/blog/documentaries/r/white-wilderness-lemmings-624.webp 624w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/white-wilderness-lemmings.jpg&quot; alt=&quot;Lemmings at the edge of a rocky cliff against a deep blue sky in White Wilderness.&quot; width=&quot;624&quot; height=&quot;476&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;Lemmings, moments before a documentary.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Documentaries have been staging things for about as long as they’ve been winning awards. They’re still around. Thirty years after &lt;em&gt;White Wilderness&lt;/em&gt;, Errol Morris staged reenactments in &lt;em&gt;The Thin Blue Line&lt;/em&gt; on purpose and in the open. He got criticized for it. He also helped get an innocent man out of prison. I’ve not seen that one, but the shot everybody brings up is a milkshake hitting the pavement in slow motion. And evidently every true-crime series has felt entitled to one since.&lt;/p&gt;
&lt;p&gt;Elizabeth Holmes, who founded the blood-testing company Theranos, is about as true-crime as a subject gets without anybody getting murdered. There’s a whole Hulu miniseries with Amanda Seyfried, which people have actually heard of. You could make one more with a slow-motion shot of a vial of blood hitting the floor. It would do fine. It’s pronounced “SY-fred,” by the way. I learned that from the movie.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/the-dropout-amanda-seyfried-480.avif 480w, /images/blog/documentaries/r/the-dropout-amanda-seyfried-800.avif 800w, /images/blog/documentaries/r/the-dropout-amanda-seyfried-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/the-dropout-amanda-seyfried-480.webp 480w, /images/blog/documentaries/r/the-dropout-amanda-seyfried-800.webp 800w, /images/blog/documentaries/r/the-dropout-amanda-seyfried-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/the-dropout-amanda-seyfried.jpg&quot; alt=&quot;Amanda Seyfried as Elizabeth Holmes in The Dropout, in a black turtleneck, sitting on a white bench.&quot; width=&quot;1200&quot; height=&quot;800&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;Amanda Seyfried (SY-fred).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Holmes and her partner, Billy Evans, invited the two directors into a rented beach house thirty-four days before she went to prison. Then Fielder and Oppenheim just kept filming. For three years. A24 told them there was no deadline. If nothing came of it they could scrap the whole thing.&lt;/p&gt;
&lt;p&gt;I mean A24 has this reputation of being THE it studio, the cool kids. So it’s not a surprise and honestly just annoyingly cool. Like, nobody is that cool with me.&lt;/p&gt;
&lt;p&gt;Fielder was supposed to stay behind the camera. That didn’t last. It’s funny, except when it’s upsetting. I’m not going to try to describe what happens.&lt;/p&gt;
&lt;p&gt;So what is it about the movie? I guess it’s more about what it doesn’t do? The doc really doesn’t attempt to argue for or against Holmes’s innocence or guilt directly. If anything, it documents Fielder desperately wanting to believe his subject is being genuine, but he can’t, because the evidence he knows contradicts all of it. Her shit with Theranos is barely even discussed, outside of a part about the meaning of a word and “how she communicated it.” If your only knowledge of Theranos and Holmes is from that doc, you might wonder, “Well, was that even so bad?” The other things she did, such as falsifying endorsements and misleading people about where the tests were actually coming from, aren’t even discussed. But Fielder knows, and I know, and I suspect most of the people going on opening night know too.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/you-can-see-everything-billy-evans-480.avif 480w, /images/blog/documentaries/r/you-can-see-everything-billy-evans-800.avif 800w, /images/blog/documentaries/r/you-can-see-everything-billy-evans-1200.avif 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/you-can-see-everything-billy-evans-480.webp 480w, /images/blog/documentaries/r/you-can-see-everything-billy-evans-800.webp 800w, /images/blog/documentaries/r/you-can-see-everything-billy-evans-1200.webp 1200w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/you-can-see-everything-billy-evans.jpg&quot; alt=&quot;An extreme close-up of Billy Evans, Holmes&apos;s partner, in You Can See Everything.&quot; width=&quot;1400&quot; height=&quot;934&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;This fucking guy...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A critic at the &lt;a href=&quot;https://www.cbc.ca/news/entertainment/you-can-see-everything-review-9.7382874&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CBC&lt;span class=&quot;sr-only&quot;&gt; (opens in a new tab)&lt;/span&gt;&lt;/a&gt;, which is also the outfit that caught Disney with the lemmings, suggested it’s so original it might undermine the whole idea of documentaries. That’s basically the Threads joke, but from Canada’s public broadcaster.&lt;/p&gt;
&lt;p&gt;Stephanie Zacharek at &lt;a href=&quot;https://time.com/article/2026/10/15/you-can-see-everything-movie-review/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Time&lt;span class=&quot;sr-only&quot;&gt; (opens in a new tab)&lt;/span&gt;&lt;/a&gt; was less impressed. She argued that what the movie’s asking, about how a documentary maker relates to the person he’s filming, is only news to people who haven’t been watching documentaries very closely. Yeah I kinda think she’s right, even from just the handful I’ve seen: &lt;em&gt;Grey Gardens&lt;/em&gt;, which she mentions directly, and &lt;em&gt;Exit Through the Gift Shop&lt;/em&gt;. Plus I was an angsty teenager during the second Bush presidency, so yeah, I’ve got &lt;em&gt;Fahrenheit 9/11&lt;/em&gt; and &lt;em&gt;Bowling for Columbine&lt;/em&gt; on the DVD shelf. I think this trend is more obvious the more aware of it you are.&lt;/p&gt;
&lt;p&gt;I do think it changes things for documentaries. The part everybody can see is the director on camera, looking uncomfortable. That’s the easy part. Nathan Fielder has been doing it for over a decade. One potential outcome of this is seeing a lot more documentaries where the documentarian awkwardly inserts himself, or where absurdity, deception, and drama exist in levels that typically exist in, well, fiction. &lt;em&gt;Super Size Me&lt;/em&gt; seemed to inspire imitators, why not this? Alternatively, maybe the right lessons will get learned, and some of the stuff that other lady gripes about will fall out of fashion.&lt;/p&gt;
&lt;p&gt;It’s worth seeing. And yeah, it matters, at least for the next fifteen years or so. Maybe.&lt;/p&gt;
&lt;p&gt;Before this, my favorite documentary was &lt;em&gt;The Wild and Wonderful Whites of West Virginia&lt;/em&gt;. It follows one family in Boone County through a year of drug deals, court dates, and mountain dancing.&lt;/p&gt;
&lt;p&gt;Jesco, the dancer in the family, got his own documentary back in 1991, &lt;em&gt;Dancing Outlaw&lt;/em&gt;. In that one he’s extremely particular about his eggs. &lt;em&gt;You Can See Everything&lt;/em&gt; has a man like that too.&lt;/p&gt;
&lt;figure&gt;
  &lt;picture&gt;
    &lt;source type=&quot;image/avif&quot; srcset=&quot;/images/blog/documentaries/r/dancing-outlaw-jesco-white-480.avif 480w, /images/blog/documentaries/r/dancing-outlaw-jesco-white-622.avif 622w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;source type=&quot;image/webp&quot; srcset=&quot;/images/blog/documentaries/r/dancing-outlaw-jesco-white-480.webp 480w, /images/blog/documentaries/r/dancing-outlaw-jesco-white-622.webp 622w&quot; sizes=&quot;(max-width: 640px) calc(100vw - 48px), 580px&quot; /&gt;
    &lt;img src=&quot;https://krizdingus.com/images/blog/documentaries/dancing-outlaw-jesco-white.jpg&quot; alt=&quot;A young Jesco White in a rose-embroidered western shirt, hand on his chest, in Dancing Outlaw.&quot; width=&quot;622&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
  &lt;/picture&gt;
  &lt;figcaption&gt;One of the two egg men discussed in this essay.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Somebody will make an excellent doc about murder next year, or one about some commonly used substance that your girlfriend is gonna be annoying about and now you got to buy all new shit, or another one that will get people talking about some niche conspiracy for a week. They just won’t be quite as comfortable to make, because once somebody demonstrates what’s possible, everybody else is stuck knowing about it.&lt;/p&gt;
&lt;hr&gt;
&lt;p class=&quot;post-credits&quot;&gt;&lt;small&gt;Pictures: stills and publicity art from &lt;em&gt;Walk Hard: The Dewey Cox Story&lt;/em&gt; (Columbia), &lt;em&gt;2001: A Space Odyssey&lt;/em&gt; (MGM), &lt;em&gt;Prometheus&lt;/em&gt; (20th Century Fox), &lt;em&gt;Mad Max: Fury Road&lt;/em&gt;, &lt;em&gt;The Matrix&lt;/em&gt; and &lt;em&gt;Goodfellas&lt;/em&gt; (Warner Bros.), &lt;em&gt;Shrek&lt;/em&gt; (DreamWorks), &lt;em&gt;White Wilderness&lt;/em&gt; (Disney) and &lt;em&gt;The Dropout&lt;/em&gt; (Hulu; photo by Beth Dubber) and &lt;em&gt;You Can See Everything&lt;/em&gt; (A24), plus a frame from the 91st Academy Awards (A.M.P.A.S.) and one from &lt;em&gt;Dancing Outlaw&lt;/em&gt; (1991, Jacob Young, West Virginia public television), used here for commentary. The &lt;em&gt;Robot Monster&lt;/em&gt; trailer (1953) is in the public domain. Photos of &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Nathan_Fielder.jpg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Nathan Fielder&lt;span class=&quot;sr-only&quot;&gt; (opens in a new tab)&lt;/span&gt;&lt;/a&gt; by Wikimedia Commons user Northwest and &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Lance_Oppenheim_at_the_83rd_Venice_International_Film_Festival_(cropped).jpg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Lance Oppenheim&lt;span class=&quot;sr-only&quot;&gt; (opens in a new tab)&lt;/span&gt;&lt;/a&gt; by Colleen Sturtevant, both &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CC BY-SA 4.0&lt;span class=&quot;sr-only&quot;&gt; (opens in a new tab)&lt;/span&gt;&lt;/a&gt;, cropped, resized and put side by side here (that combined picture is CC BY-SA 4.0 too).&lt;/small&gt;&lt;/p&gt;
</content:encoded><category>movies</category></item><item><title>A theme is a folder</title><link>https://krizdingus.com/blog/a-theme-is-a-folder/</link><guid isPermaLink="true">https://krizdingus.com/blog/a-theme-is-a-folder/</guid><description>This site has a second look, an old-computer desktop called XP mode, and you only get it if you ask. Here&apos;s how it&apos;s built so the normal pages never have to carry it.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you’re on a laptop or a desktop computer right now, there’s a little arrow up in the header, right next to the light and dark button. Open it and there’s an entry that says XP mode, with a tiny pixel drawing of an old CRT monitor next to it. Pick it and the page you’re reading switches off like an old tube TV and comes back as the desktop of a computer that doesn’t exist. Same post, but now it’s sitting inside a window, with icons, a taskbar and a Start menu around it. The first time you go in there’s a boot screen too, which you can skip (and which never plays if your computer is set to cut down on motion). You can also just type the word “boot” anywhere on the site, as long as you’re not in a text box, and you’ll end up in the same place.&lt;/p&gt;
&lt;p&gt;That boot screen is from the old one-page site, typing animations and all. It’s nice recycling code you’ve used before, especially code you’re proud of. I threw a lot of work into animations like that, and I was really proud of them when they were finished. And I’m glad they worked without that much reworking. I was thrilled with myself that I was able to reuse them.&lt;/p&gt;
&lt;p&gt;The XP is for Windows XP, roughly. It’s not trying to be an exact copy of anything. Why XP is covered in &lt;a href=&quot;https://krizdingus.com/blog/time-for-a-bigger-site/&quot;&gt;Time for a bigger site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Phones don’t get the XP option at all. The desktop/XP experience just doesn’t fit well on phones, or even small tablets. I could have engineered media queries for every damn pixel breakpoint, and nothing would have justified all that effort for what would ultimately be a stripped-down experience that didn’t accomplish what the design was meant to do and wasn’t good for users.&lt;/p&gt;
&lt;h2 id=&quot;two-looks-one-site&quot;&gt;Two looks, one site&lt;/h2&gt;
&lt;p&gt;On a lot of sites a theme switch just means light or dark. This site has that too, in the same little menu: Auto, which just goes along with whatever your device is set to, plus Light and Dark.&lt;/p&gt;
&lt;p&gt;I wanted to tackle themes, and I wanted to do it the opposite way of WordPress. WordPress is based on PHP templates that sit on the server. You can only have one active theme at a time. And switching the theme often, like 99% of the time, wrecks your entire website. I’ve worked in it for years and had a love-hate relationship with WordPress and WordPress themes. And in all fairness, this isn’t WordPress’s fault. Their own rules say that you’re not supposed to stuff your theme with custom shortcodes and whatnot, and that stuff should be left for plugins so that your whole site doesn’t get wrecked when you change themes. People do it anyway, especially in a lot of these bloated multipurpose themes that stuff in page builders, which clients love and developers groan about. Or at least this developer does. That’s what leads to WordPress being a shit show. Shopify is in theory better, but I think anyone that’s worked on enough custom Shopify builds, or inherited them, will find that same issue has crept in there as well.&lt;/p&gt;
&lt;p&gt;Unlike with WordPress, where the website administrator gets to choose a theme, here the user, you, gets to decide whether you want to view my website like a normal human being, or like me. None of the content on the website, the blog posts, the write-ups on my projects, the about page, none of it has any idea what the theme is. It’s blissfully unaware. Happy idiots. Switching themes does nothing, really, apart from deciding which set of instructions the website uses to paint itself.&lt;/p&gt;
&lt;p&gt;So yeah, I guess the better analogy is a Winamp skin. I don’t know how to describe those to the kids these days. Like changing your Fortnite character skin or something.&lt;/p&gt;
&lt;p&gt;For most of this rebuild the desktop was the site, and the plain version was a setting in the Start menu. There was even a popup asking if it was all too much. The popup’s gone.&lt;/p&gt;
&lt;p&gt;Do I use XP mode myself? Haha, not really. That’s why normal mode was created. It started out as an optional secondary theme after I figured the faux computer desktop gimmick might get old quick. Eventually, I decided that I needed to get over that stuff I was going through and serious up my website a bit. That old secondary mode is what became normal mode, although it was obviously more of an afterthought. It looked like the fake web pages in XP mode, just without the desktop wrapper. It wasn’t bad, but it wasn’t intentional. It was a “fine, fuck it” solution that didn’t belong in a website that’s meant to be “mine” and showcase me, the guy with 100% creative control over the site.&lt;/p&gt;
&lt;p&gt;At a certain point, I had stepped away from working on the website to work on other things. And then as I was looking at it, I was like, well, it’s too boring. And it was boring by design, because it was initially done sarcastically. Oh, so you don’t like my cool-ass ridiculous website? Fine, here you go, your LinkedIn version. But now that it wasn’t a sarcastic afterthought and a joke, and I needed to take it seriously, I needed this more readable, more serious mode to at least reflect the whimsy I’ve always wanted my website to have.&lt;/p&gt;
&lt;p&gt;Landing on the fonts was actually kind of difficult. I was trying to find a good pairing that could stand out. But at the same time, it’s a lot of the same fonts that you generally go back to. Eventually, those two, Figtree and Saira, however that’s pronounced, made sense.&lt;/p&gt;
&lt;p&gt;Dark mode is plum. I’m a dark mode fan, but I really hate just black and gray dark modes. I found plum to be a really nice, dark background color that could serve the same purpose as black without the starkness, the oppressiveness of black. I’d considered other colors. I’d considered blues and reds, influenced by the auditoriums of movie theaters. They often use those colors because, at least in my observation, they look great in the dark. They don’t really conflict with a lot in the dark. Nice burgundies and dark blues. I wanted the dark modes to feel like the curtains had come down, I guess. And the plum was already in line with the sort of retro Game Boy color palette that I already kind of wanted to stick with, or at least be influenced by.&lt;/p&gt;
&lt;p&gt;And now normal mode is my favorite. I’m typically a dark mode guy, but now my website has a light mode I really like that doesn’t totally burn my retinas. I swap between light and dark depending on my mood.&lt;/p&gt;
&lt;p&gt;Normal mode is the default now: a plain header, the page and a footer, and it works with JavaScript turned off. You only get the desktop if you ask for it, or if you open one of the little app pages on a computer, which I’ll get to.&lt;/p&gt;
&lt;p&gt;There’s only one theme. I wanted it to work like a real feature, lightweight and accessible. Some of it is also just showing off, and this post is kind of that part. I don’t really mean showing off for developers, though. Just showing off for myself, some other developer friends, and mostly, I guess, trying to inspire whimsy through subtle fun things.&lt;/p&gt;
&lt;p&gt;I miss when the web was fun and weird, back in the ’90s and the early 2000s. Somewhere along the way after Web 2.0 (I sound like an old man), while making the internet more accessible for everyone, we softened all the corners and smoothed out a lot of the edges. I mean, the weirdness is still there, but it’s contained. There was a period there where the internet was just a little bit more wild. And yet somehow not really as disgusting as it is today. Anyway, XP mode is that whimsy of back when we used to “go on the computer.” So it’s just sort of showing off that I can do it.&lt;/p&gt;
&lt;p&gt;It gets more technical from here.&lt;/p&gt;
&lt;h2 id=&quot;the-manifest&quot;&gt;The manifest&lt;/h2&gt;
&lt;p&gt;Each theme is a folder, &lt;code&gt;src/themes/&amp;lt;id&amp;gt;/&lt;/code&gt;, and one of the two files it has to have is a manifest. That’s just a small file of facts about the theme: what it’s called, a one-line description, where it’s allowed to run. This is the top of the one for XP mode:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; manifest&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThemeManifest&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  id: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;xp&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  name: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;XP mode&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  description: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;The same site as a fake old-PC desktop: windows, a taskbar, a Start menu and a boot screen.&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Desktop only: a wide viewport and a mouse or trackpad. Never phones.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  availability: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;(min-width: 1024px) and (pointer: fine)&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The rest of it covers the menu entry’s text and its little pixel-CRT icon, the keyframes for the swap, and a word you can type on the normal site to get in. That’s where “boot” comes from. There’s also &lt;code&gt;appRoutes: true&lt;/code&gt;, which says the app pages under &lt;code&gt;/apps/&lt;/code&gt;, like the MediaKruzer video player, open in this theme. On a computer that can run XP mode, those pages come up as the desktop no matter what you picked.&lt;/p&gt;
&lt;p&gt;The manifest has to stay pure data, just values and no code, because the build pastes pieces of it into the head of every page. The head is the part of the HTML the browser reads before it shows you anything. The site is built with Astro, which turns every page into a plain HTML file ahead of time, so “every page” really does mean every file.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;availability&lt;/code&gt; is a media query, which is a question the page asks the browser about the screen it’s on. This one asks two things: is the window at least 1024 pixels wide, and is there a mouse or a trackpad? A phone’s touchscreen doesn’t count, so phones never pass. Shrink the window under 1024 pixels while you’re in the desktop and the runtime, the small script that runs the whole theme system, drops you back to the normal site.&lt;/p&gt;
&lt;h2 id=&quot;finding-themes&quot;&gt;Finding themes&lt;/h2&gt;
&lt;p&gt;Nothing keeps a list of themes. The theme system just globs for them, which means it looks for every file that matches a pattern, here any &lt;code&gt;&amp;lt;id&amp;gt;.theme.ts&lt;/code&gt; one folder down:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; themeEntries&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThemeEntry&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; pairThemes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  themeManifests,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;glob&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ThemeModule&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;./*/*.theme.ts&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That glob is lazy. Vite, the tool Astro uses to bundle up the JavaScript, builds each &lt;code&gt;&amp;lt;id&amp;gt;.theme.ts&lt;/code&gt; as its own chunk, a separate JavaScript file, and the browser only fetches it when that theme mounts, which is the word for a theme actually getting switched on. Normal pages never download the desktop.&lt;/p&gt;
&lt;h2 id=&quot;the-contract&quot;&gt;The contract&lt;/h2&gt;
&lt;p&gt;Every theme hands the runtime the same few things, so the runtime never has to know anything about a particular theme. A theme module exports this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; interface&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThemeModule&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  /** Stylesheet URLs (import them with `?url`). The runtime adds them before&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   *  mount() and removes them after unmount(), so theme CSS needs no scoping. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  styles&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  /** Transform the page. Called after styles have loaded and after&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   *  &amp;lt;html data-skin=&quot;&amp;lt;id&amp;gt;&quot;&amp;gt; is set. Must not await long work (the view&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   *  transition holds the screen until it returns). */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  mount&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThemeContext&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Promise&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  /** Put every node you moved back where it was. Listeners on ctx.signal and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   *  ctx.onCleanup callbacks are handled for you. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  unmount&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThemeContext&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Promise&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mount switches the theme on, unmount switches it off. Theme CSS can be as heavy-handed as it likes, since it’s only on the page while the theme is mounted. The context handed to &lt;code&gt;mount()&lt;/code&gt; carries an &lt;code&gt;AbortSignal&lt;/code&gt;, which is basically a kill switch: it gets pulled right before &lt;code&gt;unmount()&lt;/code&gt;, and any event listener the theme attached with it removes itself.&lt;/p&gt;
&lt;p&gt;The XP theme moves the page’s &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; into an OS window and builds a desktop, taskbar and Start menu around it. Its &lt;code&gt;unmount()&lt;/code&gt; puts &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; back where it found it. It moves the real thing instead of making a copy, so the page’s scripts, where your keyboard focus was and anything you’d typed into a form all survive the trip, both ways.&lt;/p&gt;
&lt;h2 id=&quot;before-first-paint&quot;&gt;Before first paint&lt;/h2&gt;
&lt;p&gt;If you left the site in XP mode, the next page has to know that before it draws anything. Otherwise you’d get the normal site for a beat and then watch it turn into a desktop. So there’s a small script in the head that runs before the page draws, and the browser waits for it. It reads your stored choice, checks it against the theme’s media query, and marks the page as pending. Then this bit of CSS keeps the page hidden until the theme mounts:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;:root&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;data-skin-pending&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;:not&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;data-skin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;:not&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;data-motion-ok&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  visibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;hidden&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  animation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: skin-failsafe &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; linear&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; forwards&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; !important&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;@keyframes&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt; skin-failsafe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;visibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;visible&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; } }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That animation is a timer. It lasts zero seconds and starts after four, so if the theme never arrives, because you’re offline or something blocked the script, the page shows up anyway.&lt;/p&gt;
&lt;h2 id=&quot;the-swap&quot;&gt;The swap&lt;/h2&gt;
&lt;p&gt;The runtime fetches the theme module and its stylesheets before it touches the page. Each stylesheet goes in with &lt;code&gt;link.media = &apos;not all&apos;&lt;/code&gt;. A stylesheet whose media query matches nothing still downloads. It just doesn’t apply. At mount the runtime flips it to &lt;code&gt;all&lt;/code&gt;, so the swap itself is instant, and all the network stuff happens while the old page is still up.&lt;/p&gt;
&lt;p&gt;If your browser has View Transitions, a newer feature where the browser snapshots the old page and lets you animate from it to the new one, the swap runs inside one, and the manifest supplies the keyframes. For XP the old page collapses like a CRT powering off in 240 milliseconds and the new one powers on in 320. You can tell your computer you want less motion on screen (&lt;code&gt;prefers-reduced-motion&lt;/code&gt;, most operating systems have a setting for it), and then there’s no transition and the page just changes.&lt;/p&gt;
&lt;p&gt;The choice goes in &lt;code&gt;localStorage&lt;/code&gt;, the little box of settings your browser keeps for each site, under &lt;code&gt;krizdingus-skin&lt;/code&gt;. &lt;code&gt;krizdingus-theme&lt;/code&gt; was already the light and dark setting.&lt;/p&gt;
&lt;h2 id=&quot;theme-2&quot;&gt;Theme #2&lt;/h2&gt;
&lt;p&gt;A second theme would need a folder with a &lt;code&gt;manifest.ts&lt;/code&gt; and an &lt;code&gt;&amp;lt;id&amp;gt;.theme.ts&lt;/code&gt; that exports &lt;code&gt;styles&lt;/code&gt;, &lt;code&gt;mount&lt;/code&gt; and &lt;code&gt;unmount&lt;/code&gt;. The layout adds a menu entry for every manifest it finds, and the runtime wires it up. Adding one doesn’t mean editing anything outside its folder.&lt;/p&gt;
&lt;p&gt;In the tests, a stub theme that’s just its own folder goes through the same discovery and mounts with nothing else edited.&lt;/p&gt;
&lt;p&gt;XP itself doesn’t meet that bar yet. The home page has a few empty slots for it to fill, and the app embed pages import its stylesheet straight out of the XP folder.&lt;/p&gt;
&lt;p&gt;I’m a little embarrassed to admit that the theme currently fails at the goal of never touching anything outside of the folder. That’s something I’m going to fix, but I just wanted to launch it anyway. So yeah, there are two places where I break my own rule. I can beat myself up for that and then fix them. That’s what I’ll do.&lt;/p&gt;
&lt;h2 id=&quot;unfinished&quot;&gt;Unfinished&lt;/h2&gt;
&lt;p&gt;As for how XP mode turned out, I’m pleased. It’s still “unfinished” in that there are things I wanted it to include that I just sort of abandoned, not for lack of interest, but for the sake of actually finishing the website. Isn’t that how any theme gets shipped?&lt;/p&gt;
&lt;p&gt;I wanted to include games. Not Minesweeper or Solitaire. Those have been done to death. Maybe a clone of that one pinball game with the astronaut, Space Cadet. I sank so many hours into that game. Or a take on SkiFree, where the goddamn yeti straight demolishes you at the end. Maybe even a parody of Doom. I wanted separate media players, one for video and one for audio, and the audio one to resemble Winamp. But I sort of gave up on that because I was going to try to play the music from Spotify, and their API was more restrictive than I’d like. So the whole Winamp idea, I didn’t even begin. I wanted users to get fake spam popups. I even wanted to include an AOL homage with dial-up sounds and all that goofy bullshit. Yeah, a lot. Maybe one day.&lt;/p&gt;
&lt;p&gt;I guess what I’m saying is I could have worked at this and just kept working at this and never relaunched my site. What I started, I think, at the beginning of the summer slowly became just something that wasn’t getting done, because I just kept finding things that needed to be tweaked. At a certain point, you just gotta say, nope, you know what? We’re shipping it, and then we’ll fix what’s broke.&lt;/p&gt;
&lt;p&gt;So, I’ll probably be inspired to make new themes later. The framework is pretty much there. Just no imminent plans. If a second one ever shows up, it gets a folder.&lt;/p&gt;
</content:encoded><category>meta</category><category>code</category></item><item><title>Time for a bigger site</title><link>https://krizdingus.com/blog/time-for-a-bigger-site/</link><guid isPermaLink="true">https://krizdingus.com/blog/time-for-a-bigger-site/</guid><description>The old krizdingus.com was one page and a manifesto that said &quot;No Astro.&quot; This one is built with Astro. We should probably talk about that.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you visited krizdingus.com any time in the last year and a half, you got one page. A fake computer booted up at the top and typed out nonsense like “Ego containment… STABLE,” then settled into a little window called KRIZDINGUS.EXE with menus that actually opened.&lt;/p&gt;
&lt;p&gt;I really needed &lt;em&gt;something&lt;/em&gt; on the homepage. By that point I couldn’t think outside the traditional hero treatment, but I didn’t really have anything to put there. So I made some nonsense to show off instead. It actually started with the same kind of desktop wallpapers that are in XP mode now, as a hero background with an overlay and some typical “Hi, I’m an asshole” intro. I didn’t want that. If I’m gonna be an asshole, I’m gonna earn it by making you wait 11 seconds for the boot animation to finish, like I did in ’96. That at least has style.&lt;/p&gt;
&lt;p&gt;That site came with a manifesto. It sat right there in the site’s code and explained, at length, why everything was built the way it was. Under “The Stack: Light but Real,” I wrote, with my whole chest:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;No React. No Vue. No Astro. Not even jQuery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This site is built with Astro.&lt;/p&gt;
&lt;p&gt;I redid my website, and I needed &lt;em&gt;some&lt;/em&gt; blog content to have a blog. I figured there’s probably a story in redoing my site in direct contradiction to all that.&lt;/p&gt;
&lt;h2 id=&quot;scoring-the-old-list&quot;&gt;Scoring the old list&lt;/h2&gt;
&lt;p&gt;React, still no. Vue, still no. jQuery, still no. Astro… well, you know. Three out of four isn’t terrible, unless you keep reading the old manifesto, which also bragged about “No imports. No TypeScript. No bundler.” Those all came in too. Who’s counting? Not me.&lt;/p&gt;
&lt;p&gt;The old stack was, in the manifesto’s words, “a cold sandwich eaten over a workbench, standing up.” I just didn’t want to mess with a big ole tech stack. I had &lt;em&gt;just&lt;/em&gt; come off a rebuild of a major website. Slim team, small budget, and high expectations from stakeholders who didn’t really know what they wanted, other than “a new website” that “looks good and does SEO.” After meetings upon meetings, I just wanted to be able to make a decision, or for once be the stakeholder holding up the project.&lt;/p&gt;
&lt;p&gt;So I built a stupid retro-computer-ish website full of glitches that Lighthouse cusses at. I didn’t want to deal with a database, or SQL, or any of that. I barely wanted to click around in Cloudflare. At the same time, I wanted to make the best damn one-page website I could, to impress myself and no one else.&lt;/p&gt;
&lt;h2 id=&quot;why-it-needed-a-bigger-one&quot;&gt;Why it needed a bigger one&lt;/h2&gt;
&lt;p&gt;The trouble was the projects. The old manifesto had a whole section about them called “Projects: A Monument to External Links.” Eight cards, eight links off to MakerWorld or GitHub or Thingiverse, plus a featured-project rotator that ran 200-some lines of JavaScript, all so you could be told “Look, I 3D printed a poop stool” and sent somewhere else to read about it.&lt;/p&gt;
&lt;p&gt;I used to carry two websites, both one-page lists of links. One was for krizdingus stuff, which at the time was mostly Game Boy modding. The other, kwilliams.me, was essentially a list of websites I’d built and what skills I had at the time. I didn’t just want to build another dumb portfolio website. Hell, the whole idea of a bare one-page site came from another developer, an old friend from college. His site is literally just a list of links to articles and projects and socials. Mine had a bit more pizazz. We were always different like that. Anyway, I didn’t want to keep doing what he was doing (poorly, and yet somehow with more code) anymore either.&lt;/p&gt;
&lt;p&gt;I had a blast building krizdingus.com, and when I was done I fully intended to redo the other one. But by then I didn’t want to. I just redirected the domain here. Abandoned the mailbox too. I didn’t care. That was kinda dumb in hindsight. I was going through some stuff.&lt;/p&gt;
&lt;p&gt;kwilliams.me redirects to &lt;a href=&quot;https://krizdingus.com/web/&quot;&gt;krizdingus.com/web/&lt;/a&gt; now. The email deliverability is also fixed.&lt;/p&gt;
&lt;p&gt;I originally didn’t care for having a big detailed portfolio site because I felt a lot of “portfolio” websites are a lot of bells and whistles without real content. I knew that if I wanted to do it right, I’d have to set some time aside to do &lt;em&gt;some&lt;/em&gt; sort of write-ups. So maybe staying committed to a one-page website wasn’t all design philosophy, but cope for my lack of will to build a more serious website.&lt;/p&gt;
&lt;p&gt;I started writing about a year and a half ago. I wanted to publish it, and frankly I’m glad I didn’t, because it was awful. But the one-page site really didn’t cut it. So I considered doing a WordPress site. I’m an expert in it, after all, with however many years of experience. But I just didn’t want to, and I felt this was an opportunity to flex my talents in other things. Other frameworks and whatnot. So I researched, and Astro came back the winner. Ghost was the other option.&lt;/p&gt;
&lt;p&gt;In plain terms, Astro takes a folder of text files and some templates and builds finished pages out of them before anyone visits. What you download is plain HTML and CSS with a little JavaScript.&lt;/p&gt;
&lt;p&gt;One line from the manifesto survived the switch completely: “If I want to update a project, I open a text file and type words like it’s 1998.” Every project and every post on here is still a text file. There’s just a robot now that turns them into pages.&lt;/p&gt;
&lt;p&gt;Anyway, now the website has a blog and can feature write-ups on my projects, web work, creative writing, and eventually more if I decide to add new media types and stuff. Probably not.&lt;/p&gt;
&lt;h2 id=&quot;what-happened-to-the-glitching&quot;&gt;What happened to the glitching&lt;/h2&gt;
&lt;p&gt;The old site booted at you whether you wanted it to or not. Now the default is normal mode, which is just pages, text and pictures. As for the pixels drifting in the margins, maybe I just have a problem with letting negative space just be negative, so I like to cheer it up with confetti stuff, like some sort of Bob Ross with an IDE.&lt;/p&gt;
&lt;p&gt;The fake computer didn’t go anywhere, though. It grew up into XP mode, a Windows XP-style desktop you can switch on, with windows, a taskbar, a Start menu and a boot screen. Why XP? That’s when I was on the computer the most, and it’s when the internet really took off for everybody.&lt;/p&gt;
&lt;p&gt;Windows XP came out in October 2001. I remember being stoked about it in my PC Repair class. I don’t even remember exactly what about, but the other nerds were super hyped, so I was hyped too. I do remember expecting it to be better than Windows 98, but aside from the looks, the speed and how web-forward it was, I don’t really recall much else.&lt;/p&gt;
&lt;p&gt;That class was funny. We probably only did classwork 10% of the time. The other 90% of the time we were playing games, or salvaging parts from computers from across the school, which got brought to that class so we could run newer games, or just get more computers working for more people to play. We played the living hell out of Unreal Tournament, GTA 2, one of those Quake games from around then, and OG Counter-Strike. Pre-Source. Can’t forget that.&lt;/p&gt;
&lt;p&gt;For nerds and normies, Windows XP is basically the shag carpet of the ’70s.&lt;/p&gt;
&lt;p&gt;The old site’s leftovers moved into XP mode: the boot sequences (one is still called Terminal Crimewave), the wallpapers, and animations with names like &lt;code&gt;chromaBleed&lt;/code&gt; and &lt;code&gt;crtPowerOff&lt;/code&gt;. Normal mode doesn’t download any of it. Why throw away good code? I put a lot of effort into those animations, and in a way XP mode began with those CSS styles and animations from the prior site. XP mode only shows up on a wide screen with a mouse or trackpad. Phones never get it.&lt;/p&gt;
&lt;p&gt;Some people come here for the more serious stuff, and they shouldn’t have to dig through a Start menu to find it.&lt;/p&gt;
&lt;p&gt;XP mode is a prototype toy for users and me as a dev, use as is and with caution. (It’s seriously pretty stable though.) If you want to know how the switch is built, &lt;a href=&quot;https://krizdingus.com/blog/a-theme-is-a-folder/&quot;&gt;A theme is a folder&lt;/a&gt; gets into it.&lt;/p&gt;
&lt;h2 id=&quot;the-stuff-that-didnt-change&quot;&gt;The stuff that didn’t change&lt;/h2&gt;
&lt;p&gt;It’s still a static site. Static means the pages are finished files sitting on a host, and nothing runs on a server when you show up. I mean, there &lt;em&gt;was&lt;/em&gt; briefly a Dockerfile, a plan to have a Node server on Railway. All that. But that ended about as quickly as it started, about the time I finished installing all the dependencies.&lt;/p&gt;
&lt;p&gt;So it’s on Cloudflare Pages, same as the old site. The manifesto described Pages as “blissfully unaware of what a Docker container is.”&lt;/p&gt;
&lt;p&gt;The section of the manifesto that said “No Astro” is the same one that praised Cloudflare Pages. In January 2026, Cloudflare announced that the company behind Astro was joining it.&lt;/p&gt;
&lt;p&gt;Look, I’m not trying to get all political about it. I’m just a dude trying to survive and thrive on the world wide web.&lt;/p&gt;
&lt;p&gt;There’s still a light mode and a dark mode. Dark is a deep plum now, and light is warm paper.&lt;/p&gt;
&lt;p&gt;The address &lt;code&gt;krizdingus.com/mousebitelabs&lt;/code&gt; used to be for a set of labels I made for Mouse Bite Labs’ Game Boy flash cartridges. The page itself was just a generic Bootstrap page with a 3D Game Boy cartridge rendered in HTML and CSS, rotating. Exciting. It wasn’t bad looking, though.&lt;/p&gt;
&lt;p&gt;By the time of the manifesto, that address only redirected to a GitHub repo, “like a digital doorman at an abandoned building.” Good news for the doorman. He has a building now. That old link goes to &lt;a href=&quot;https://krizdingus.com/projects/mouse-bite-labs-cartridge-labels/&quot;&gt;its own project page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The ASCII art system stayed behind in the old code. That was a whole setup for rotating pictures made out of text characters, with not a single drawing in it. I never finished it because it was difficult, and frankly really dumb on a site already full of dumb features. And Lighthouse was already pissed.&lt;/p&gt;
&lt;h2 id=&quot;the-scores&quot;&gt;The scores&lt;/h2&gt;
&lt;p&gt;Lighthouse is Google’s tool for grading a web page on speed, accessibility and the rest. The manifesto said the old site scored in the 60s and 70s and treated that like a feature: “My circles are yellow-orange and they flicker occasionally. Just like nature intended.” I did run it, and it hurt my feelings enough to write a rant about how Lighthouse is actually a total buzzkill dork.&lt;/p&gt;
&lt;p&gt;This one scores 99 and 100 on a phone. Awesome. Take that, Lighthouse, you enemy of good times.&lt;/p&gt;
&lt;h2 id=&quot;where-it-ended-up&quot;&gt;Where it ended up&lt;/h2&gt;
&lt;p&gt;I love the new site. This website kinda realizes what I think I’ve always wanted out of my personal site. &lt;em&gt;And&lt;/em&gt; I’ve gathered enough interesting work across my professional life and hobbies that I think I’ve got enough content to warrant more than a digital leaflet.&lt;/p&gt;
&lt;p&gt;What carried over from the old manifesto is the energy behind it: fuck it, we ball.&lt;/p&gt;
</content:encoded><category>meta</category></item><item><title>The texture wasn&apos;t in the profile</title><link>https://krizdingus.com/blog/the-texture-wasnt-in-the-profile/</link><guid isPermaLink="true">https://krizdingus.com/blog/the-texture-wasnt-in-the-profile/</guid><description>The ribs on my threaded Zyn can showed up on the test print, and when a guy asked how, I confidently explained the wrong solution.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This one needs a little setup, since it’s about nicotine pouches and 3D printing. I don’t have any data to know how much of an overlap there is between the two interests.&lt;/p&gt;
&lt;p&gt;Zyn is a brand of nicotine pouches, the little white ones you tuck under your lip. They come in a small round plastic can. The &lt;a href=&quot;https://krizdingus.com/projects/zyn-container-easy-open-threaded/&quot;&gt;threaded Zyn container&lt;/a&gt; is my printed version of that can. It’s the same diameter and depth as the real one, so it fits anywhere the real one fits, but the lid screws on, and the inside is split: two-thirds for fresh pouches, one-third for used ones or a second flavor. Two parts, a base and a lid. No glue, no magnets.&lt;/p&gt;
&lt;p&gt;It was the first Zyn container I published, and one of the first things I ever modeled. I got into Game Boy modding around 2022 and 3D printing came right after, so I hadn’t been drawing my own stuff for very long. I made it because I thought it’d be neat to have a styled one, and a place to keep your discards. I go through a lot, so it’s not always convenient to find a trash can.&lt;/p&gt;
&lt;p&gt;The outside of it has a ribbed grip texture. How it got there makes more sense if you know how a print actually happens.&lt;/p&gt;
&lt;h2 id=&quot;shape-and-settings&quot;&gt;Shape and settings&lt;/h2&gt;
&lt;p&gt;You draw the thing in a 3D modeling app, which people call CAD. I use Shapr3D. Then you export the shape, usually as an STL file, which is just the outside surface of the object described as a mesh of tiny triangles. It doesn’t know anything about how to print it, it’s just the shape.&lt;/p&gt;
&lt;p&gt;That file goes into a slicer, which is a program that cuts the model into thin horizontal layers and works out where the nozzle goes on every one of them, and how much melted plastic comes out along the way. It’s where you pick everything: layer height, how many walls, how much infill. Infill is what’s inside a part. Most prints aren’t solid, they’re a couple of outer walls with a sparse pattern filling the middle so you’re not burning plastic on stuff nobody sees. This can is two walls and 15% infill, which is pretty normal. It’s a lot of knobs for a plastic can, but that’s how it goes.&lt;/p&gt;
&lt;p&gt;Save all those choices and you’ve got a print profile. MakerWorld is the model-sharing site run by Bambu Lab, the printer company, and it lets you upload your profile right next to the files, so somebody else can hit print and get the settings you used.&lt;/p&gt;
&lt;p&gt;And those settings can change what the outside looks like, since the slicer decides how every line of plastic goes down.&lt;/p&gt;
&lt;h2 id=&quot;the-test-print&quot;&gt;The test print&lt;/h2&gt;
&lt;p&gt;I modeled a smooth wall. The test print had ribs on it. I just remember it coming out, seeing the ribs on the can, wondering what might have gone wrong, and immediately printing a second one just to see. When the second one came out just as good, with the ribs, and the ribs actually made handling the can easier and just kind of looked cool, I was like, fuck it, okay, let’s publish it.&lt;/p&gt;
&lt;p&gt;Months later, somebody in the comments asked how I did it.&lt;/p&gt;
&lt;p&gt;I didn’t have an answer, just like at the beginning. So I decided I should investigate and at least try to give him an answer. I did some Googling, asked ChatGPT what it thought. It didn’t really give me much. Eventually, the best I could conclude was the difference in infill gap settings between a virgin empty project and this one. Alternatively, I figured maybe I had hit those settings by accident somehow, or maybe those were settings for some other print project that I had opened, and for some reason I’d deleted the model out and dragged mine in instead of opening a new project. I don’t know.&lt;/p&gt;
&lt;p&gt;But looking into it again now, it clearly wasn’t the infill gap. My model predates that feature in the Bambu slicer, so that couldn’t be the issue. And I just confidently explained the wrong solution to the guy. I’ve never followed up. I don’t think I ever will. Sorry, guy.&lt;/p&gt;
&lt;p&gt;The ribs only show up on the can’s blue band. I say blue band. It could really be any color, but for all intents and purposes, we’ll call it blue. It’s blue in the photo. In my model, that band is technically its own part. It’s done that way because at the time, I didn’t really understand how to color models well, either in the Bambu slicer or even in Shapr3D. I was still figuring things out very much along the way. Before that, the only 3D experience I’d had was working in… what was it called? LightWave? Way back in 2009. And then Tinkercad’s 3D modeler. So I was learning as I was going. And now, writing later, I’m not certain why I did it this way, other than I thought this was the way I had to do it.&lt;/p&gt;
&lt;p&gt;That band is a shell about a tenth of a millimeter thick, thinner than a single line of plastic, and it’s meshed coarsely: 132 flat faces, evenly spaced, each about 1.7 millimeters wide. The can underneath has about 316. The faces are too shallow to see on their own. So my best guess is the slicer is dealing with a paper-thin colored shell, with 132 evenly spaced corners, wrapped around a finely meshed can, and it leaves a mark at every corner. And that’s your ribs. It also fits the guy’s comment. He tried to add the ribs to the lid, and they disappeared from the can. I haven’t gone back to prove this yet. It sounds right. And frankly, I just like the ribs, so I don’t know if I even want to fix it.&lt;/p&gt;
&lt;p&gt;If this is the case, it looks like this interesting feature turns out to be the result of my bumbling inexperience with the CAD software. That’s strangely, embarrassingly flattering. Or maybe not flattering, but cool and embarrassing at the same time.&lt;/p&gt;
&lt;h2 id=&quot;printing-one&quot;&gt;Printing one&lt;/h2&gt;
&lt;p&gt;It’s printed in PLA, one of the standard printing plastics, at 0.16 mm layers, and takes about three and a half hours. No supports, either, so the slicer doesn’t have to build any throwaway scaffolding under overhangs that you’d snap off after. The threads are printed too, so they’re tight for the first few opens. Give it some turns and a rinse and they loosen up.&lt;/p&gt;
&lt;p&gt;People have done it in PETG, including clear PETG with a colored lid, and the two-tone ones look good.&lt;/p&gt;
&lt;p&gt;What’s stuck with me from the comments is how well received it is. As of September 8 it had a 4.9 from 51 ratings, with 95 comments, and 490 people had saved it. I’ll take it.&lt;/p&gt;
&lt;p&gt;Somebody printed a set “for the boys at my fire station” and said they were “so stoked about them.” I replied, “Hell yeah, dude! thanks!” Somebody else wanted to put their sons’ softball team logo and jersey numbers on them. My listing even says I don’t mind people “printing out a bunch with your community sports team/job crew/etc logo on it.” The license is non-commercial, and I don’t want people selling them on Etsy as their own, but that’s a whole different thing.&lt;/p&gt;
&lt;p&gt;I just like the overall idea that these were being printed to hand out and stuff. Like, that guys like these so much they wanted to put a logo for whatever organization they were with and print out a bunch and hand them out, you know? I just thought that was cool. I feel like that’s kind of what this stuff is supposed to be all about.&lt;/p&gt;
&lt;p&gt;For me, I make stuff. I share it. I share it because I want people to use it. I like the idea of someone having printed this thing, being stoked, and then running to someone else and saying, look what I just printed. That’s cool to me, and so is the feedback, even the no-comment five stars. I won’t lie, seeing those ratings is nice, and it gives me something I can take pride in and show someone. It’s like, hey, look at this. How many stars? This many downloads. But, and this maybe sounds corny and performative, that doesn’t actually beat the real feeling of satisfaction and pride that comes over you when you actually get that feedback from someone. Makes me want to keep going. Makes me want to make more. Makes me want to figure out how I can improve things.&lt;/p&gt;
&lt;p&gt;I think a lot of people with creative streaks in them do it because they just have to, right? I think there’s this perception that creative people do it because they crave the attention and validation, and there’s truth to that, sure. But it’s not always about that. Sometimes it’s a need. And that validation can come in lots of forms. Big and small. Obvious and subtle. For me, it’s a comment that says, hey man, all the boys loved this. And it feels good to have made something that got other people thinking how they could make it their own.&lt;/p&gt;
</content:encoded><category>3d-printing</category></item></channel></rss>