The Doozer Brainlive from the knowledge bundle · v2.2.618 · 2026-09-13 17:16 ETall pages · one page

Doozer Town and the Board Game view

systems/doozer-town.md · System · doozer-town, clouds, growth, board, groups, geo, self-building

status: stable · written by claude-fable-5-1 on 2026-09-11 · verified by jon-berry on 2026-09-11 · stale after 2027-03-01

doozer.town builds a page for every town in America the first time somebody asks for it, sorts its businesses onto ten colour groups, and can show any Doozer Cloud as a property board. Cost model, grouping rules, the edge blocker, and what to watch.

Doozer Town and the Board Game view

The operator's two ideas (Sept 2026), which turned out to be one: a Cloud view that turns any cloud into a Monopoly-style board with businesses as property cards grouped into colour-coded categories; and doozer.town, dynamic self-building town clouds for every town in every state. The grouping the board needed is the structure the town page needed. Built in one pass as v2.2.615.

The address is the instruction

west-milford-nj.doozer.town = West Milford, NJ. The slug parser accepts <city-words>-<st> only; the state must be real. Anything else is a 404, not a town.

A visit resolves the slug in cost order (townEnsure() in includes/town-engine.php):

step source cost
existing town cloud clouds row by host $0
businesses we hold in that city/state centroid of our own geo-verified rows, 6 mi radius $0 (1,955 city/state pairs qualify today)
unknown town one Google geocode $0.005, bot-gated (_nbmnRequestIsBot), town_create_max_per_hour (30), and only when the result names the same place in the same state

asdfgh-nj returns not_a_place; a crawler on an unknown town gets a 404 "not on the board yet" and spends nothing. A town is a normal clouds row (cloud_type=geo, visibility=unlisted so Discover Clouds stays curated) with a town block in criteria (city, state, county, slug, source, last count). It rides the cloud engine unchanged, so saves, counts and the card renderer all work. A radius, not a city-name match, is what makes "serves West Milford" true: Hewitt, Newfoundland, Oak Ridge, Ringwood and Greenwood Lake sit inside it.

The ten groups

townGroups() / townGroupKeyFor(): Eat & Drink, Shops, Home & Trades, Health, Self-care, Auto & Around, Civic & Community, Money & Pros, Stay & Visit, Utilities & Essentials, plus Everything Else. Resolution order: explicit slug/type rules (because businesses.primary_niche mixes catalogue slugs and Google types, and a business's types JSON is consulted too), then the catalogue category, then keywords in the name. An empty group is an open lot on the page and on the board and links straight to Find, because the brand's mark is a grid with one cell still open. West Milford after the first pass: 355 businesses, 10 of 10 groups, 34 in Everything Else.

Money moves only on a tap

Rendering a town costs nothing. Find calls the existing ?e=nbmn_populate (cache-first, bot gate, per-IP and global paid caps, the $10/day Places cap) around the town centroid; Build posts to the existing ?e=nbmn_build_place (hourly cap) and lands the site on doozer.site, where the town's radius picks it up on the next render. The county eyebrow is one Magellan geocode per town, once, and only for a human.

The Board Game view

renderCloudBoardView() in includes/cloud-board-view.php, ?view=board on any cloud and on every town. Forty spaces: corners Start / Saved / Free parking / Build, nine per side. boardDealSpaces() deals a balanced hand: every non-empty group gets a space, empties get an open lot, the rest is largest-remainder proportional, capped by supply. More than 36 members lists the whole deck underneath (CSS columns, not a grid; a grid left three empty columns beside one 66-item group). ?deal=n reshuffles within groups with the top third kept as anchors. Tapping a space opens a <dialog> deed with photo, rating, address, call and visit. Pure renderer, spends nothing.

The edge (Plesk)

Every wildcard root is a ServerAlias .<root> line in the subscription's additional Apache directives (HTTP and HTTPS both). On the day it shipped .doozer.town briefly answered from another vhost until that line was in; curl --resolve against the origin IP is the only way to see past Cloudflare when that happens. With the alias live, town_wildcard_live=1 makes the apex path form doozer.town/<slug>/ a 301 to the real address; the path form stays as a permanent link shape.

Operate it

The contract: a person arrives, the site builds

Every skeleton exists for free until a person opens it; that visit fetches the details (photos, website, phone, hours), writes the page, and the site is built by the time they look around. The operator's rule (10 Sep 2026): if a person is standing on a site that has not built itself, that is a bug, never a budget decision. Two consequences. Paid backfills are not the way to fill boards; the visit is. And the crawler checks that protect the budget must never catch a person: no bare IP-range guesses (a /16 for Cloudflare's renderer also matched iCloud Private Relay), only named agents, datacenter first octets, cached reverse DNS, and our own capture marker.

Pre-filling a town (the par-create method)

dz town prefill=1 slug=<slug> is a dry run: for each group's niches it says whether the nearby-discover bucket is warm (somebody already paid for it: $0 skeletons) or cold (one Nearby Search, $0.035). live=1 creates skeletons from warm buckets; budget_usd=2 lets it spend on cold ones, thin groups first. A full town is ~58 niches, about $2. Skeletons land on doozer.site (noindex), are enriched by their first human visitor (~$0.06 to $0.12), and appear on the board immediately through the radius. Pace it inside the Places hourly ceiling (one town an hour) and the daily cap.

What the first day cost, and why it will not again

$10 in a day: $8.85 was an image crawler fetching uncached gallery photos on 284 business sites in four minutes, not the towns ($0.63). The photo proxy now refuses paid fetches for crawlers, the ledger has an hourly ceiling, and card photo sizes snap to the cached ladder. The town page itself renders for $0.

Where it sits in the ecosystem (Sept 2026)

Four surfaces, one loop. NearByMeNow is search: what are you looking for. Doozer Town is place: everything that serves one town, ranked. Business sites are the entity: one page per place, the thing the other two point at. Clouds are curation: a Keeper's chosen set. The loop is wired both ways: every business site's "Around the neighborhood" links to its town board, every board links to every site, the network footer carries Doozer Town everywhere, and the apex sitemap (221 indexable towns) goes to Bing by IndexNow. Bing is the channel; towns are the pages Bing can rank for "<town> businesses" that a single business site never could.

Growth runs through the town: the pre-fill trickle feeds par-create from the biggest boards, skeletons appear on the board at $0, a person's first visit enriches one, the ranking decides who leads a group, and sponsorship (a labelled slot above the ranked list, never inside the score) is where the revenue lives when it comes. Honorary Doozers are the people who press Find and Build on a board they care about.

Every part of that spends only on a person, and every guard has a ledger line.

What is deliberately not done yet

No Atlas or llms.txt entry for towns yet (sitemap, robots, footer link and the site-to-town link shipped 10 Sep); no town list beyond what our inventory implies (a Census gazetteer would let the apex list every place in a state). The group rules will keep needing words added as Everything Else shows what the rules miss.

Related: [[clouds]](clouds.md) · [[the /now surface]](the-now-surface.md) · [[growth engine]](growth-engine.md) · [[brand system]](brand-system.md) · [[Magellan and the feed pond]](magellan-and-feeds.md)

Doozer Digest (AI daily newsletter)Email Open Tracking