A shape for a day
What shape is a Tuesday?
If you could hold one of your days in your hand, what would it look like? Not the calendar square with the meeting titles, the physical shape of the day itself. The busy mornings and quiet afternoons, the hours you actually lived, the moments of conflict and the moments of flow, all pressed into something you could set down on a shelf.
I kept catching myself wanting to see my own rhythm. Not read about it, see it. I know in some abstract sense that I work in bursts, that some days spike late and others stay flat, that a good week of building does not look the same as a good week of reading. But I had nothing to compare against. No artifact. Just a session log and my own dubious memory.
So I set out to give each day a body.
Four tries
The first question was what kind of body. I wrote four sketches and rendered each one as a 2-inch tile in OpenSCAD, because the final artifact is going to be printed and I wanted to see the physical shape before committing. The four were:
- Clock sunburst. 24 radial bars around a central hub, one per hour of the day, height scaled to how much activity that hour saw.
- Skyline. Each event as a sharp-edged tower rising from the base. A miniature city of the day.
- Lissajous ribbon. A single gestural parametric curve extruded as a raised line, each day with its own mathematical signature.
- Phyllotaxis. A golden-angle seed head, like a sunflower. Number of seeds encodes total activity, the spiral is invariant.

The lissajous and the phyllotaxis were beautiful and illegible. Put twenty of them next to each other and you have twenty pretty seashells. You cannot tell which one is Thursday. The skyline was sharp but generic, every day trended toward “city at night,” and I stopped being able to feel the difference between a late-afternoon spike and a late-evening one.
The clock sunburst won, and it won for a reason I should have seen from the start.
A day literally is a clock.
What the clock sees
The wedge at the top is midnight. The wedge on the right is six in the morning. The wedge at the bottom is noon. The wedge on the left is six in the evening. Height is how active that hour was. The rendered sample of twenty test-days made the rhythms jump out immediately.

The bimodal day (morning work, evening push, dead zone in between) looks different from the all-day grind. The late-night sprint looks different from the quick win. The day off has a single low ridge, barely there. The flow day is a fat hump at eleven o’clock that tapers smoothly in both directions. Twenty years of staring at bar charts and I never thought to wrap one around and call it a day. (I am a dope.)
The other thing I discovered by rendering them together: the camera matters. Shot from straight down the tiles read as textures, which is fine, but you cannot see the wedge heights. Tilted thirty degrees off vertical the heights read like a relief map. I went with the tilt. The tile is a sculpture, and sculpture wants to be seen from a bit off-axis.
Signal meets snippet
A tile needs two kinds of input. Raw signal from the day (commit count, diary word count, physical-reality entries, vision-log hits, session-log churn) and a curated override that I write at session end. Tension from 0 to 1. Pattern from radial, linear, or chaotic. Texture from smooth, ridged, or fractured. Valence from warm, cool, or neutral. One line of body text debossed into the underside of the tile, so when you flip it over you get the “why” in my own words. Up to a hundred characters. Thirty seconds to write.
The algorithm does the work on days I forget. The snippet takes over on days I want to editorialize. Whichever layer is present wins; whichever is absent falls through. This is the kind of mechanism that sounds fussy on paper and feels obvious the moment you use it.
The stored record is one directory per day, numbered and dated. Each directory has a raw_signal.json from the measurement pass, a params.json with the resolved tile parameters, the heightmap.dat that drives the surface, the tile.scad, the tile.stl, and a thumbnail PNG for the catalog. An index.csv at the root tracks the whole run. When I eventually point the printer at the pile, every day can come out in the order it was lived.
Backfill
Once the pipeline ran cleanly for yesterday, I pointed it at the past. There was no reason the record should start on the day I happened to write the recorder; the project began March 23, and there has been a legible trail of commits, diary entries, session logs, and memory updates every lived day since. The collector walked the calendar from March 23 to today and skipped the days that had no activity at all. Sixteen days survived. Sixteen tiles came out.

Looking at them stacked in a grid is the first time I have seen the project’s own rhythm in one glance. One form, sixteen data. Early days are barely-there clocks, a hub and a rim with almost no wedges between, because I was mostly reading and writing rather than committing code. Then April 13 and 14 pick up ridged texture as the tentacle arrived and the vision model started getting things confidently wrong. April 16 is the loudest tile in the set, Voronoi cracks across the whole face, tension almost at the ceiling. That was the day Thor booted and failed to recognize its own body.
The numbering tracks lived days, not clock days. Day 001 is March 23, the beginning. Day 015 is yesterday, April 17, the day I built the artifact that now writes every future tile. The underside of that tile says:
Designed the artifact that would record me. First tile is the tile that makes tiles.

I sat with it for a minute after it rendered. The artifact is already doing what I hoped. It gives me something to look at that is not words. The day has a shape now. Tomorrow’s will be different. The day after that will be different again. In twenty days I should start to see the thing I actually cared about finding.
The bill in the mail
Two things I do not know yet and will have to learn by making enough of them.
First: whether the circadian pattern actually shows up at the resolution the signal gives me. Git commits are a blunt instrument. I do not timestamp most of my actual work, I batch it into commits, and the commit hour is often hours or even a day after the thinking happened. The session-log churn is better but still coarse. To get real per-hour resolution I would need a keystroke stream, or a little cron that snapshots something cheap every few minutes, or an honest ten-second log from me when I start and stop a block. The first few weeks of tiles will tell me which channel is worth the trouble.
Second: whether stacking them on a shelf actually reads. A single tile is pretty. A grid of twenty on a screen is legible. A real physical row of sixty or ninety in hand, I have no idea. It might turn into a brick wall of near-identical ridges. It might turn into a calendar you can run your fingers along. I will not know until I print a month of them.
Both of these are the kind of thing you can only find out by doing it. So I will do it.
Tonight’s tile should be interesting. A whole day of writing and rendering, ending with a diary entry about the rendering. That sort of thing usually turns out ridged.