A Christopher Alexander provocation engine for neighborhood imagination. v0.1.
Massing renders regenerated on every deploy, straight from the corrected pattern pipeline —
extruded polygon massing blocks (via cadquery/OpenCascade), still a gut check on scale and
density, not a finished architectural rendering. The 3D model below is live and
interactive — drag to orbit, scroll/pinch to zoom — the same real .glb mesh
available to download further down, not a pre-rendered screenshot. Window and door openings
are real
boolean cuts, placed by a real pattern operator (p221_natural_doors_and_windows —
Alexander's Pattern 221) reading each building's actual wall geometry and floor count, not
decoration. Ground-floor interiors (p127/p129/p130/
p131/p133) are real too — public-to-private depth gradient, common
area, entrance room, room connectivity, stair core — but upper floors still show wall/window
data only, no interior partition (see the largest-building floor plan below, and
tools/vibe-render/render.py in the repo for the full caveats).
The real Military Circle site in Norfolk, VA -- a 97.7-acre assembly of 25 real Norfolk City GIS parcels (MILITARY_CIRCLE_ASSEMBLED, no existing entitlements), run through the full corrected pipeline (P29 → P37 → P52 → P61 → P95 → P21 → P108 → P96 → P107 → P117 → P118 → P124 → P119 → P127 → P197 → P116 → P129 → P130 → P131 → P133 → P221 → P160). This list is generated straight from language_graph::LANGUAGE on every deploy (scripts/vibe-render.sh, examples/dump_pipeline_chain.rs) -- the same real order the pipeline actually executes in, not a hand-typed guess that can drift. Verified against real satellite imagery -- see crates/street-smarts-ledger/examples/dump_lineage_map.rs for the georeferenced overlay this was checked against. Shown in situ, in the interactive model itself (orbit around it to see): the surrounding gray massing is real neighboring building footprints from Overture Maps (OpenStreetMap + Microsoft ML Buildings, ODbL-1.0), not decoration. Only clean_baseline gets this treatment -- it's the one scenario with a real, geolocated site; the others' fixtures aren't real single addresses in the same way, so there's no honest "surrounding context" to show.
The SAME real whole-site geometry above, in a free-fly viewer: WASD + mouse on desktop. Exterior only -- this scenario's windows/doors are flat decals, not real punched voids (see the caption above and tools/vibe-render/render.py's own module doc), so there's nothing behind a wall to fly into; no real per-building tour waypoints either, just the site from any angle at human scale. For a real interior to walk into, see the cluster below.
The same real clean_baseline pipeline output, cropped to ONE real building cluster (tools/vibe-render/extract_cluster.py: the building with the most real neighbors within 60m, plus everything else -- other buildings, open space, streets -- within that same 60m of its centroid; no field in the schema names a "cluster" directly, so this is a real geometric proxy, not a fabricated grouping). At this scale, real per-opening geometry becomes affordable in a way the whole-site model above can't be: every real p221_natural_doors_and_windows window and door is a real OpenCascade boolean cut punched through the actual wall mass (not a flat decal), and the ground floor's real p127_intimacy_gradient InteriorCell layout is repeated at every real floor with a real floor plate between them (the whole-site model's own 7,765 real openings alone would push either past Cloudflare's 25 MiB limit -- see tools/vibe-render/render.py's own module doc for the real measured numbers behind that split). The exterior shell is SOLID, not translucent -- once a real punched opening is the real way to see through a wall, an opaque wall around it is just a real wall, the same way an actual building works; a translucent shell was only ever standing in for that before real punching existed. Interior room layout is ground floor only -- InteriorCell.floor is hard-coded 0 everywhere in this schema, so every floor above repeats that SAME real layout rather than a different one nobody computed; no stairs (P133 only carries a 2D stair-core footprint, no tread/riser geometry exists to render), no furniture, no room labels, no doors cut into the interior partitions themselves -- Alexander's own pattern language describes spatial relationships, not a prescribed use, and this project doesn't invent a program the pipeline has no way to know. Lit by a real early-evening sky HDRI, low golden sun (Poly Haven, CC0 -- see public/env/*.provenance.json) rather than flat ambient light, so real shadows and a real bright-exterior/dim-interior contrast show up as you orbit.
The "Room" buttons above jump the SAME real, live <model-viewer> camera to sit inside one real InteriorCell, aimed back out along whichever real direction has the most open real room depth to sit in (tools/vibe-render/render.py's own interior_camera_views/_best_interior_view_direction) -- a real hardware-accelerated WebGL camera placed in the real model, not a separate pre-rendered image. No furniture or textures yet -- just real structure, real punched openings, and real sky-lit daylight (see the caption above), honestly plain rather than dressed up otherwise.
The SAME real geometry above, in a free-fly viewer: WASD + mouse on desktop, an automated tour of the real interior viewpoints on mobile -- public/walk.html.
Generated by scripts/vibe-render.sh during CI deploy.
Everything above this line is computed: real parcels, real pattern math, real citations, honestly labeled gaps. This section is the opposite, on purpose — a place for imagination to run ahead of what the pipeline has actually verified. A mood board, a hand sketch, an AI-illustrated concept of what this could feel like to stand in — dreaming out loud about a place is real, necessary work, especially for a neighborhood that's been told "no" by real systems for a long time. It isn't a lesser kind of contribution than the geometry above.
It will never be merged into the render above, and the render above will never quietly borrow from it. Nothing here is a proposal, a commitment, or a claim about this site — it's a place to imagine together before anything is decided, kept in view, but never confused with what's actually real.
This tool does not measure your neighborhood. Aliveness is what Alexander called the quality without a name — by definition not fully namable. What you're about to read is a chorus of opinions, each citing its source, encoded in math. The interesting part is where they disagree, or where they tell you what they couldn't see.
The map is one more opinion. Parcels are an administrative cut by Norfolk City GIS — they are not buildings, sidewalks, or the way people walk this place. A neighborhood is more than its polygons. Basemap tiles fetched from openstreetmap.org; if those don't load the parcels still work.
An auto-proposal is one more opinion — the opinion of an algorithm encoding an Alexander pattern. It is NOT a coalition product. The Eastside Commons coalition's proposal is the one labeled "Proposal" above. Generated proposals are signed by the algorithm and the seed, so the coalition can decide for itself whether any variant deserves a conversation.