A street grown from data

Why this site lays itself out — one array, a street of doors, and a seed you can re-roll. Parametric design as a way of keeping promises.

The page you probably arrived from — the luminous one, with the doors — was not laid out by hand. There is no markup for any of those doors. There's an array. Each project is one object in it, and a small generator turns each object into a door: the cluster picks the color of the light, the status decides whether the door stands closed, open, or ajar, and the weight sets its size. A seeded random stream does the rest — heights, transoms, panel patterns, which side the hinge hangs on.

I keep coming back to why that matters to me, and it's not the trick of it.

Change should be cheap where it happens most

Every portfolio I've ever maintained rotted the same way: the work moved and the page didn't. Updating meant re-opening layout decisions I'd already paid for once. Parametric designers in the building world have a blunt version of this insight — wire inputs to outputs once, and a change to a variable propagates through the whole model instead of through your weekend. Structural engineers do it so a client's "what if the grid shifts a meter" costs minutes, not a re-draw of every drawing set.

Here, the same move at toy scale. Shipping a new project is one datum:

// add a door — the street re-lays itself
{ id: 'ceniza', name: 'Ceniza',
  cluster: 'games',   // → lime light
  status: 'wip',       // → ajar, light spilling
  weight: 1 }          // → a small door, for now

The field, the filter chips, their counts, and the "Now building" band all grow from that one array. Nothing to keep in sync, because there is only one thing.

Data as input, not decoration

The part I find harder to explain is the footer panel — parámetros. Density, glow, seed. They're not easter eggs; they're the same inputs the generator used the first time, left exposed. Re-roll the seed and you get a different street built from the same truths. The facts don't move. The presentation is honestly downstream of them.

"The purpose of computing is insight, not numbers." — Richard Hamming

The insight, for me: a portfolio is a claim about how you work. A hand-laid page claims taste. A grown page claims a system — and systems are what I actually make. So the site had to be one, or it would be lying a little.

What carried over

  • One source of truth, many surfaces. The array drives four renderings; add a fifth (an RSS of doors?) without touching the first four.
  • Constraints before geometry. Accessibility rules — contrast floors, keyboard paths, reduced motion — were parameters of the generator, not a cleanup pass.
  • Reproducibility is a feature. Same seed, same street. If you can't regenerate it, you don't really have it.

Is a personal website worth this machinery? Probably not, strictly. But strictly was never the point — the doors are small, and I wanted somewhere honest to practice the thing I keep telling clients: build it so the next change is cheap, then the next ten changes actually happen. Whether the metaphor holds at the scale I want to take it, I don't know yet.