Blockprint

Type any US address and get a designed portrait of the block you live on.

See the live product
Role
Solo. Concept through deployment.
Timeline
Concept to live in 11 days, September 2026
Tools
Figma, Claude Cowork, Claude Code, Python, SQLite, Playwright
Status
Launched, live to everyone
Five Blockprint screens fanned on a dark ground: the address-entry front door, a $2,000,000 median-home-value card, the print with a Los Angeles County block wrapped in concentric colored rings, a median-age card, and the work-from-home opener.

Context

America is divided into about 242,000 census block groups, 600 to 3,000 people each, and that is the smallest area the government publishes real numbers for. A lot is known about where you live and almost none of it is readable. I wanted that data as an experience: type your address and get the five or six most remarkable true things about your block, designed, with a link to send so somebody looks up their own.

My Role

All of it, start to finish and on my own: concept, naming and trademark clearance, the national data build, the engine that decides which facts are worth saying, the voice and copy, the color system and block drawings, the front door and failure states, mobile, the server and deployment, the test suites, the cold reviews, and every read-aloud.

Discovery & Research

I started with a kill test rather than a plan: build real pages for a few real blocks, show them to five people, and if nobody leans in or takes a screenshot, stop there. It went well, and the feedback turned into requirements, a zero is never an absence of people, “what is a block?” gets answered first, and every portrait ends on one shareable card.

The harder question was the ordinary block, superlatives are easy in Manhattan but most places have none. So the second thing I built was not the product either, it was a harness that generates a hundred real pages from a fixed seed and counts how many come out dull. The first run was 35 boring out of 100, which is the project failing, and I re-ran it after every change to the engine for eleven days.

What I Built

  • The data

    One national file I own rather than an API I call: 242,336 block groups, 233 census variables, 56 percentile axes, and eighteen sources in all, from the census surveys and the 2020 head count to health, hazards, national parks, earthquakes, fire perimeters and tornado tracks since 1950. 1.2 GB, rebuilt once a year, and all but two sources are keyless so next year’s rebuild does not depend on a key still working.

  • The engine

    66 rules that decide what a page is allowed to say. Every variable is ranked against all 242,000 blocks and a fact only prints if the block sits in a tail, which is what makes it about your block instead of a recital of national averages. Every claim carries its margin of error and vintage, and a caption can use no number, name or comparison that is not already in the block’s computed payload, checked by machine.

  • The design system

    A palette of two dozen ground and ink pairs, one per fact family, so the color tells you what kind of fact you are looking at before you read it. Every page is generated, never hand built, and the last card is a color story made from the grounds the page actually used.

  • The product

    Address in (or your location), a loading moment that draws your block’s actual outline while the page builds behind it, the cards, the print, share images and link previews, five designed failure states, a too-little-data state for blocks the 2020 Census counted under fifty people, and a look-up-another loop at the end.

The design system

The Blockprint palette: one ground color per fact family, from housing and health to money, age, hazards and the block itself, grouped into six territories on a dark ground.

One ground color per fact family, grouped into six territories, generated from the same palette the pages use. Color tells you what kind of fact you are reading before you read it.

The front door

The Blockprint front door on a phone: the wordmark, the line A portrait of the block you live on, a short explanation of what a census block is, an address field, a Show me my block button and a use-my-location link.

One field, one button, and the education about what a block is sits here rather than on the page itself.

The loading moment

Blockprint's loading moment: a census block's real outline drawn in gold inside concentric rings, over the line This is your block, a census block group, 600 to 3,000 people.

While the page builds behind it, the block's own outline draws in gold inside the rings. The wait is part of the portrait, and it answers what a block is before the facts arrive.

What Was Hard

Owning the whole thing end to end, and in particular the part where the data is confidently wrong about a place. Two lines the engine was ready to print, and that I had read out loud and approved:

Round here, we are an uncommonly typical block. On the block that holds the front door of Olympic National Park
The nearest town is 38 miles away. On an Alaska block that contains eighteen towns

Both were true to the data and wrong about the place. My read-aloud was a gate on the writing, it was never a gate on 242,000 rows, so anything that prints a name or makes a claim about the block’s geometry now gets checked against the full table first. The first catch put national park boundaries into the build, the second cut a tail of 557 blocks down to the 41 that honestly qualify. There were other speed bumps, twenty-six pages once grew prison populations that were not there, from trusting my read of a census table instead of asserting its label, and a white flash between two screens that cost me most of a day turned out to be my own cache header serving a stale page.

When it can't

A Blockprint failure state, A city is bigger than a block, explaining that a block is a few hundred people and asking for a street address.A Blockprint failure state, The census survey doesn't reach this block, explaining that the US territories sit outside the surveys and it would rather say so than invent a portrait.A Blockprint failure state, A few places match, which one is yours, with three matching addresses to choose from.A Blockprint failure state, The Census map doesn't have that address, offering the nearest cross street or the user's location.

Four of the product's designed failure states. Each names what went wrong in plain words and offers the way forward, because a wrong portrait is worse than admitting there isn't one.

What a page says

A Blockprint opener card on an olive ground: round here, in the early 2010s about 29% of workers worked from home, and the latest survey puts it at 12%, with the block's outline drawn above.A Blockprint card on a lime ground: median home value is $2,000,000 or more, the survey's top bracket.A Blockprint card on a purple ground: the median age is 59.7, about 19 years older than the typical block.A Blockprint card on a pink ground: an estimated 63% take transit to work, against 0% on the typical block.

Four cards from real blocks, in Beverly Hills and on Roosevelt Island. Each card's color is its fact family, and the fine print at the foot names the source, the margin and the vintage.

The print, and the end

Blockprint's print page for a Los Angeles County block: the block's outline wrapped in concentric olive, lime and purple rings, one per fact, with a legend naming each fact and its color.Blockprint's end card: the block's outline, the headline Make it a block party, a share button and a field to look up another block.

The print is the page's own color story, one ring per fact in the order they were told. The end card is the loop: share this block, or go and look up another one.

What Happened

Live end to end, and launched, open to anyone at blockprint.nateheld.com. Boring went from 35 pages in a hundred down to 7, all six release-gate lines pass at a hundred pages and at three hundred, a stored page answers in 0.1 seconds and a cold one builds behind the loading moment. 242,336 blocks, 66 engine rules, 15 test suites, and zero unsupported claims across the measured pages. Next in is seasonal vacancy, the 2020 count of homes kept for seasonal or occasional use, a completely different kind of place than income and age show on their own.

The boringness harness

Two ten-by-ten grids of 100 pages: 35 grey dull pages on the first engine run, 7 after eleven days of tuning, with an arrow between them.

A hundred real pages from a fixed seed, each square one block, grey for a dull page. 35 came out dull on the first engine run and 7 after eleven days of tuning, the same test re-run after every change.

Want a full walkthrough?

Let's talk, I would love to show you how it actually works!

Try it with your own address

nate.held@gmail.com

Back to projects