At our wedding every table was named for a lake or river that matters to us. Each card shows the real shoreline on the front and a few facts on the back, all drawn from public map data and records, each one cited below.
Every card is generated by code from public map data and public records. No image generator drew a shoreline and no model wrote a number. Run the same inputs again and you get the same cards, line for line, and any change (a colour, a size, a different fact) is an edit to a file followed by a rebuild.
The waters live in one plain list. Each is matched once to a permanent ID: a USGS National Hydrography Dataset feature, a Minnesota DNR lake number, or an OpenStreetMap ID outside the US. From then on nothing is looked up by name, so a second "Cedar Lake" can never sneak in.
Lakes are the surveyed polygons from the USGS National Hydrography Dataset. Rivers are the dataset's flowlines, merged and framed to a stretch worth drawing: a city reach clipped to its municipal boundary, or a confluence. Every response is cached, so rebuilding is offline and identical.
Each shape is projected onto an equal-area map centred on that water, so it keeps its true proportions. Stray parts that share the name but sit miles away are dropped. The outline is then simplified with a tolerance tied to how much ground one printed point covers, keeping the islands that are still visible at that scale. Two passes of corner-cutting smoothing turn the leftover facets into a shoreline, and the result is fitted to the card as a vector path.
Lakes in a chain, like the Minneapolis lakes, are drawn with their neighbours in a pale tint at one shared scale, so the set reads as a single map spread across the room. Rivers are drawn as a line, with tributaries thinner, the way a printed map thins streams by size.
The back of each card is filled from source data: depth, clarity and fish surveys from the Minnesota DNR, the watershed and where its water ends up from the USGS Watershed Boundary Dataset, river flow from USGS stream gages, and shoreline length and island counts measured from the shape itself. Every value is stored with its unit, source, link and retrieval date. A few facts, like name origins and drinking water, were looked up by hand and are cited the same way. A missing value stops the build; nothing is filled in with a guess.
The palette was sampled from our printed invitation, and the typeface, letterspacing and layout are written as ratios of the card size in one theme file. Long names step down in size to fit. Changing a colour there changes every card, and the other wedding paper follows.
Cards are drawn as SVG and turned into a 5 × 7 inch duplex PDF, front and back, with margins that allow for printer drift. This page uses the same renderer, so what you see here is what printed.
Claude (an AI model) helped write and run the code, but it doesn't draw the cards or supply their facts: the map data and the public records do.
| Fact | Value | Source |
|---|---|---|
| Area dnr | 163.79 acres | Minnesota DNR LakeFinder |
| Coordinates | 44°58′N 93°19′W | USGS NHD |
| County | Hennepin | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Fish recorded | black bullhead, black crappie, bluegill, bowfin (dogfish), brown bullhead, common carp, green sunfish, hybrid sunfish, largemouth bass, northern pike, pumpkinseed, walleye, white sucker, yellow bullhead, yellow perch | Minnesota DNR LakeFinder |
| Fish species recorded | 15 count | Minnesota DNR LakeFinder |
| HUC8 code | 07010206 | USGS WBD |
| Islands | 0 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 51 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 63 acres | Minnesota DNR LakeFinder |
| Shoreline | 2.9 miles | USGS NHD |
| Shoreline dnr | 3.02 miles | Minnesota DNR LakeFinder |
| Surface area | 169.6 acres | USGS NHD |
| Watershed | Twin Cities | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 114.2 acres | Minnesota DNR LakeFinder |
| Coordinates | 44°57′N 93°18′W | USGS NHD |
| County | Hennepin | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Fish recorded | black bullhead, black crappie, bluegill, bowfin (dogfish), brown bullhead, common carp, green sunfish, hybrid sunfish, largemouth bass, northern pike, pumpkinseed, walleye, yellow bullhead, yellow perch | Minnesota DNR LakeFinder |
| Fish species recorded | 14 count | Minnesota DNR LakeFinder |
| HUC8 code | 07010206 | USGS WBD |
| Islands | 2 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 31 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 89 acres | Minnesota DNR LakeFinder |
| Shoreline | 3.5 miles | USGS NHD |
| Shoreline dnr | 3.37 miles | Minnesota DNR LakeFinder |
| Surface area | 119.8 acres | USGS NHD |
| Watershed | Twin Cities | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 423.86 acres | Minnesota DNR LakeFinder |
| Coordinates | 44°57′N 93°19′W | USGS NHD |
| County | Hennepin | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Fish recorded | black crappie, bluegill, bowfin (dogfish), brown bullhead, common carp, green sunfish, hybrid sunfish, largemouth bass, muskellunge, northern pike, pumpkinseed, walleye, yellow bullhead, yellow perch | Minnesota DNR LakeFinder |
| Fish species recorded | 14 count | Minnesota DNR LakeFinder |
| HUC8 code | 07010206 | USGS WBD |
| Islands | 0 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 82 feet | Minnesota DNR LakeFinder |
| Mean depth | 30 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 123 acres | Minnesota DNR LakeFinder |
| Shoreline | 3.1 miles | USGS NHD |
| Shoreline dnr | 3.09 miles | Minnesota DNR LakeFinder |
| Surface area | 419.9 acres | USGS NHD |
| Watershed | Twin Cities | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 341.22 acres | Minnesota DNR LakeFinder |
| Coordinates | 44°55′N 93°18′W | USGS NHD |
| County | Hennepin | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Fish recorded | black bullhead, black crappie, bluegill, brown bullhead, common carp, green sunfish, hybrid sunfish, largemouth bass, muskellunge, northern pike, pumpkinseed, walleye, white sucker, yellow bullhead, yellow perch | Minnesota DNR LakeFinder |
| Fish species recorded | 15 count | Minnesota DNR LakeFinder |
| HUC8 code | 07010206 | USGS WBD |
| Islands | 0 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 87 feet | Minnesota DNR LakeFinder |
| Mean depth | 29 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 85 acres | Minnesota DNR LakeFinder |
| Shoreline | 2.7 miles | USGS NHD |
| Shoreline dnr | 2.7 miles | Minnesota DNR LakeFinder |
| Surface area | 340.3 acres | USGS NHD |
| Watershed | Twin Cities | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 39.97 acres | Minnesota DNR LakeFinder |
| Coordinates | 44°59′N 93°19′W | USGS NHD |
| County | Hennepin | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Fish recorded | black bullhead, black crappie, bluegill, hybrid sunfish, largemouth bass, northern pike, pumpkinseed, white sucker, yellow bullhead | Minnesota DNR LakeFinder |
| Fish species recorded | 9 count | Minnesota DNR LakeFinder |
| HUC8 code | 07010206 | USGS WBD |
| Islands | 0 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 25 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 23 acres | Minnesota DNR LakeFinder |
| Shoreline | 1.1 miles | USGS NHD |
| Shoreline dnr | 1.17 miles | Minnesota DNR LakeFinder |
| Surface area | 36.7 acres | USGS NHD |
| Watershed | Twin Cities | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Coordinates | 44°02′N 92°27′W | USGS NHD |
| Drainage area | 303.0 square miles | USGS NWIS gage 05372995 (SOUTH FORK ZUMBRO RIVER AT ROCHESTER, MN) |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Gage site | 05372995 | USGS NWIS gage 05372995 (SOUTH FORK ZUMBRO RIVER AT ROCHESTER, MN) |
| HUC8 code | 07040004 | USGS WBD |
| Length | 13.7 miles | USGS NHD |
| Mean flow | 239 cubic feet per second | USGS NWIS gage 05372995 (SOUTH FORK ZUMBRO RIVER AT ROCHESTER, MN), 43 years of record |
| Watershed | Zumbro | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Coordinates | 39°00′N 90°41′W | USGS NHD |
| Drainage area | 1125810.0 square miles | USGS NWIS gage 07374000 (Mississippi River at Baton Rouge, LA) |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Gage site | 07374000 | USGS NWIS gage 07374000 (Mississippi River at Baton Rouge, LA) |
| HUC8 code | 07110004 | USGS WBD |
| Length | 2294.6 miles | USGS NHD |
| Mean flow | 568722 cubic feet per second | USGS NWIS gage 07374000 (Mississippi River at Baton Rouge, LA), 18 years of record |
| Watershed | Upper Mississippi Region | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Coordinates | 43°03′N 87°55′W | USGS NHD |
| Drainage area | 872.0 square miles | USGS NWIS gage 04087170 (MILWAUKEE RIVER AT MOUTH AT MILWAUKEE, WI) |
| Drains to | Water leaving here reaches the Atlantic Ocean, by way of the Great Lakes | USGS WBD hydrologic unit definitions |
| Gage site | 04087170 | USGS NWIS gage 04087170 (MILWAUKEE RIVER AT MOUTH AT MILWAUKEE, WI) |
| HUC8 code | 04040003 | USGS WBD |
| Length | 3.5 miles | USGS NHD |
| Mean flow | 885 cubic feet per second | USGS NWIS gage 04087170 (MILWAUKEE RIVER AT MOUTH AT MILWAUKEE, WI), 18 years of record |
| Watershed | Milwaukee | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Coordinates | 47°32′N 87°46′W | USGS NHD |
| Drains to | Water leaving here reaches the Atlantic Ocean, by way of the Great Lakes | USGS WBD hydrologic unit definitions |
| HUC8 code | 04180000 | USGS WBD |
| Islands | About 400 | manualhand-sourced |
| Maximum depth | 1332 feet | manualhand-sourced |
| Shoreline | 2106.9 miles | USGS NHD |
| Surface area | 20263231.7 acres | USGS NHD |
| Watershed | Lake Superior | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Coordinates | 44°00′N 86°45′W | USGS NHD |
| Drains to | Water leaving here reaches the Atlantic Ocean, by way of the Great Lakes | USGS WBD hydrologic unit definitions |
| HUC8 code | 04190000 | USGS WBD |
| Islands | About 100 | manualhand-sourced |
| Maximum depth | 925 feet | manualhand-sourced |
| Shoreline | 1566.9 miles | USGS NHD |
| Surface area | 14296863.2 acres | USGS NHD |
| Watershed | Lake Michigan | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Coordinates | 45°00′N 93°21′W | USGS NHD |
| Drainage area | 31.7 square miles | USGS NWIS gage 05288840 (BASSETT CK. AT GOLDEN VALLEY RD. IN GOLDEN VLLY,MN) |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Gage site | 05288840 | USGS NWIS gage 05288840 (BASSETT CK. AT GOLDEN VALLEY RD. IN GOLDEN VLLY,MN) |
| HUC8 code | 07010206 | USGS WBD |
| Length | 14.5 miles | USGS NHD |
| Mean flow | 25 cubic feet per second | manualhand-sourced |
| Watershed | Twin Cities | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 4654.83 acres | Minnesota DNR LakeFinder |
| Coordinates | 47°59′N 91°25′W | USGS NHD |
| County | Lake | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches Hudson Bay | USGS WBD hydrologic unit definitions |
| Fish recorded | burbot, cisco species, lake trout, northern pike, northern pike (silver phase), rock bass, smallmouth bass, tullibee (cisco), walleye, white sucker, yellow perch | Minnesota DNR LakeFinder |
| Fish species recorded | 11 count | Minnesota DNR LakeFinder |
| HUC8 code | 09030001 | USGS WBD |
| Islands | 7 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 150 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 879 acres | Minnesota DNR LakeFinder |
| Shoreline | 27.2 miles | USGS NHD |
| Shoreline dnr | 43.09 miles | Minnesota DNR LakeFinder |
| Surface area | 4605.5 acres | USGS NHD |
| Watershed | Rainy Headwaters | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 741.91 acres | Minnesota DNR LakeFinder |
| Coordinates | 48°01′N 91°16′W | USGS NHD |
| County | Lake | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches Hudson Bay | USGS WBD hydrologic unit definitions |
| Fish recorded | walleye, northern pike, largemouth bass, smallmouth bass, black crappie, bluegill, yellow perch, pumpkinseed, rock bass, common carp | manualhand-sourced |
| Fish species recorded | 10 count | manualhand-sourced |
| HUC8 code | 09030001 | USGS WBD |
| Islands | 2 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 116 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 210 acres | Minnesota DNR LakeFinder |
| Shoreline | 12.1 miles | USGS NHD |
| Shoreline dnr | 14.91 miles | Minnesota DNR LakeFinder |
| Surface area | 748.4 acres | USGS NHD |
| Watershed | Rainy Headwaters | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 239.59 acres | Minnesota DNR LakeFinder |
| Coordinates | 47°57′N 90°35′W | USGS NHD |
| County | Cook | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches the Atlantic Ocean, by way of the Great Lakes | USGS WBD hydrologic unit definitions |
| Fish recorded | lake whitefish, northern pike, tullibee (cisco), walleye, white sucker | Minnesota DNR LakeFinder |
| Fish species recorded | 5 count | Minnesota DNR LakeFinder |
| HUC8 code | 04010101 | USGS WBD |
| Islands | 1 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 101 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 70 acres | Minnesota DNR LakeFinder |
| Shoreline | 5.5 miles | USGS NHD |
| Shoreline dnr | 6.89 miles | Minnesota DNR LakeFinder |
| Surface area | 241.3 acres | USGS NHD |
| Watershed | Baptism-Brule | USGS WBD |
| Fact | Value | Source |
|---|---|---|
| Area dnr | 71.3 acres | Minnesota DNR LakeFinder |
| Coordinates | 44°59′N 93°08′W | USGS NHD |
| County | Ramsey | Minnesota DNR LakeFinder |
| Drains to | Water leaving here reaches the Gulf of Mexico | USGS WBD hydrologic unit definitions |
| Fish recorded | black bullhead, black crappie, bluegill, channel catfish, green sunfish, hybrid sunfish, largemouth bass, northern pike, pumpkinseed, walleye, yellow perch | Minnesota DNR LakeFinder |
| Fish species recorded | 11 count | Minnesota DNR LakeFinder |
| HUC8 code | 07010206 | USGS WBD |
| Islands | 0 count | USGS NHD, islands of at least 1 ha |
| Maximum depth | 15.5 feet | Minnesota DNR LakeFinder |
| Shallow (littoral) area | 68.45 acres | Minnesota DNR LakeFinder |
| Shoreline | 1.7 miles | USGS NHD |
| Shoreline dnr | 1.73 miles | Minnesota DNR LakeFinder |
| Surface area | 67.6 acres | USGS NHD |
| Watershed | Twin Cities | USGS WBD |