Documentation

What this site is, how its versions are numbered, and what changed when.


The Site

A personal portfolio, laid out like an academic paper because that is the form the work took: Times New Roman, black on white, photographs at fixed ratios inside a one-pixel rule. The home page opens as an abstract and expands into the rest of the paper. Projects divides into publications, professional roles, personal work, and coursework; Blog is writing, graded out of a hundred by me; About holds the statement, resume, and interests.

It is a Next.js application written in plain CSS with no design framework, and the posts are Markdown. Some of the figures are drawn live rather than shipped as images. There are no analytics and no third-party scripts — the privacy page covers what that means in practice. How the whole thing was put together is its own post.

Version Numbers

Every release below is numbered on the same scheme. Reading V1.0a from left to right:

  • VVersion.
  • 1Major. Only moves for a rebuild, or a change in what the site is.
  • .A separator, not a decimal point.
  • 0Minor. One up per ship — a post, a fix, a change to how something behaves. It counts in base ten, so V1.1, V1.10 and V1.100 are three different versions, ninety-nine apart.
  • aDraft letter, from a. For a small correction on top of a version already out, or for running two of something side by side.

One entry per push to production, not per change made. The log starts at V1.0a; everything before it went out unversioned, and reconstructing those pushes after the fact would be writing history rather than recording it.

Latest Release

V1.11a

October 3, 2026

A full check of the site, and what it found: a gap in the studio’s one locked door, a contact form that could not tell when it had failed, and a long tail of smaller things.

  • MathStudioThe practice exam and its worked solutions are the only things in the studio behind the password, and an address written a particular way could open the worked solutions without it, along with the page the exam sits on, though never the exam itself. It cannot now, however the address is written, and each of those pages checks for the password itself as well, rather than trusting the door in front of it.
  • MathStudioOutside the figures, every formula in the studio was drawn for the eye and nothing else. A screen reader read one SAT question as “What value of satisfies the equation?”, the equation simply missing, and the same went for every lesson, solution and diagnostic. Each formula now carries the maths in a form a screen reader speaks, and looks exactly as it did.
  • MathStudio — the figuresMost of the Limits figures were cut off at the bottom by about the height of a line — the edge of the panel and the bottom of its readout. They show whole now, and a figure that grows as its sliders move takes the room it needs instead of losing its last line. On a phone the Finances figures no longer print labels over one another or clip their own answers, and every slider shows the value it is set to. Every slider in both chapters’ figures has a name a screen reader can say, and four of the Limits figures open on their corrected numbers.
  • MathStudio — SAT/ACT PrepOn a phone, Next in the diagnostic jumped to the top of the page and left the next question’s buttons below the fold. It now scrolls only as far as it has to, so the question and its buttons are on screen together whenever the screen can hold both, and the question starts at the top when it cannot. For a keyboard or a screen reader, each move lands on the new question and the clock says what it is counting. And in the review, a missed question shows the answer you chose beside the right one, in words, instead of only colouring it red.
  • ContactThe form said “Message sent” whenever the mail service answered at all, including when the answer was no. A refused message now says it was not sent, so you know to try again or write another way. Each field has a limit, generous for a person, and the form holds you to it as you type rather than refusing the message after you send it. A long run of messages from one place is turned away until the hour is up.
  • Signing in — where it can send youThis log once said the sign-in page would only send you on to an address on this site. One kind of address could still send you somewhere else once you had signed in, or straight away if you already were. It cannot now: the address is checked the way the browser will read it, and anything that would leave the site sends you to the page behind the door instead.
  • BlogThe three s**tposts first published under /blog were meant to forward to their home at /blog/lipschitz, and this log said they did. On the live site they had been answering with a bare server error, as had every mistyped post address. They forward now, and a mistyped address gets the site’s own not-found page.
  • BlogThe maps in the sports valuations post and the calculator in the car-financing post load their code from this site now, rather than from other companies’ servers. The map tiles still come from OpenStreetMap, and the chart embedded above the maps is still Flourish’s own page.
  • The siteA keyboard and screen reader pass across the main site. The Projects menu closes with Escape and no longer opens under a keyboard that had no way into it; the Personal entries and the home page’s Abstract open and close from the keyboard and with a tap, and say whether they are open; a closed entry or course no longer leaves its links in the keyboard’s path; the photo viewer on the blog keeps focus inside itself while it is up; and errors on the contact and sign-in forms are read out the moment they appear, as is the contact form’s confirmation.
  • The siteOn a narrow phone the bottom bar no longer squeezes the DataGoats mark to nothing or pushes the page sideways; whatever does not fit moves to a line of its own. The first picture on the Projects page and on the blog loads first rather than last, and a picture meant for one page no longer jumps the queue on another.
  • Search engines and link previewsA shared link to any page but a post named the home page as its address; every page names itself now, and every post’s preview card names the site. The sign-in pages are open to crawlers, which is the only way a crawler reads the instruction on each of them not to list it. The tab icon is a fiftieth of its old size, and there is a favicon.ico for the browsers that still ask for one.
  • Smaller thingsSigning in is limited to a sensible number of tries. Files downloaded from behind the password keep their names in every browser. The goat on the Projects page’s Personal row scatters when the cursor is anywhere on the row, not only on its picture. Portrait pictures in posts no longer run off the side of the narrowest phones. A typo in the fundraising post, a slip of grammar in the home page’s opening paragraph, and YouTube spelled the way YouTube spells it. The code and styles left behind by this week’s two departures are gone.

Archive

43 releases before this one, in tiers: the major version, each minor version under it, and the releases themselves. Open a tier to reveal the next.

V143 releases · V1.0a – V1.10b
V1.102 releases · V1.10a – V1.10b
V1.10bSeptember 30, 2026Two locked doors come off, now that what was behind them lives somewhere else.
  • The siteRemoved Herobrine.
  • DocumentsThe consulting firm’s client portal came off with it. The papers it held were always its own rather than this site’s, and they are served from its own address now, by the same door with the same code. Every address anyone was ever given for them still works and leads there. What is left here is the part that was always mine to keep: the pages describing the firm, and none of the machinery for telling one reader’s documents from another’s.
  • Behind the scenesTwo of the four locked areas are gone, so what is left is one password and two doors: the private folder, closed entirely, and the assessments inside the studio, which are the only closed thing in a library meant to be read. The rest of the machinery — a second and third credential, their cookies, their sign-ins, the check that one reader’s papers could not be opened with another’s code — went with the pages it protected. Six megabytes of documents went with it too, which was never the reason but is a pleasant enough consequence.
V1.10aSeptember 30, 2026DataGoats moves out to a site of its own, and Personal gains the entry it should have had first.
  • Between the two sitesThe consulting concept has been a sub-site here since the middle of the month, living under its own mark and navigation at an address inside this one. It has its own domain now. Every place this site pointed a visitor at it — the mark in the bottom bar, the demo tile, the new entry under Personal — sends them there instead, in a new tab, the way the client site already did. What was built here stays here and keeps working; it is simply no longer the front door. The second site to leave this way, and the reason for leaving is the same both times: a thing with its own clients should have its own address.
  • Projects — PersonalA fifth entry, and it goes first: Data. The section had building, sport, coaching and tutoring on it, which is most of what I do and none of what I do with all of it. A good chart is not a summary of an argument, it is the argument, and I would rather have a distribution than an impression. The entry says that, and points at the firm the instinct turned into.
  • Projects — PersonalIts thumbnail is drawn rather than photographed, in the two places that section is offered: the row on the Projects page, and the slot in the panel that drops down from the header. The consulting mark, made of the points it was drawn from, which gather when you arrive and come apart again while the cursor is on them. It is the entry’s own argument as a picture — a shape that is nothing but its own measurements.
  • Projects — Website BuildingThe consulting site opens on the way in now: the mark as it is drawn, then the mark giving itself up to the points underneath it, then those points scattering, then the page. Three and a half seconds, once a visit, never in front of anyone who has asked for less movement, and gone the moment you click or scroll. The page it covers is complete underneath the whole time, so a reader without scripts and a search engine both get the page and nothing else.
  • Projects — Website BuildingThe picture beside that site’s headline used to assemble itself out of the same points, which was the right idea in the wrong place once the way in existed: it had just done exactly that, at full screen, seconds earlier. Doing it twice made the logo read as something still loading. It is the drawing now.
  • Projects — Website BuildingWhat the firm sells said the dashboards are refreshed monthly, in ten places. That was never the constraint — a retainer refreshes them as often as the client needs — so it says that instead. The client’s own monthly close and the month-to-month billing term stayed as they were, because those are different facts that happened to use the same word.
  • Behind the scenesThe framework the site runs on was already current; nothing about this release needed it. Worth writing down anyway: every file served from behind a password now tells crawlers not to index it, archive it, or follow anything in it. None of them was ever reachable by one — that is what the password is for — but the header costs nothing.
V1.92 releases · V1.9a – V1.9b
V1.9bSeptember 28, 2026The documents behind the client code are at their newest draft, and the dark slides read again.
  • Projects — Website BuildingBoth papers were replaced. The pair shipped this morning had lost the styling on their dark slides somewhere in a rebuild, so pale text meant for a navy ground was sitting on white paper — legible in the sense that the letters were there, and in no sense that matters. That is put back, along with the pages underneath that had inherited it, and the smallest type on either document is now large enough to read on a phone.
  • Projects — Website BuildingThe draft before this one fixed that and broke something larger on the way: the longer document collapsed to a sliver whenever it was shown inside a frame, which is how this site shows it and how the presentation shows it too. It was one of those faults that reads as correct everywhere you would think to look — the measurements were right, the text was in the page, the colours passed — and was only visible by asking how tall the thing actually was. It went back rather than up, and the draft that came back holds at every size checked: a laptop, a phone upright, a phone sideways, and the frame the presentation gives it.
V1.9aSeptember 28, 2026The papers behind the client code are one document now, and the frame they sit in fits them.
  • Projects — Website BuildingTwo documents at two addresses became one. They were read one after the other in the same conversation, and crossing between them meant leaving the page and arriving somewhere else, which is a seam a listener can hear. The two old addresses were handed out by hand, so neither is a dead end: both lead to the one that replaced them.
  • Projects — Website BuildingThe frame around a document used to be a sixteen-by-nine box, because the documents used to be slides drawn on a fixed canvas and shrunk to fit. The new ones are not: they lay themselves out for whatever screen they are on. So the frame stopped insisting on a shape and started handing over height instead. On a phone that is the difference between a letterbox a third of the way down the screen and a page you can actually read; the instruction above it changed accordingly, since turning the phone sideways is no longer the price of entry.
  • Behind the scenesA document can now say which slide to open on, by putting its number after a hash on the address. The catch was that these documents read that number once, as they start, and the frame they sit in was being told afterwards — so it was heard by nothing. The address is settled before the frame loads now, and a number typed later reloads it rather than being quietly ignored.
  • Behind the scenesEvery file served from behind a password now carries a header telling crawlers not to index it, archive it, or follow anything in it. None of them were reachable by a crawler to begin with — that is what the password is for — but the header costs nothing, and some of these files name real companies.
V1.86 releases · V1.8a – V1.8f
V1.8fSeptember 28, 2026The framework the site runs on moved up a patch release.
  • Behind the scenesA flaw was published in the framework this site is built on: a page that draws an image on the fly can be made to run code, if it lets a visitor put their own text inside that image. This site draws no images that way — the two icons it serves are files, sitting on disk, the same for everyone — so it was never exposed. The version moved up anyway, because being told you are fine by a careful reading is worth less than not having the flawed code at all. Nothing else changed: the build produces the same hundred and three pages, over the same addresses, as the version before it.
V1.8eSeptember 28, 2026The presentation behind the portal code reads properly on a phone.
  • Projects — Website BuildingThe presentation the portal code opens was replaced with its newest draft. Held upright, a phone now gets a reading layout rather than the wide view shrunk down, and the part of it worth showing first — the thing that moves — is one press away instead of two. The buttons that were easy to catch with a thumb moved into the menu, and a small one for going back took their place. On the website’s side this is a file swap: the page reads the document off disk when someone asks for it, so a new draft needs no rebuild.
V1.8dSeptember 27, 2026One code opens the whole DataGoats portal, and the document behind it is at its newest draft.
  • Projects — Website BuildingThe portal held two codes, one for each set of papers. It holds one now, which opens both, because the person handing it out is the same person either way. The machinery for more than one is still underneath — a code is a row in a list and a page names the code that opens it — so a second reader with their own door is a small change rather than a rebuild.
  • Projects — Website BuildingThe papers behind that code were replaced with their newest draft: the presentation now carries three tabs rather than four, and what happens after the first ninety days lives behind each of its two doors instead of in a card of its own.
V1.8cSeptember 27, 2026The document behind the DataGoats portal, at its fourth major draft.
  • Projects — Website BuildingThe papers behind one of the portal’s codes were replaced with the draft its author calls finished for now: the demonstration it carries has been reordered so the strongest parts come first and the depth sits behind a divider, and a pass for breathing room went through every label on every screen of both. Nothing else changed.
V1.8bSeptember 26, 2026The document behind the DataGoats portal is at its newest draft.
  • Projects — Website BuildingThe papers behind one of the portal’s codes were replaced again, demonstration and all. Nothing else changed.
V1.8aSeptember 26, 2026DataGoats looks like the thing it is selling.
  • Projects — Website BuildingThe firm’s presentation and the firm’s site were two different-looking objects, and now they are one. The site takes the presentation’s language: headlines set in a serif at its natural weight rather than a bold sans, a near-black ink with the navy kept for the things that mean something, quiet letterspaced capitals above a heading instead of a coloured line, and cards that answer a cursor by filling rather than lifting off the page. The home page opens on the presentation’s own image — the goat assembled out of the records it is made of, a point for each, sampled once from the artwork and settling into place as the page arrives, or already in place for a reader who has asked for less movement.
  • Projects — Website BuildingThe papers behind one of the client portal’s codes are at their newest draft.
V1.75 releases · V1.7a – V1.7e
V1.7eSeptember 26, 2026Another draft of the document behind the DataGoats portal.
  • Projects — Website BuildingThe papers behind one of the portal’s codes are at their newest draft, demonstration and all. Nothing else changed.
V1.7dSeptember 26, 2026The document behind the DataGoats portal tells a different story.
  • Projects — Website BuildingThe papers behind one of the portal’s codes were replaced again: the same demonstration sits inside them, and the argument built around it has been rewritten. Nothing else changed.
V1.7cSeptember 26, 2026A document behind the DataGoats client portal is at its current draft.
  • Projects — Website BuildingThe papers behind one of the portal’s codes were replaced with the draft being worked on this week, which carries its own demonstration inside it: a reader opens a door in the middle of it, the demonstration runs in place, and its own mark brings them back. Nothing else changed — the same code opens it, and everyone else sees what they saw before.
V1.7bSeptember 26, 2026The DataGoats client portal answers to more than one code, and each one opens its own papers.
  • Projects — Website BuildingOne code used to mean one door, so the cookie only had to prove that somebody had signed in. There is a second set of papers now, for a different group of readers, so the cookie has to say which group: it carries the client’s name beside its signature, and the signature is taken over that name as well as the credential, so it cannot be edited into someone else’s. A reader signed in under one code who follows a link meant for the other is shown the list of what their own code opens, rather than being asked for a password that would not help them. The route that used to serve that whole folder by path is gone — it was written when one code opened everything, and with two it would have handed one reader’s papers to another. Each document is served by name, to its own code, and adding the next one is an entry in a register rather than a new door.
V1.7aSeptember 23, 2026DataGoats: the method moves under About, a document announces itself while it loads, and the whole site is gone over on a phone.
  • Projects — Website BuildingHow the firm works was across the top of the DataGoats site, which it had not earned — a buyer reads the method once they are interested, not instead of reading who the firm is — and in the footer it stood among the services, where it read as a seventh thing being sold. It is now a page under About, listed beside the data policy, reached from a section of the About page itself, and the About tab stays lit while it is open. The address it used to have still works. The header is back to five things.
  • Projects — Website BuildingA document behind the client portal is three quarters of a megabyte in a frame, which reports no progress of its own, so it now has a bar that paces itself: a duration drawn fresh between one and two and a half seconds, cut into legs that each take their own share of the time and the distance, one of them usually slowing to a hesitation somewhere different every time. It never claims to have finished while the document is still arriving, and anyone who has asked for less movement simply gets the document when it is there.
  • Projects — Website BuildingThen the whole DataGoats site was walked at three phone widths. A table that pushed its card open now scrolls inside it; the month scale under the sweeping chart names every sixth month rather than every third, so the labels stop landing on each other; a counting readout gives up the width it reserves against jitter, which a phone has not got; a sentence among a figure’s statistics may wrap; the heat map’s list was three pixels short of San Francisco on every screen; and the links that stand on their own rather than inside a sentence are now a fingertip tall.
V1.63 releases · V1.6a – V1.6c
V1.6cSeptember 22, 2026DataGoats says what it sells and how it works, and its client portal opens with a code.
  • Projects — Website BuildingThe DataGoats concept site was written against the firm’s own plan rather than around a shape. The home page leads with what the firm is and who it is for; the six services each say what they are, who they are for, what you receive, how long they take and what happens afterwards; a new How We Work page sets out the four steps, the nine practices underneath them as a client would feel them, what happens to your data when a tool touches it, and what you own at the end. The case studies are written as types rather than names, in the shape a named one will drop into later; the people are the founder and a bench described by role; the writing page now takes video as well as prose, and a video loads nothing from anywhere until it is pressed. The contact form asks the four things a first call needs: what you have, what you are trying to answer, who you are, and the date it has to be done by.
  • Projects — Website BuildingThe DataGoats client portal is a door rather than a drawing of one. A client code and a password sign you in, the documents behind it open on a stage of their own with the keyboard already in hand and a button for full screen, and a reader turned away at any page inside is brought back to it once signed in. Nothing behind the door is served from the public folder, and nothing there is reachable by address alone.
  • The siteRemoved Herobrine.
V1.6bSeptember 18, 2026DataGoats on a phone: the portal and the contact button are back in the header.
  • Projects — Website BuildingOn a phone the DataGoats header had lost its two buttons. They are back, smaller, beside a smaller lockup, with the navigation underneath; on the narrowest screens the goat mark alone carries the name so everything still fits.
V1.6aSeptember 18, 2026DataGoats, a fourth demo under Website Building: a concept site for a data consulting firm, with a gallery of visualizations that move.
  • Projects — Website BuildingDataGoats is a concept site for a data consulting firm, built inside this one with its own mark, palette and navigation: a home page, six services in a hover panel, case studies, a client portal, and placeholder copy with empty frames where the photographs would go. Its gallery is the point. It opens with figures you can turn in three dimensions (a plane of best fit with its residuals, a loss landscape with gradient descent rolling down it, a cloud of customers that gathers into segments), a California heat map, a story swept month by month with the totals counting, a chart that draws itself, a bar chart race, a scatter whose points you can drag while the fit recomputes, and a distribution you can shape, then every ordinary chart from a sortable table to a treemap. All of it is drawn by the site itself, with no charting library and no data that is real.
V1.57 releases · V1.5a – V1.5g
V1.5gSeptember 17, 2026Innovations Health has its own address.
  • The siteThe Innovations Health site moved out to innovationshealth.app, its own domain, on its own footing. The mark in the colophon now opens it there, in a new tab, instead of crossing into the copy that was being built here.
V1.5fSeptember 16, 2026The framed figures now carry their own do-not-index note.
  • The siteV1.5e asked the server to mark the interactive figures as not for the index, but the host serves those files itself and never adds the mark. Each figure now says so in its own head, which holds wherever the file is served from. Nothing visible changes.
V1.5eSeptember 16, 2026One address for every page, and a new first line on the home page.
  • The siteSearch Console had started reporting pages as duplicates of themselves: the site answered at www. as well as at its own name, and most pages never said which address was the original. Now any other host is sent permanently to thommasphan.com, every page names itself as its own original, and the interactive figures framed inside posts ask to be left out of the index, since the post is the page. The four blog tag filters were already handled and stay as they were.
  • HomeThe abstract now opens by saying what the site is before it gets to the self-assessment.
V1.5dSeptember 15, 2026Removed Herobrine.
  • The siteRemoved Herobrine.
V1.5cSeptember 12, 2026Innovations Health filled in from the companies’ own sites, a dark client portal that signs in, and the open questions answered.
  • Innovations HealthThe company pages now say what the companies do, from their own websites: the hospital’s beds and locations, the triathlon’s course, date and beneficiaries, the machine’s motors, modes and debut, the management company’s services. Founding years, bios and the parent company’s story are confirmed; the CFO joins the founders under Leadership; the hospital and the race carry their own photographs and About has a gallery of eight; the placeholder copy is gone. The client portal is a sign-in page on a dark ground, with the brand’s cyan and green wandering slowly behind the whole page, the header in its dark form over it, an eye on the password field, and a two-second opening screen once you are in. Privacy and Terms are written. The public address is contact@innovationshealth.com.
V1.5bSeptember 11, 2026Innovations Health, a day of revisions: a floating header, a dark footer that moves, a sign-in page, and a long list of small corrections.
  • Innovations HealthThe header lifts off the edges into a floating rounded bar once the page moves, frosted rather than ruled, with the Companies panel hanging from it as a card that keeps one size whatever the cursor is on and now carries each company’s logo. The footer sits on deep ink with two slow washes of the brand’s cyan and green drifting under it, and the client portal page, now a sign-in card, sits on the same ground with no seam between page and footer. Status is a pill in the brand colours. Company pages link out to the company’s own site. The parent company is described on About rather than listed as one of the companies; the roster is alphabetical, one line per name, logos centred. Inview Imaging and the dealership are gone. Companies are CHoNC in the footer and abbreviated on a phone, where the header now holds the wordmark centred over one row of four items. Privacy and Terms pages, the full address in the colophon, and form fields sized so a phone does not zoom into them.
V1.5aSeptember 11, 2026A second site inside this one: Innovations Health, built in the open as a portfolio piece, with its own door in the colophon.
  • Innovations HealthA website for Innovations Health, at /innovations-health, on the same footing as MathStudio: its own header, footer, type and palette, a crossing veil on the way in and out, and nothing of it leaking back onto this site. It opens on the building at full screen with a frosted header over it, then a ruled roster of the companies, the two founders, and a page for each company with its story, a facts rail and a link out. Companies is a panel in the header on the same plan as Projects here — hover on a desktop, a toggle on a phone, a preview that follows the cursor — held to one size so nothing shifts under the hand. About, a sign-in page for the client portal that is not yet wired, Contact with a working form, Privacy and Terms. What is not yet settled is marked on the page as open rather than hidden in a file, and the site is kept out of search until it launches.
  • The siteThe Innovations Health mark sits in the colophon, to the left of the copyright, as the way across. The contact form endpoint tags mail from the second site so it is tellable from this one’s in the same inbox.
V1.42 releases · V1.4a – V1.4b
V1.4bSeptember 11, 2026A post about a rug question that ended in a first person walkthrough of the house, with the walkthrough and the planner both playable in the page.
  • Blog — Gamifying My House Remodel by AccidentThe ground floor is being remodeled — a wall out, 754 square feet of carpet to hardwood — and the question of what size rug turned into a scale planner in the browser, and then, when the planner could not answer the questions that mattered, into a first person walkthrough of the house in Three.js. Both are in the post and both run: the planner with its sliders and live clearances, the walkthrough with WASD, mouse look, and the C key that drops you to a seated eye line. Each sits in a framed 16:9 that loads only when asked, fills the screen on request, and gives way to a note on a touch device, where WASD would be a port rather than a page. The library the walkthrough needs is served from here rather than a CDN, in keeping with the privacy page. Four plan drawings accompany it; three arrived clipping their own titles and captions and were reframed from the ink.
  • The siteRemoved Herobrine.
V1.4aSeptember 10, 2026An intro video that was never shot, rebuilt as something you click through at your own pace. And Herobrine.
  • Blog — An Intro Video to a Youtube Channel I Never BuiltA 102-slide deck and a script, written in 2025 for the first video of a channel that never happened. The slides were built to be narrated — one line each, stacked until a screen is full and then wiped — which reads badly and clicks well, so the post is the deck at the reader’s pace: eighty-seven beats, one line a click, on a framed 16:9 that fills the screen on request. The artwork came out of the file as dark line work on a grey ground and has been divided back to black on white; the one piece of stock art still carrying its watermark was redrawn, along with two figures too small to read once they were off a projector. The slide itself is paper rather than plain white, and the drawings multiply onto it instead of sitting in a pale box.
  • The siteRemoved Herobrine.
V1.37 releases · V1.3a – V1.3g
V1.3gSeptember 10, 2026Removed Herobrine.
  • The siteRemoved Herobrine.
V1.3fSeptember 9, 2026Removed Herobrine.
  • The siteRemoved Herobrine.
V1.3eSeptember 8, 2026The storyboard the site was built from now opens with the post about it.
  • Blog — How I Built This WebsiteThe post turns on one artifact: the flat mockup every decision on this site came from, written before a line of the real thing existed. It was behind a Preview button, so the passage argued about a file the reader had not seen. It now arrives open. The content inventory below it stays folded away — it is two and a half thousand words of source, and it supports the passage rather than being it.
V1.3dSeptember 8, 2026Added secret test site feature—Herobrine.
  • The siteAdded secret test site feature—Herobrine.
V1.3cSeptember 7, 2026Three corrections on top of V1.3b: MathStudio’s entry veil now matches the dark page underneath it, a s**tpost’s footer nav stays on one line on a phone, and parchment’s footer reads as its own band again.
  • MathStudio — the crossing veilThe screen shown while crossing from this site into MathStudio was painted in the light paper colour instead of dark, because the class that was meant to darken it does not exist yet at the moment the veil renders — you are still on this site when it appears. Since MathStudio now always opens dark, the veil is dark outright, so every way in looks the same: a hard reload, and a link from the footer or a project tile.
  • Blog — s**tposts on a phoneThe footer of a s**tpost (“← All Posts” and “s**tpost hub →”) was dropping to two lines on a narrow screen, the layout meant for a companion post’s longer, wrapping title. The hub link is always the same short phrase, so it now stays on the one line the phrase actually needs.
  • Parchment — the footerThe footer was sitting on the same shade off the page as everything else that tints on hover — opening an accordion, hovering a row — which on parchment read as too close to tell apart. It now has its own, slightly deeper tan, so the footer still reads as the end of the page.
V1.3bSeptember 7, 2026A small correction on top of V1.3a: the release archive on this page folds into tiers, so it opens as one line and reveals a layer at a time.
  • Documentation — the archiveEarlier releases used to list one under another, and the log only ever grows. They now sit in tiers — the major version, each minor version under it, and the releases themselves — every one closed to begin with, so the archive is a single line until you open it. The grouping is read from the version numbers, so new releases file themselves.
V1.3aSeptember 7, 2026A second look for the main site — parchment, a few shades off white, chosen from the footer and remembered — and a clean handoff with MathStudio, which is dark on every entry. With it, the studio’s course cards settle in when filtered, six of their drawings redrawn to be right, and a handful of small fixes.
  • ParchmentThe footer’s new switch turns the page from white to a warm off-white with a faint grain, brown-black ink and rules to match — a page that is easier on the eyes at night without being a dark mode. The white figure tools in blog posts take a light sepia wash so they sit on the paper; photographs are left alone. The setting is remembered, the page never flashes white on the way in, and the change eases over a fifth of a second rather than snapping.
  • MathStudio — themeThe studio is dark on every entry, whether you arrive by a link or a bookmark, and its own switch lightens it for the visit. The two sides think for themselves: crossing from parchment lands on dark, and crossing back lands on parchment. The Calculus and Intro Statistics courses are now tagged College as well as K–12, so the College filter has something to show.
  • MathStudio — cardsFiltering the course or chapter grid no longer snaps: the cards settle in one after another over about a third of a second. Six drawings were redrawn from computed geometry rather than by eye — the Finances card is a price chart, the Geometry triangle actually touches its circle, the Pre-Calculus wave has the circle’s own radius, the SAT/ACT answer sheet has one bubble filled on each of three rows, the Chapter 2 tangent is tangent, and the Chapter 9 angle spans the two vectors it measures.
  • Behind the scenesThe contact form asks for a phone number by name. Two scripts that run before the first paint — the studio’s theme and the structured data search engines read — are now emitted as plain HTML rather than as React elements, which removes a warning the development console raised on every arrival.
V1.25 releases · V1.2a – V1.2e
V1.2eSeptember 7, 2026Two visual pieces: the fundraising post’s odds figure rebuilt as a grid you can hover, with the numbers sourced, and the second theme demo rebuilt as a landscaping company with a looping video hero.
  • Blog — Startup FundraisingThe “thousand pitches” picture is now ten thousand squares, one per pitch, and the numbers behind it are real ones: the funnel from a survey of 885 venture investors — for every hundred pitches considered, twenty-eight get a meeting, ten reach the partners, about five survive diligence, one is funded — and the outcomes from twenty-one thousand financings, where four of every hundred funded companies return ten times or more. Hover or tap a square to see how far that pitch got; sort the grid to see the four black squares gathered in a corner. The paragraph beneath it was rewritten to match, and the sources are printed under the figure.
  • Projects — Demo TwoThe Nebula landing page is retired. In its place, SacGreen Landscape: an invented Sacramento landscaping company with the sections a company like that actually needs — services, recent work, process, about and service area, reviews, and an estimate form — under a hero video that loops without a visible seam, muted, and paused for anyone who has asked for less motion. The tabs are the shape of the site and go nowhere; every block below the fold links on to the next section and to the form, and the header carries an Exit demo button. The video is a generated placeholder for now.
V1.2dSeptember 7, 2026The SAT and ACT courses at real-use depth — twice the topics, a diagnostic that asks two questions on every one of them — and, underneath, one folder per chapter for every course, so the next chapter of Calculus lands in a place that already exists.
  • MathStudio — SAT/ACT PrepEach SAT domain has four topics now instead of two, and each ACT domain three (Geometry four): linear graphs, inequalities, equivalent expressions, nonlinear systems, scatterplots, two-way tables, similar triangles and volume on the SAT; number properties, factoring, sequences, arcs and sectors, coordinate geometry, counting and expected value, and number sense on the ACT. Every new topic has a worked problem with its wrong answers explained. The diagnostics ask exactly two questions on every topic — thirty-two for the SAT, thirty-eight for the ACT — so the study map has the same evidence about each. A stored attempt from the old set is discarded rather than scored against the new one.
  • MathStudio — how a chapter is keptBehind the scenes, every course now keeps one folder per chapter: the lesson, its worked solutions and the exam’s source together, with a catalogue the course page reads and a separate, server-only registry the lesson pages read. The split is what keeps a solution set behind the password out of the browser. Nothing moved for a reader — every address is the same — but Chapter 2 of Calculus is now a folder and a flag away, and Intro Statistics has the shape for its first lesson waiting.
  • Behind the scenesA second pre-ship check reads the prep content itself: every diagnostic question tagged to a topic that exists, every answer among its choices, exactly two questions per topic, and the ACT’s A–D and F–J lettering on the right questions. Read-aloud names for choices now say cube roots, plus-or-minus and the rest properly.
V1.2cSeptember 7, 2026A small release on top of V1.2b, mostly so that Google can see the site: the Search Console tag, a diagnostic clock that counts down, and a pre-ship check that runs itself.
  • MathStudio — the diagnostic clockIt counts down now, from what the test would allow for this many questions, and past zero it goes into the negative in red. Nothing stops — the point of a diagnostic is to find out what you know, not what you know in thirty-two minutes — but you can see that you are over.
  • Search ConsoleThe page carries Google’s verification tag, which is what lets the site be claimed in Search Console and its sitemap submitted there. From then on Google reports which pages it has indexed and which searches bring people here.
  • Behind the scenesA smoke test — one command that fetches every page in the sitemap and fails on anything broken, any formula that did not set, any stray dollar sign, or a gated page that opens — runs before every release now. The Projects code no longer carries notes for content that is not coming.
V1.2bSeptember 7, 2026A correction and an optimisation pass on top of V1.2a: the arithmetic behind the car-finance tool, the course cards on a tablet, lighter pictures everywhere, and the plumbing that search engines and link previews read.
  • Why I Financed My Car — the toolThe comparison was wrong. It weighed the investment’s gain against the loan’s interest and let the principal repayments come from nowhere — as if paying cash did not leave that same income free to invest — which put the break-even at about half the loan rate. It now compares like for like: paying cash invests the freed-up payment every month, financing keeps the sum invested and pays from income, and each path is scored by what you hold at the horizon. The break-even is exactly the loan’s own rate, and the tool prints it. The two rate sliders share one scale, the car’s depreciation is a slider rather than an assumption, and each row of the breakdown says whether it adds to the total or is there for context.
  • MathStudio — chapter cardsCalculus, Finances and Intro Statistics now share one card, in the same three rows, with a pill on every picture that opens the topics and closes them again — on a tablet as well as a desktop. The tablet had been showing every card permanently open, by a rule that answered the absence of hover on a phone by hiding nothing; the pill answers it properly, and hover previews only where hover exists.
  • PicturesEvery photograph on the site was going out at the size it was saved, as JPEG. Each is now sized for the widest column it appears in and encoded as WebP, with its dimensions in the tag so nothing shifts when it lands and off-screen pictures wait their turn. The images folder went from eight megabytes to four; the Personal page from 1.1 MB to under half. The MathStudio screenshot under Personal was retaken in the dark theme it actually has.
  • Search engines and link previewsA link to any page now shows a card — title, description, picture — in iMessage, LinkedIn, Slack and X, with each post carrying its own hero. The site declares who it belongs to and each post its date and author in the vocabulary search engines share, lists everything indexable in a sitemap, and tells crawlers to leave the login pages, the private area and the studio’s assessments alone.
  • Files not hosted hereThe NBA injury dataset is no longer served from the site — thirty-three megabytes on every deploy for a file few people download. It, and the other files the archive lists without hosting, are now a request: the notice names the file, and one click opens the contact form with the reason chosen and the message begun.
  • Smaller thingsEvery response carries the headers a site should — no more announcing the framework, no sniffing, no framing by other sites. The finance figures stopped loading a maths library they never used. The two verdict rows under the car tool sit as equals.
V1.2aSeptember 7, 2026Two new courses in MathStudio and a rebuilt third. SAT/ACT Prep opens with a diagnostic for each exam that says which topics to read; Finances goes from one problem a chapter to five steps each; and Intro Statistics has its whole outline on the page.
  • MathStudio — SAT/ACT PrepA new section with a door for each test. SAT Math is four domains and eight topics under the names the digital test uses; ACT Math is six domains and twelve, built for the enhanced test — forty-five questions in fifty minutes, four choices, no formula sheet — with its choices lettered A–D and F–J by turns as the real sheet is. Each topic is one idea, one worked problem, and the trap the test sets on it.
  • MathStudio — the diagnosticEach course begins with a diagnostic, scored on the page: twenty questions for the SAT, thirty for the ACT, one at a time with a strip for moving around and a clock that stops nothing. Typed answers are read the way the SAT reads them, so 3/4 and 0.75 are one answer. The results are a study map — every topic with what you got right, a link to the exact step for anything you missed, and permission to skip what you swept. It is saved on your device, so a closed tab is not a lost attempt. The diagnostics are open; they are the thing that tells you what to read, and a password in front of that would put the door before the map. Full-length tests, behind the password, come next.
  • MathStudio — Finances, rebuiltEvery chapter was one idea and one problem under a title that promised more. Each is now five steps and three or four worked problems — twenty-five in all — and the chapters lean on each other: the same salary runs from the tax chapter into the retirement one. Two new figures, for the two chapters that had none: where each loan payment goes, month by month, and what paying only the minimum on a card costs in years. The tax chapter uses the 2026 brackets and deduction. One correction: the car payment is $243.38, not $243.37.
  • MathStudio — Intro StatisticsStatistics becomes Intro Statistics and opens as an outline: twelve chapters in the order a first course takes them, each card carrying its full list of subtopics and opening to show them on a tap. No lessons yet; the syllabus is readable from the grid, and the chapters fill in one at a time.
  • LessonsA worked problem can now carry lettered choices and a system of equations set on its own lines, and the same lettered rows are what the diagnostic uses while you sit it and when it marks you. A lesson opened cold at a topic link used to land a hundred pixels low, because the page kept moving under the anchor as its figures loaded; it now settles where it should.
  • Smaller thingsThe studio home reads four of eight open. The typed-answer box in the diagnostic no longer brings up the phone’s number pad, which has no slash on it.
V1.13 releases · V1.1a – V1.1c
V1.1cSeptember 6, 2026A second course in MathStudio, and a pass over how the whole site behaves on a phone — navigation, dark mode, and every figure in the studio.
  • MathStudio — FinancesA new course, seven chapters: budgeting, banking, credit, loans, taxes, investing, and insurance. One idea and one worked problem each, with five interactive figures — the three budget buckets, a day of overdraft fees as a staircase, tax brackets filling on an income axis, a compound-growth tool, and a hospital bill splitting between you and an insurer. No exam and no answer key: nobody sits a test in how a deductible works, so nothing here is behind the password.
  • MathStudio — working through a problemEvery worked solution now arrives one step at a time. Press the block to reveal the next line, so a student can be asked what comes next before seeing it. A quiet control at the top of a lesson opens all of them at once, for anyone marking rather than learning.
  • MathStudio — dark modeProperly dark now: the page is black and cards lift barely off it, rather than the grey-on-grey that made every panel read as its own box. The figures were the worst of it — parts of them were painting black inside a grey card, which turned out to be a bug rather than a colour choice.
  • Figures on a phoneThe plots in a lesson are drawn for the width they have instead of being shrunk and panned sideways, which used to put the axis off screen while the slider driving it sat under your thumb. Each one is now exactly as tall as it is, which took a band of empty card off the bottom of every figure — on a phone, enough to have been hiding the caption.
  • Getting aroundPages start at the top. They did not always, and the lesson was the worst offender. Clicking the page you are already on now takes you back to the top of it, from the header or the footer. And a lesson has a pair of buttons in the corner for jumping to the start or the end of a chapter.
  • Between the two sitesGoing into MathStudio or back out to thommasphan.com now takes a moment, with the name of the place you are heading to. They look nothing alike, and arriving instantly read as a glitch rather than as a door. The theme demo under Personal uses the same thing instead of its own.
  • DocumentationThis page shows the current release in full and folds the older ones into an archive at the foot of it. The log only grows, and the version you came to read is the one at the top.
  • Smaller thingsThe home abstract says what the site is trying to be rather than how long it took. Interests is a set of photographs rather than a gallery that reopened the one you clicked. More room in the Projects panel and in the studio header on a phone. The studio’s theme control is a switch that says which mode is on. The onward link at the foot of a post sits right where it belongs on a phone.
V1.1bSeptember 6, 2026A correction on top of V1.1a. Signing in was the part of MathStudio nobody could tell was working, in three separate ways.
  • Signing inSigning in from a practice exam looked like it had failed: it put you back on the login form, and only a manual refresh got you through. The page had cached what the site told you while you were signed out — including the redirect to the login page — and was replaying it afterwards. It now reloads properly on the way in, so you land where you were going.
  • Signing in — already signed inA link that had gone stale the same way could drop you on the login page when you were already signed in. It now sends you on rather than asking again.
  • Signing in — where it can send youThe login page took its destination from the address bar without checking it, which meant a link to thommasphan.com/login could have carried a visitor off the site through a page with my name on it. It now only accepts destinations on this site.
  • MathStudio footerLogin now reads Logout once you are in. Almost all of the studio is open, so without it the only way to find out whether you were signed in was to walk into an exam.
  • PasswordsEvery password box on the site has an eye in it now. This is a password that arrives in a message rather than from a password manager, so nothing fills it in for you and typing it blind is the easiest way to get it wrong. The access box also focuses itself when it opens, which it had never actually managed.
V1.1aSeptember 6, 2026MathStudio opens. A second site inside this one, with its own typeface, palette and navigation, built for my students — plus the first chapter of Calculus written out in full.
  • MathStudioA teaching site at /mathstudio, set in Hammersmith One on its own palette, with a dark mode that follows your system setting until you tell it otherwise. Eight subjects are listed; Calculus is the one that is built. It is linked from the footer of every page.
  • MathStudio — what needs a passwordAlmost nothing. Courses, chapters and lessons are open, because shutting a student out of a lesson defeats the point of putting it on the internet. Exams and solutions are closed, because an exam is worthless once it is public.
  • CalculusNine chapters, filterable by AP track. AB and BC each drop the topics that are not on them, and Chapter 9 — vectors and multivariable, past both exams — shows only when nothing is narrowed.
  • Chapter 1: Limits and ContinuityThe first lesson, written out in full: fourteen steps from Zeno at the wall through to the Intermediate Value Theorem, with twelve live figures you can drag rather than pictures of graphs. Every derivation is labelled a move at a time, because the arithmetic is rarely what anyone is stuck on.
  • Chapter 1 — practiceA sixteen-question practice exam as a printable PDF, and worked solutions on the web with each answer closed until you ask for it. Both are behind the password.
  • Blog — S**tPost HubThe unserious posts now have a home of their own at /blog/lipschitz, named for Rudolf Lipschitz. Old links to them still work; they redirect.
  • Blog — The Real Cost of Klay’s ACLA new case study on what one knee cost the Warriors, built out to $471 million across salary, championship equity, ticket revenue and the luxury tax, with four interactive figures in the team’s colours.
  • PersonalWebsite Building runs three demos instead of two, with MathStudio as the third — the only one that is a working site rather than a mockup. Tutoring links to it.
V1.01 release · V1.0a
V1.0aSeptember 6, 2026The first numbered release. Mostly a pass over what the site does on a phone, which is where most of it had never actually been used.
  • Header panel — attentionThe panel was paper on paper, so the only thing dividing it from the page was its bottom rule. It now casts a soft shadow and dims everything behind it.
  • Header panel — ProfessionalProfessional is a hub of its own, so a photo of an office was the least useful thing its slot could hold. It now lists the four roles, each linking straight to its page, with company marks for Kinoped, the HHV-6 Foundation, and Andrew Chang & Company.
  • Header panel — touchThe panel was built on hover, and a touch screen has none: it opened on a tap and then had no gesture left that would close it. It is now a toggle, the dimmed page dismisses it, the preview holds on Publications to pair with the featured publication, and it caps its own height rather than running off the bottom of a short screen.
  • NavigationOn a small screen the nav spreads across the header with Contact flush right, inset from the left edge rather than crowding it.
  • FiguresThe simple and multiple regression figures redraw at the width they are given instead of being a fixed 800px canvas scaled down to illegibility. The 3D one turns slowly on its own, so a phone that cannot drag it still sees it from every side.
  • DocumentsA forty-column table was stretching a whole document to 3,886px; wide tables now scroll inside their own box. The storyboard mockup got the viewport tag it never had, having been written before it was ever going to be read on a phone.
  • PrivacyCorrected the hosting section, which still named the host the site was going to be deployed to rather than the one it is deployed to.
  • This pageAdded, along with the version scheme above it.