How this deployment grew
districtry Michigan answers for all 83 counties: the county commissioner districts Michigan's own Bureau of Elections compiles from every county's apportionment filing, plus the national tier every U.S. state can serve from national publishers. It was built dark across three changes in one day — the national tier, the commissioner flagship, then publication — rather than going live on arrival.
The numbers below are measured from the app's own shipped data files every time anything changes — they cannot drift from what the map actually serves. The changelog entries are dated snapshots: each was true on its own date, and none is edited after the fact.
The changelog
- 16 October 2026
Walker's wards
The city ward toggle now answers in Walker, which makes twelve Michigan cities. Walker publishes its wards only as a printed precinct map, a PDF that keeps real map coordinates inside it, so the wards come out of that file exactly rather than being traced by eye. The map carries a notice that says copying it is restricted. That notice was weighed before anything was drawn, and the decision was to draw the wards and quote the notice in full on the card, so a reader sees what the city says about its own map. The wards match the state's 2026 precinct map and hold every person the 2020 Census counted in the city. The card names your two ward commissioners from the city's own page. Ann Arbor was checked again under the newer rule for city edges and is still held back: its map counts about 900 people in township neighbourhoods as living in a city ward, which is more than the rule allows, so it still waits on the city's answer.
- 15 October 2026
Four more cities, and one held back at its edge
The city ward toggle now answers in Holland, Midland, Muskegon and Pontiac, which makes eleven Michigan cities. Each card names your council member from the city's own council page. The four came from four different places, because none of these cities publishes its wards the same way. Holland's came out of the city's own ward map, a PDF that turned out to keep real map coordinates inside it. Midland's came from the city's own map server, which also lists each councilman's home address; only the ward number is read. Muskegon's and Pontiac's came from their counties, because neither city publishes a current map of its own, and Pontiac's card quotes the county's note that the city has the final word on its districts. Every one was checked against the state's 2026 precinct map and against the Census count of people living in the city. Ann Arbor was drawn too and is held back. Its ward lines match the state's, but its map also covers some township neighbourhoods that are not part of the city, so it would tell people there that they live in a city ward. That needs the city's answer first, and so do Kentwood, where the city and the state put one neighbourhood north of 52nd Street in different wards, and Bay City, whose ward map no longer matches the state's precincts.
- 15 September 2026
Past half the state, and a seat this app will not fill in
Five more Michigan counties now name your commissioner: Eaton, Grand Traverse, Lapeer, Lenawee and Midland. That is sixteen of the state's eighty-three, 165 of its 619 districts, and for the first time more than half of everyone who lives here. Eaton is the largest board the app has reached outside Detroit and Grand Rapids: fifteen commissioners for a county of 109,000, and all fifteen are named. One seat is deliberately left blank, and it is worth explaining why. Lenawee County's own website carries a notice, posted on 10 September, announcing the death of Commissioner James Daly and saying that he represented District 5. The county's list of commissioners, five days later, still shows him in that seat with his telephone number and e-mail address. Two pages of the same county disagree. This app could have shown you the name, which would mean telling you to ring a man who has died. It could have called the seat vacant, which would be a claim the county has not made — a vacancy on a Michigan county board is filled by appointment, and nothing published says whether that has happened. So the card for District 5 names nobody and tells you exactly this: what the notice says, what the directory still says, and that the two do not agree. If the county updates its page, the new name appears by itself on the next weekly run and the note goes away. That is the same standard this app holds the state to. Michigan publishes one statewide list of commissioners, attached to the district boundaries themselves, and it still names the Wayne County commissioner who died in June 2025. Refusing to repeat that error and then making it ourselves, five days after a county said so on its own front page, would have been worse than not trying. One more county was looked at and is not here. Bay County's board page names its three officers — the chairman, the vice chair and the sergeant at arms — and gives no district for any of them, on a board of seven. Three names without the districts they represent cannot go on a map of districts, so Bay is written down with what was measured and left for another day.
- 15 September 2026
Five more counties, and one district nobody is named for
Five more Michigan counties now name your commissioner on the card: St. Clair, Monroe, Berrien, Jackson and Calhoun. That makes eleven of the state's eighty-three, 119 of its 619 districts, and just under half of everyone who lives here. The rest still say plainly that this app does not know yet, county by county, until they are done. One of the five is short by a seat, and how it is short is worth telling. Monroe's board has nine members. Its own directory lists eleven rows, and one of them is malformed: the row is labelled District 2 and the only name on it belongs to District 6's chairman. So there is no District 2 commissioner to be read from the page the county maintains for the purpose. The app could have dropped the district, which would tell you Monroe has eight seats when it has nine, or taken the name off the malformed row, which would hand you the wrong person. It does neither. Monroe's card and its page both list all nine districts and say of District 2 that the county's own row carries no name. Eight names ship and the ninth seat is stated as unknown rather than hidden. The counties keep disagreeing with the state's copy, and the disagreements keep being worth printing. Across all 119 seats the state's list — which records the winners of the November 2024 election and has not moved since — names a different person in eleven of them, and writes thirty-one more the same person a different way. St. Clair's District 5 is the newest: the county names Paul Zeller, the state layer still names Robert Fielitz. Every one of those is printed each time the roster rebuilds. One more county was tried and is not here. Allegan refuses this app at the front door, to every kind of visitor tried, on both of its addresses. That is a refusal by the site rather than a rule its owner wrote down, and it is recorded with what was measured so the next attempt starts where this one stopped.
- 13 September 2026
Six counties now name your commissioner
When Michigan's county commissioner districts arrived, the card named your district and nobody in it. The reason was that the only statewide list of commissioners is the one attached to the boundaries themselves, and that list records who won the November 2024 election rather than who holds the seat today. It has not been updated since, and one district still names a commissioner who died in June 2025. This week the app started naming commissioners the way it does everywhere else: county by county, from each county's own board page, refreshed every week. Six counties are done — Kalamazoo, Kent, Macomb, Muskegon, Saginaw and Wayne — which is 76 of the state's 619 districts and about a third of everyone who lives here. The rest still say plainly that this app does not know yet. Doing it this way was worth the trouble. Across those 76 seats the state's list names a different person in seven of them, including both of the Wayne County seats that changed hands and four of Muskegon's seven. Sixteen more are the same person written differently, and one is simply misspelled in the state's copy. Every disagreement is printed each time the roster is rebuilt, so the drift stays visible rather than being quietly resolved in the app's favour. Six more counties were tried and are not here, and each says why rather than going unmentioned. Two ask automated visitors not to read them at all, and this app does not. Two sit behind a challenge page, which is a lock and not a request. Oakland's is refused at the front door to every kind of visitor tried. And Washtenaw publishes its commissioners only inside biographies written in prose, where picking out the name would be guesswork — one of them does not even begin with the name. Those measurements are written down so the next attempt starts where this one stopped.
- 6 September 2026
Rochester Hills, and a sign that said keep out
Rochester Hills is the sixth Michigan city this app can place you in, and its arrival is the first where the city's map and the city's website had to be treated as two different things. The map came easily enough: the city runs its own mapping service and publishes its four council districts there, drawn for 2021 to 2031, and they agree almost exactly with the State of Michigan's own record of which precinct votes in which district — two organisations, working separately, drawing the same four lines. What the app will not tell you is who your council member is. The city publishes that, clearly and currently, on its own website, and that website carries a note asking automated visitors to stay out. A handful of large search engines are named as welcome; everything else is asked not to read the site. This app is everything else, so it does not read it. Your card names your district and sends you to the city for the person. Nothing about that was technically difficult, which is rather the point: the file that asks is a request, not a lock, and the only reason to respect it is that it was asked. The mapping service is a separate address and carries no such request, which is why the boundaries are here at all. Two other cities were looked at and are not here. Muskegon has no map of its own, and the one its county publishes leaves small parts of the city belonging to no ward at all — about one address in eighty would be told nothing, which is worse than being told the city is not covered yet. Midland has no ward map anywhere; the only thing resembling one turns out to be the county's own board districts wearing a city's clothes. Both are written down, with what was measured, so the next person to look starts where this one stopped.
- 6 September 2026
Three more cities, and a page nobody had actually looked at
Warren, Flint and Battle Creek joined the city ward toggle this week, which now answers for five Michigan cities. Battle Creek's arrival is worth telling properly, because it very nearly shipped less than it could have. When its ward map went in, this app recorded that the city's own commission page refused to answer — and wrote that down in five places, so the map named your ward and nobody in it. The page had never actually been asked for. A web address for it had been guessed, the guess did not exist, and the refusal that came back was mistaken for the city turning us away. The real page answers perfectly well, and it names all nine of the city's commissioners. So the wards now come with the people in them: the commissioner elected by your ward, and the four elected by the whole city — three at large and the Mayor — because those four represent you too, and a card naming one of nine would tell you less than the truth. Battle Creek's own page lists its commissioners out of order, wards five, two, one, three, four, mixed in with the at-large seats. Read carelessly, that hands you the wrong person's phone number with complete confidence, so the app reads each commissioner from their own entry rather than from where they happen to sit on the page — and a test now checks two different wards and insists neither shows the other's commissioner. One thing the city does not publish is an e-mail address for any individual commissioner; every one of them routes through a single shared contact form. The card says that outright instead of leaving a blank where an address ought to be. The city's ward map does carry a name for each ward, and those names are not what you are shown. Four of the five were last touched in March 2023, and Michigan cities hold elections in odd-numbered Novembers, so a name that old may already have been overtaken by an election — and nothing in that map would change if it had been. The names on the card come from the page the city actually maintains for the purpose. As it happens the two agree today, which is reassuring about the page and changes nothing about the map.
- 5 September 2026
Grand Rapids, and what a 2018 file had to prove
Grand Rapids became the second Michigan city this app answers for, and its arrival changed how Detroit is served too: one toggle now covers both cities rather than each getting its own, which is how this project adds places without adding clutter. Links people already shared for Detroit keep working. The city divides itself into three wards and elects two commissioners from each, plus a mayor chosen by the whole city — seven people, and the city says so in its own words on its own page. Six of those seven are published. One ward lists a single commissioner where the others list two, and the city does not say why, so the card tells you a seat is unlisted rather than quietly showing you one name where there should be two. The map behind it needed proving. The city's ward boundaries were last edited in 2018, and a file that old could easily be a map of somewhere that has since been redrawn — the page describing it says it is current, but a description is not evidence. The state of Michigan publishes its own list of voting precincts for the 2026 election, and it records which ward each of Grand Rapids's fifty-nine precincts belongs to. Drawn from that instead, the wards come out in the same three shapes, agreeing almost everywhere: two organisations, working seven years apart, drawing the same lines. So the 2018 date means nothing has changed, and the map is current. That check now runs every time the boundaries are rebuilt, and refuses if the two ever stop agreeing. One thing is stated rather than smoothed over: the wards and the Census Bureau's outline of the city disagree very slightly about where the city edge runs — about twenty blocks and sixty-six people out of nearly two hundred thousand. That is two careful organisations tracing one line, not an error in either, and it is recorded rather than rounded away.
- 5 September 2026
Detroit's council districts, and the route that was never walked
Detroit became the first city this app answers for in Michigan: seven City Council districts, drawn from the city's own published boundaries. Which boundaries took some deciding — the city publishes four competing versions and their names do not settle which is in force, so the choice was made by arithmetic instead. The plan that ships divides Detroit's people almost evenly on the 2020 census; the one it replaced is out by three times as much, which is what a map drawn on the 2010 census looks like ten years later. A fourth version, whose name reads like a rejected draft, turned out to be the very same lines drawn at a coarser resolution, and it is the one that names the dates: the Council adopted this plan on 6 February 2024 and it took effect on 1 January 2026. The card first shipped naming your district and nobody in it, on the finding that every route to the council's membership was closed. Two of those five findings were wrong. The city's open-data portal was called blocked when it answers perfectly well — a conclusion drawn from searching a page for the word "challenge" while the server was plainly saying yes. And the route this project already uses every week for two Illinois counties, reading a public archive of a page whose live version refuses us, was never tried at all. It answers with all nine members. So the card now names your council member, and the two members every Detroiter elects citywide, and tells you which day's archived copy it read. A copy older than 45 days is refused rather than shown to you. No phone number or e-mail appears, and that is the city's doing rather than ours: it publishes none, on the council listing or on any member's own page. That absence is recorded as a gap, in the same place as every other thing this app cannot yet tell you.
- 3 September 2026
Published
Michigan went live at districtry.com/mi/, the fleet's sixth instance. Publishing an instance that had been built in the dark turned up four defects the whole test battery had been green on, and three were the same shape — a claim nothing compared against the thing it claimed. This app's font files had never been copied into its own folder, so all eighteen of them would have 404'd and the page would have quietly rendered in whatever typeface your device chose; its preview image, named in three places, did not exist either. Its sources page still carried Iowa's identity in every tag a search engine reads, because it was cloned from Iowa and only the generated parts were ever regenerated. An unused helper left over from that clone made the fleet's privacy page state that one Michigan layer sends your exact selected point to a government server, which no Michigan layer does. And Michigan's own map bounds, which run out into Lake Michigan because the state's counties do, reached far enough west to claim Chicago. All four are fixed, and two new checks now watch for their kind: every file a page asks for must exist, and every page must say which page it is.
- 3 September 2026
County commissioner districts
The layer Michigan was chosen for: all 619 county commissioner districts across all 83 counties, from the Bureau of Elections' own statewide compilation of the plans counties file under MCL 46.401-46.405. Every Michigan county elects its commissioners by single-member district, so every reader in the state gets a district. The card names the district, its county and the population it was apportioned on — and not the commissioner. The state's layer does carry a name per district, but it lists the winners of the November 2024 election rather than whoever holds the seat now: checked against the counties' own board pages it is 93.5% right, every error runs the same direction, and one district still names a commissioner who died in June 2025. Naming people from it would have been easy and wrong, so this app says what it knows and records the rest as a gap.
- 3 September 2026
Arrived
Four layers, statewide, each with a sourced boundary: county (83), U.S. House (13), Michigan Senate (38) and Michigan House (110). Both chambers and the U.S. House delegation carry a weekly-refreshed roster; the county card names the county and claims nothing about who runs it, because Michigan's commissioner districts ship as their own change rather than half-joined here. The congressional boundary is the first in the fleet built against TIGERweb's 120th-Congress layer — the retired CD119 field now 400s outright.
Checked on a schedule
Every scheduled job lands its changes as a reviewed pull request — data about real officeholders never ships without a person looking at the diff.
| What it refreshes | Job | When |
|---|---|---|
| U.S. House (MI) roster (unitedstates/congress-legislators) | update-mi-congress-roster.yml | Mon 15:30 UTC |
| Michigan Senate + House rosters (Open States mi.csv, senate.michigan.gov enrichment) | update-mi-legislature-roster.yml | Tue 15:30 UTC |
| source freshness (MI manifest: TIGERweb, congress-legislators, Open States, senate.michigan.gov) | mi-validate-sources.yml | 1st of month 16:00 UTC |
| Detroit City Council roster (the city's own page, via the Internet Archive) | update-mi-detroit-council-roster.yml | Wed 18:30 UTC |
| Grand Rapids City Commission roster (the city's own pages) | update-mi-grand-rapids-council-roster.yml | Thu 20:30 UTC |
| Battle Creek City Commission roster (the city's own commission page) | update-mi-battle-creek-commission-roster.yml | Fri 20:30 UTC |
| Jackson City Council roster (the city's council page and six ward pages) | update-mi-jackson-council-roster.yml | Fri 21:30 UTC |
| County commissioner roster (each county's own board page, in tranches) | update-mi-commissioner-roster.yml | Sat 20:30 UTC |
| Michigan city council and township board rosters (each unit's own page) | update-mi-municipal-officials.yml | Sun 20:30 UTC |
Back to the map Sources & data layers Common questions Privacy Why this exists