time--:-- UTC+7depthat−8.2192, 114.3691at−8.22, 114.37builda627c4e
03

log

This site is an experiment that keeps a record of its own changes. Every entry is a change to the instrument — what changed, and why. Following one opens the casing where the change lives.

  1. 2026-10-18

    the mark stopped being an atom, and the dial now opens the casing on the brand too

    three tilted ellipses around a glowing core is the Rutherford atom, not an instrument — and an astrolabe is a flat projection with no orbits in it at all. It was also the last thing here still drawn in the retired language: hairline strokes, three-fold symmetry, a soft halo. What replaces it is a plate with a rule cut through it, and the dial opens it: shut at -v, the casing thinned to an outline with its graduated limb showing at -vv, graduated finer at -vvv. The silhouette is identical at all three on purpose, because a favicon and an avatar get neither dial nor stylesheet, and an identity that changes outline is not one. The rule is a real hole cut with fill-rule evenodd rather than a bar painted in the background colour, so the mark is correct on the ground, on a surface panel, and on whatever a platform puts behind an avatar. It answers nothing now — no tilt, no spin, no ripple — which retires about 140 lines of framer-motion: a mark you can spin says toy, and the dial is the thing that is supposed to do something.

    unattached

  2. 2026-10-18

    the whole site moved onto one typeface, and the studio’s name now collides by case instead of by family

    the brief was that the terminal should be felt, and it was only being felt in the machine register — one sans held both the headings and every sentence of prose. The spec had rejected one family because monospace across long paragraphs is tiring, which is true, and which was written before the prose existed. Measured: /manual is 385 visible words with a 50-word longest block, and the only real volume is /log, which is a changelog and the most terminal-native text there is. The bill is width rather than fatigue — /log runs 17% taller. What this costs is the old collision at the studio’s name, so it moved: display caps are tracked out, the wordmark stays tight and lowercase, and against tracked-out caps one tight lowercase word is the conspicuous thing. That makes the display tracking load-bearing where it used to be taste, so a guard now fails if it goes to zero.

    unattached

  3. 2026-10-18

    the measure came in from 1400px to 1040px, and the face stopped telling you to scroll

    the panel was never too long — `/` is 1454px, under two screens. It was too wide. Every block held one column inside a 1400px measure, so an inventory line put its name at one edge and its filing at the other with a thousand pixels of nothing between them, and the mark floated in a corner related to nothing. The eye crossed a canyon to join two things that belong together. At 1040px the gutters stay full-bleed and the readings close up, which is the Swiss half of the language doing its actual job. The `scroll ↓` line went with it: it was pinned to the frame for a first screen that is now 280px tall, so it hung over the telemetry panel pointing at an inventory already in view, and a hint you have already taken is furniture.

    see it in place

  4. 2026-10-17

    open the casing on the motion entry and the archive runs the piece instead of describing it

    the piece is not a video that happens to exist — it is a program that draws itself, and the video is one run of it recorded with its score. So the file moved to where the site can serve it, the renderer now walks that same file, and at -vv the page drives it the way render.py does: step(f), thirty times a second, nine hundred times, never skipping a frame because each one is drawn over the glow of the one before. The surface keeps the video, because the dial adds what is read and never takes the page away — and because the program is silent, the score only ever meeting the picture in the render.

    see it in place

  5. 2026-10-17

    the welcome went back to being a power-on check rather than a sentence about one

    the POST read `power`, `fonts ready`, `depth -v` — five words in a column, which is a list, not a machine. It is written as a real self-test now: a header signed with the build that is serving the page and the place it is calibrated for, checks that report into a right-hand column with the leader drawn between them, and `ready.` The leader is drawn rather than typed because a line of dots counted in characters lines up at exactly one width. The bar in the first act says what it is measuring, and six lines at 200ms is the two seconds the welcome was drawn at.

    unattached

  6. 2026-10-17

    the motion piece plays on its own page instead of being described there

    the archive entry for a thirty-second piece showed a panel stating that it was a thirty-second piece — the one failure an archive cannot afford, since the whole point of the page is the work. An instrument may now name a file, and where it does the page plays it: with controls, never on its own, and loading only its first frame for a reader who scrolled past. The blueprint panel stays for entries that genuinely have nothing to show.

    unattached

  7. 2026-10-17

    the panel took the last three things the approved face had and this page did not

    the sentence the face was drawn with — an instrument shop, made by one pair of hands in Banyuwangi — says where the studio is and who is in it, which the one it replaced did not; the metadata says it too, so the site tells search results the same thing it tells a reader. The inventory names are set in the machine register and lowercase, because on the face an inventory line is a reading like the clock above it; the archive still sets them as display headings, where they are titles. And the face carries one line that is not a reading, `scroll ↓`, because a screen deliberately full to its last line is the one that reads as the end of the page.

    see it in place

  8. 2026-10-17

    the panel found its one left edge

    the identity block put the page gutter inside its 1400px measure instead of on the section around it, so above 1400px the box centred first and the padding then stepped it 24px further in than the inventory below. It looked right at every width up to the measure and then the panel quietly had two left edges. A source-level guard now fails if any measure carries a gutter of its own — jsdom lays nothing out, so the honest geometry test cannot exist here.

    unattached

  9. 2026-10-17

    the panel reads its inventory as two columns, the way it was drawn

    the approved face had a name on the left and its filing — year, and whether anyone asked for it — on the right, and nothing in between. What shipped put the stack, the kind, the year, an ordinal and a hover arrow on one line and a thumbnail beside it: five columns on a face meant to be taken in at a glance, each one pushing an instrument closer to the fold. The archive keeps the fuller row, because it has a page to itself.

    see it in place

  10. 2026-10-16

    both bars of the frame read at one height, and the dial runs into the casing wall

    the bottom bar was 44px only because the dial is a touch target, which left the instrument with a thin lid on a thick base — two rules that are meant to be a pair. With a pointer there is no touch to size for, so both bars are 28px and the dial fills the bar from rule to rule instead of floating in a lane of ground. The compacted frame keeps 44px, because that is where a finger actually arrives; 28px is above the 24px minimum and below the 44px target the phone keeps.

    unattached

  11. 2026-10-16

    the tick rule came off the window s leading edge, and --rule went with it

    it was drawn as one piece of furniture with two functions — fine marks at -v, a numbered ruler deeper in — which is what earned it a place. In the built frame it read as a strip of marks beside the content measuring nothing a reader had asked about, and once the casing closed around the whole instrument it was a second edge competing with the real one. Its ink was the only thing --rule was ever read by, so the token is retired rather than left inert.

    unattached

  12. 2026-10-16

    the readout lost its ticker and spread out; the dial stopped filling with amber

    the bar carried four live readings packed to one end and a marquee of disciplines filling the rest — but a list of what a studio does is a claim, not a reading, and it was the last piece of the old home page still running. The readings are spaced across the bar now, the way an instrument spaces its dials. The dial went with it: selected is a ruled box and amber text rather than a filled block, because a block of accent in the corner of the frame pulled harder than anything on the page it was meant to serve.

    unattached

  13. 2026-10-16

    the scroll progress bar came off the readout

    it was decoration by its own admission — an accent line across the top bar reporting how far down a page you are. No panel asked for it, the scrollbar already says it, and on an instrument whose whole claim is that every reading means something, a line that measures nothing about the work is the one that costs the most.

    unattached

  14. 2026-10-16

    the casing closed around both bars: the whole viewport is the instrument now

    the panel that was approved drew one ruled box holding the readout, the content and the dial together, standing inside the screen. What shipped had the bars clamped to the viewport edges with a ruled pane between them, which reads as a page with furniture rather than as a tool. The casing stands 12px in from 768px up, paints the ground outside itself so nothing scrolls past in the gutter, and is absent on a phone, where that margin would be paid for by the content.

    unattached

  15. 2026-10-16

    the content moved into a ruled pane, and the grid behind the site came off

    the frame was two bars with a document between them, which is furniture above and below a page rather than an instrument. The pane is the glass: inset from the casing and ruled on all four sides, with the tick rule left outside it because the ruler belongs to the casing. The blueprint grid behind every page went at the same time — it was never in the approved panels, and it competed with the one grid that means something, the measured layer at -vvv.

    unattached

  16. 2026-10-16

    the thumbnail came back to the inventory on this site's wider pages, at 1280px and up

    a picture beside each name is worth having where there is room beside the line for it — a 14" laptop and up. Narrower than that it sets the row height from the image instead of the text and the index reads as a stack of cards again, so there the row stays a datasheet line.

    see it in place

  17. 2026-10-16

    every page opener shrank to the label it always was

    the panel was drawn and approved as labels and datasheet rows, and what shipped set each page title three times the size of the work under it — so the identity took the first screen, the inventory fell below the fold, and the shell prompt above it was one ingredient speaking for all four. The ordinal and the name are the opener now, at label size, on every route.

    see it in place

  18. 2026-10-16

    the inventory lost its thumbnails and became lines of a datasheet, on the panel and in the archive alike

    a picture beside each name set the row height from the image rather than the text, which turned the index back into the stack of cards it had replaced. Three instruments are legible at a glance now, and the one entry with no still to show stops being the awkward case.

    see it in place

  19. 2026-10-16

    the instrument greets whoever opened it, once per session, in two acts

    the welcome was going to be the thing that explained the dial, which cancelled itself: anyone who skips it still has to be told. So it greets instead, it names the route you actually opened, and the dial is explained in the manual where everyone can find it.

    see it in place

  20. 2026-10-16

    the home page became the instrument panel: identity, inventory, telemetry, one contact line

    it was a landing page with a statement, a card deck and a second contact section. The inventory now starts before the first scroll, the prose moved to the manual, and a test on the import list is what stops a tagline block growing back.

    see it in place

  21. 2026-10-16

    headings started measuring themselves against their column rather than the window

    opening the casing narrows the text column by 15rem, and a heading sized in viewport units kept its old size: the home page’s name was clipped mid-word at -vv. cqi follows the column, and falls back to the viewport where there is no column.

    see it in place

  22. 2026-10-16

    the pitch-deck voice was cut out of every page, and the services list was deleted

    five services with deliverables, milestone billing and reserved hours is a price list however it is worded, and nothing is sold here. What was left of the voice promised outcomes a reader had no way to check.

    see it in place

  23. 2026-10-16

    the routes were renamed: /the-story → /manual, /projects → /instruments

    an instrument ships with a manual, and a workshop shows its instruments. "The story" is an agency word, and both old urls still redirect.

    see it in place

  24. 2026-10-16

    the archive stopped being a portfolio and became an inventory

    two commissioned entries read as a thin portfolio. Marking each one commissioned or built out of curiosity — and letting the motion piece in — says in two words that this is a workshop.

    see it in place

  25. 2026-10-16

    the frame arrived: a readout above, the nav and the dial below

    the depth control is only honest if the way out never scrolls away. It cost 72px rather than the 46 the design estimated, because a 23px bar cannot hold a 44px control.

    unattached

  26. 2026-10-16

    the dial came back as -v / -vv / -vvv, over one language instead of three

    the old control changed how the site looked, which was decoration. This one changes what it says, and the verbosity flags are what the idiom already meant.

    see it in place

  27. 2026-10-15

    three visual languages — phosphor, riso and swiss — were retired into one

    a reader had to pick a language before reading anything, and two of the three were a quotation rather than a voice. Swiss was folded into the one language rather than deleted; riso’s second ink came back as the annotation ink.

    unattached

  28. 2026-10-15

    the full-page texture film came off, and the hero stopped decoding itself

    the film was a fixed overlay above everything, which made retro the identity through the back door. The scramble was the same mistake in motion: brutalism does not introduce itself.

    see it in place

  29. 2026-10-11

    the site grew three selectable visual languages and a frequency dial

    the first attempt at making the experiment visible. The mechanism was right and survives as the depth dial; the three languages were the wrong thing to put behind it.

    unattached

  30. 2026-05-07

    the first astrolabs: a mint-on-black terminal portfolio

    where this started. One accent, one monospace face, five sections and a services list — most of which has since been argued with.

    unattached