This is what one day looks like in the simulation, in the order it happens. The reference world is a Clothier town with a target population of 500, seeded at 100, growing 10% per week, trading against a single infinite-liquidity port that stands in for the rest of England.
What this town actually does for a living
The town is specialized in cloth. The clothier comes with twenty spinning wheels, four hand looms, a fulling mill, and pays wages for spinning, weaving and fulling. It buys wool and sells cloth.
Cloth is the only thing the town earns money on. The port’s price list makes the arbitrage clear:
| What the town sells | Port pays (pence) | Town market price (pence) |
|---|---|---|
| Cloth | 65 | ~40 |
| Wool | 250 | 250 |
| Wheat | 32 | 30 |
| Cotton | 1000 | 2400 |
The margin on cloth is real and substantial; the others are at parity or actively unprofitable to export, so the only sustainable export business is “buy wool, spin and weave and full it, sell cloth at the port.” Bread, milk and fresh meat sit on the port’s local-only list — there is no out-of-town demand for any of them.
On the import side the town buys raw wool and cotton (the spinning inputs), wheat (the food chain), and crucially oats (fodder — more on that below). It also imports salt, hops, barley, cheese, butter, livestock, and coal. None of these are produced inside the town walls in this scenario.
The local consumption chain is what keeps the workforce alive while they spin and weave:
- The miller takes wheat and turns it into flour and bran.
- The baker takes flour and turns it into bread. Bread is sold at a 30% retail markup, capped at 200 loaves a day.
- The butcher takes cattle, sheep and pigs (and a bit of salt) and turns them into beef, mutton and bacon.
- The alehouse takes barley, hops and yeast — and also buys bread and cheese — and turns them into served beer and served food.
- The clothier turns wool into cloth via the cottage industry of spinners, weavers and fullers.
- The corn dealer is a shopkeeper for oats and bran — fodder retail for the carters and wagoners.
- The dairy merchant and cheese merchant move and sell cheese and butter.
- The cloth retailer keeps a small stock of cloth for local consumption.
What drives local demand
Demand in the town isn’t a flat list of goods. Every family carries a Maslow-style ladder of needs — a tiered priority list — and each tier is a small basket of substitution groups. The family picks the highest tier it can sustain for the next week without dipping below its cash reserve, and then, inside each substitution group at that tier, picks whichever option is cheapest at today’s retail prices.
For an urban working family, the ladder looks like this:
| Tier | Bread / grain | Drink | Meat option | Dairy option | Cloth (yards/day) |
|---|---|---|---|---|---|
| 1 — survival | 0.5 loaves | 1.5 small beer | — | — | 0.008 |
| 2 — comfort | 0.7 loaves or 0.007 flour | 1.5 small beer | 0.5 bacon | or 0.8 cheese | 0.019 |
| 3 — prosperity | 0.7 loaves | 0.3 ale | 0.5 beef or 0.6 mutton | 0.5 bacon or 0.8 cheese | 0.029 |
A business-owning family — a baker’s, a miller’s, a clothier’s — eats more (about two loaves a day instead of half), keeps a 20-pence reserve instead of 10, and tops out at the comfort tier rather than reaching for beef.
Note that bread itself sits in a substitution group at the comfort tier: a family can swap to buying flour directly if bread becomes dear, doing the baking at home. That’s another layer of price-responsive demand. When the baker has a bad week, flour sales at the miller and corn dealer pick up.
Three things matter about this structure for the town’s economy.
The survival tier is universal. Bread, small beer and a sliver of cloth are bought by everyone who can possibly afford them. That’s where the baker’s 200-loaf daily cap, the alehouse’s small-beer brewing, and the cloth retailer’s local stock come from. If the survival tier ever stops being affordable to the median family, the town has a crisis on its hands well before it shows up in the cloth ledger.
The substitution groups are price-responsive in real time. A family that’s reached the comfort tier doesn’t need bacon — it needs either bacon or cheese. Whichever the butcher and the dairy merchant are charging less for today, that’s what shows up on tomorrow’s shopping list. So a glut of cheese pulls demand from the butcher; a livestock shortage pushes families onto the dairy merchant. The chain compensates within each tier.
The tier escalator is what wages buy. A wage that lifts a family from the survival tier to the comfort tier doesn’t just add bacon and an extra third of a loaf — it more than doubles the family’s cloth purchase, from eight thousandths of a yard a day to nineteen thousandths. Lifting that same family to the prosperity tier swaps small beer for ale, adds half a unit of beef or mutton on top of the bacon-or-cheese, and pushes cloth consumption up again. Local demand for the town’s own export good scales with how prosperous the workforce becomes — which is the loop the simulation is built around.
What this means in aggregate is that the town’s total daily demand is the product of three things: population (set by migration), wage distribution (set by employment and production), and retail price competitiveness (set by what the millers, bakers, butchers, alehouses and merchants can deliver at). Move any of those three and the shopping lists tomorrow morning are different.
Midnight: the day starts with the larder
Every household checks its larder at midnight. It picks the highest tier of needs it can sustain — using the rule above — and then looks at whether its stock of anything in that tier has fallen below five days of consumption. If the shelves are still well-stocked the family does nothing today. If a staple is running low it puts together a shopping list to top up to roughly one to two weeks’ worth in a single trip — the exact window varies across the calendar year so that the whole population doesn’t pour into the market on the same morning. Bacon one week, cheese the next, depending on what the butcher and the dairy merchant are charging that day.
Early morning: people eat
Each family then subtracts its daily consumption from its inventory. Staples come off the shelf deterministically; lower-frequency goods get an independent random roll per family per day so consumption doesn’t spike in sync across the population. If the bread isn’t there, the family just doesn’t eat it today — there is no backlog.
Morning: producers plan, prices form
The producers plan their day a few hours after dawn. Each one looks at the recipes its equipment can run, the inventory it already has, and the regional wage and input prices, and writes down two things: how many batches to commit to, and what to charge.
The sell price is cost-plus: cost of inputs at the going market price, plus labor at the regional average wage, plus a 15% margin. The target inventory is two weeks of output. Imported inputs get a 30% discount applied when computing the cost basis, so foreign goods stay attractive to bid for. A producer also drops trading preferences that have been idle for seven days — a clothier that stopped spinning for the winter won’t keep bidding for wool forever.
Morning: the labor market clears
The labor market opens once a day. Employers post wage bids per skill; household members post asks per skill. Matches turn into seven-day contracts. If an employer can’t fill all its posts, the wage goes up the next day; if asks go unanswered, they come down. There is no solvency check — an employer’s cash balance can go negative. The design treats short-term credit as implicit and infinite for now.
Morning: routes are priced
Once a day the inter-region routes get repriced. For every pair of trading regions the simulation looks up the distance, the source-region price of oats, and the source-region wage, and writes down what a trip will cost. This is the data the merchants use to decide whether arbitraging the port is worth the oats and the days on the road.
Market open: orders go on the book
The town market is open every day from 8 in the morning to 5 in the evening. When the doors open, the producers, the shops and the merchants all post their orders for the day. Buyers escrow cash; sellers escrow goods. Partial fills are honest because neither side can double-spend its escrow.
Every hour during market hours: matching and retail
Two things run every hour while the market is open. The wholesale order book matches buys against sells, pays sellers from buyer escrow, queues the cargo for delivery, debits freight up front, and refunds any midpoint-pricing excess to the buyer. In parallel, the retail layer matches each household’s shopping list against the shops’ inventories — proportionally across shops when there are several, and respecting each shop’s daily sale cap.
So the day inside the town is two flows happening on top of each other: producers and merchants filling the warehouses on the wholesale market, retailers feeding the households out of those warehouses at a 30% markup.
Inter-region trade: merchants and their factors
A merchant lives in one town but trades in several. In each foreign town it keeps two accounts — a buy account and a sell account — supervised by a local factor who skims a 3% commission. The factor is the merchant’s eyes and hands abroad; it sees the local order book and the local prices and posts trades on behalf of the merchant.
The flow is: the merchant’s buy and sell planning reads each region’s market snapshot, sizes orders to its factor accounts, and the factor accounts go to the foreign market the same way any local business would. When a trade settles, the merchant absorbs the spend back home; the factor only logs commission. Once a day the merchant’s home inventory is reconciled against the activity in its accounts.
That two-pass split is what makes the merchant’s cost basis consistent across many regions without double-counting. From the local market’s point of view the factor is just another buyer or seller.
All day: transport, fodder, and why the corn dealer matters
The carriers are a state machine. A job starts in committed, checks whether the carrier can afford the fodder for the trip, transitions to consume (the oats come out of the carrier’s inventory), then in transit for the duration of the trip, then arrived — at which point the freight fee is recorded against the trip’s distance.
If the carrier can’t afford the fodder when the job starts, it parks in waiting for fodder and posts a procurement request for oats — and waits. Six failed attempts and the job is cancelled outright, with the freight fee refunded as negative revenue.
This is why the corn dealer exists. Without retail oats in the home region the entire transport network stalls and the cloth doesn’t reach the port. Handcarters are the exception — they only do intra-region jobs and don’t burn fodder — but they’re capped at 200 kg and can’t reach the port at all.
Migration: how new citizens arrive
Once a week the town gets new residents. The number is 10% of the current population, capped at the difference between the current population and the target — so a town of 100 with a 10%/week growth rate gets 10 newcomers in week one, 11 in week two, and so on, asymptotically approaching the cap of 500. Population here means everyone who consumes food in the region: merchants, factors, transporters, urban worker families, all of them.
For each newcomer the simulation looks at the region’s ranked business opportunities — a list computed from retail shortages, wholesale shortages, and unmet transport demand — and picks the most profitable business type that hasn’t already been picked this week. Whichever business has the highest opportunity score becomes the newcomer’s trade. If nothing on the list looks attractive and the town is already at 80% employment (or just too small to measure), the newcomer joins as a plain household instead — labor supply rather than a new business.
Each business type has a standard starter kit. A baker arrives with around 90 pounds of capital, an oven, a shop, default wages, and a family where one parent specializes in baking and the other handles retail. A clothier arrives with around 60 pounds, twenty spinning wheels, four hand looms, a fulling mill, and a few pack horses. Each business spawns the owner’s household automatically; merchants additionally spawn factor families in every region they trade with.
There’s a second arrival path for acute shortages: once a day the same logic processes urgent spawn and retire requests from the accounting layer. A sustained cloth shortage adds clothiers; a sustained flour shortage adds millers. Those urgent spawns share the same population budget as the weekly growth — pressure can pull arrivals forward, but it can’t push the town past its cap.
Buildings and streets grow with the population
When a new business is created, it doesn’t have a place to live yet. A worker building takes a 6×8 metre lot, a merchant building takes 8×10, a gentry building takes 10×12. Every tick the placement logic walks the town’s street graph trying to fit each unplaced building onto a free lot adjacent to a street.
If a lot can’t be found, the request goes into exponential backoff — first retry in an hour, then two, then four, then eight, then sixteen, then daily — up to ten attempts before being silently parked. But while those failed attempts are queued they also do another job: they’re the signal to grow the town.
The street layout responds to that signal. Each tick the street system looks for any pending placement request that has already failed at least once. If it finds one, it extends the town’s streets along the river by the failed building’s width plus a 5-metre buffer, and resets the failed requests so the next placement pass can retry against the freshly extended graph. The street layout has a cap on how many times it can expand, so the town doesn’t grow without bound.
The initial street layout itself is laid down once, when the town is first seeded: three parallel streets along the river — shore street, high street, back street — centered on the village’s heart.
There is also a recycling path. When a business retires its building isn’t demolished — the lot goes onto an “available buildings” list, and the next merchant-type newcomer takes it over, inheriting the existing lot and position. The town doesn’t sprout an orphan lot every time a clothier goes under.
End of day: money settles, books close
A small flurry of bookkeeping closes out the day. Wages move from employers to households for any contracts that ended today. Each business owner’s personal cash gets topped up from the business to the owner’s reserve target — that’s how the cloth that the family eats and the bread that the clothier-owner buys gets paid for. Expired standing orders are flushed from the market. The day’s revenue and cost are rolled into a 30-day profit history, and the regional market snapshot — bid/ask spreads, retail prices, shortage signals — is recomputed for tomorrow. That snapshot is what both the merchants and the next migration tick will read first thing in the morning.
Then the clock advances, and the next day starts at midnight with the shopping lists.
Next steps
Lots of the economic story is missing. The four pieces I expect to land next, roughly in order:
Rent and land. Right now buildings exist on lots but nobody pays for them. The next pass introduces a landlord class — gentry families who own the lots and collect rent from the businesses and the urban households living on them. That ties the town’s prosperity to a fixed-supply asset (street frontage), gives a non-trade-based way for money to move through the economy, and creates the first real conflict over space — does this lot become a clothier’s, a baker’s, or another row of worker cottages?
Taxes. A town this size in 1780s England doesn’t keep all the cloth money it earns. Tithes, excise on beer, salt duty, a poor rate — each of those carves a different slice out of a different part of the flow. The interesting design question isn’t whether to add taxes but where to send the money: a local-government actor that buys cloth uniforms and beer rations, or a flat siphon out of the local circuit entirely. That decision changes the demand picture meaningfully.
Spoilage. Bread that lasts forever is the single most unrealistic thing in the current model. Once perishables actually rot — bread in three days, meat in five, dairy in ten — the retail chain has to run faster than the production chain, which is the whole point of having a daily market. It also caps how far perishables can travel, which makes the local-only-goods list mean something physical instead of being a port-side rule.
Quality tiers. The recipe data already has fine cloth, coarse cloth, printed cloth, bleached cloth — and butter-and-bacon and similar pairs all over the food chain — but the demand model treats every loaf the same. Wiring quality into the Maslow ladder (prosperity tier prefers fine cloth and printed cotton, survival tier eats coarse) would turn the wage ladder into a real consumption ladder and give the clothiers something to specialize within, not just toward.
Beyond those four are the standing gaps: no credit market (pence balances can quietly go negative), no skill development for households, no seasonal demand shift, no weather, no intra-town transport friction. Each is its own post when it lands.
Why the day reads top to bottom
The reason a day in this town can be told as a single straight line — check the larder, eat, plan production, hire, post orders, clear, settle, transport, grow, close the books — is that every phase reads the world as it stood at the start of the phase and only writes back at the end of it. Nothing in between sees the others’ half-finished work. That’s what makes the whole town legible: you can stop the clock at any point and ask what each actor is about to do, because each actor is reading the same shared picture and answering for itself.
Rent, taxes, spoilage, quality — each one will slot into this same shape. A new question to ask the morning snapshot, a new column to write back at tick end. Same shape, more story.