PärPod Temp
PärPod Temp
PärPod Temp
Gruvkartor Field Notes: Everything Found, Including What Probably Does Not Fit
14m · Jul 26, 2026
When a journalist couldn't answer "where is this uranium permit, actually," they discovered the real problem: Sweden has all the data scattered across five government databases, but nobody assembles it—so they built Gruvkartor to do it themselves.

Gruvkartor Field Notes: Everything Found, Including What Probably Does Not Fit

What This Is

This is not an episode. This is a briefing, made for a car. You asked for everything found in the repositories, including the parts that might not belong in the article, so you can react out loud and catch the reactions as voice notes. So the shape here is deliberate. Each item gets stated plainly, then left alone. If something makes you talk back at the stereo, that reaction is the actual product of this recording, not the recording itself.

The article being drafted is the first of ten. Working title, Så byggdes Gruvkartor punkt se. The arc agreed for build stories is the itch, the naive first version, the wall, what was learned, where it landed. There is already a draft on disk with about 1800 words in it. Everything in this briefing is either already in that draft, or was deliberately held back, or is a loose thread nobody has decided about yet. Those three categories get called out as we go.

The Origin, Which Is Already In The Draft

It did not begin with wanting to make maps. It began with sitting inside an investigation into Energy X92, the Swedish subsidiary of the Australian company Neu Horizon Uranium, and being unable to answer a simple question. Where are these permits, actually.

The data existed. Every piece of it. Bergsstaten has the permits. SGU has the geology. Bolagsverket has the ownership. Lantmäteriet has the municipal boundaries. Sametinget has the reindeer grazing land. Naturvårdsverket has the protected areas.

Nobody assembles them.

That is the real discovery, and it is the sentence the whole product rests on. The pitch was never that there is data nobody else has. The pitch is that there is a combination nobody bothers to render. A journalist with a tip about a new permit has no route from the permit existing to knowing where it sits, what else that company holds, and what it overlaps. The mining company's own application map shows exactly what the applicant wants shown.

The timeline is tight and worth saying out loud. First commit, 17 May 2026. The Årebladet investigation published 11 days later, on 28 May. So the map machinery and the journalism ran in parallel, and the published article links out to municipality pages on a site that barely existed when the reporting started.

The First Real Idea, Also In The Draft

The naive version was to make maps. That is the wrong unit of work.

The right unit is the template. A template is a styled layout with fixed layer configuration and rules for choosing the extent. You design one, then apply it to every entity that matches. One template times 800 permits equals 800 maps, all consistent, all automatically updated.

That is the entire reason the work scales. Designing one genuinely good template is real labour. Label placement, legend layout, extent rules, and it has to survive both a postage stamp sized permit in Sundbyberg and a municipality the size of Belgium. Generating any number of maps from it afterwards is close to free.

That Sundbyberg and Belgium line is yours, from the concept document. It is good. It survived into the draft nearly untouched.

Wall Number One. Finland Is A Blank Slab

The basemap was Sweden. Only Sweden. Which is completely fine until you render a permit that sits on the border.

Kenttä. Tapuli. Kaunisvaara. Permits up near the Torne river where half the frame is Finland. And Finland rendered as a bare tan surface. No terrain, no water, no roads, no place names. An empty plate where a country should be.

Here is the part worth talking into the microphone about. Nobody noticed until a border permit was actually rendered. The pipeline was working perfectly. It did exactly what it was built to do, on data it was never told it was missing. That is a different species of bug from something crashing.

The fix landed on 1 June. Finnish national land survey data for water and roads, their place name register for the names, a Natural Earth land base underneath, and a Copernicus relief layer masked to Finland. Plus a bold national border between Sweden and Finland, styled to match the one already drawn against Norway.

And the detail that matters more than the fix. All of it is conditional on Finland actually appearing in the frame. Every map without Finnish land in it came out byte for byte identical to before. A fix that can be proven not to have touched anything else.

Now, the uncertain part. You said white Finland. The handoff document written at the time says bare tan. Both are memorable, only one is true, and you were there. That is voice note number one.

Second uncertain thing. You said the failed renders were probably not saved, and nothing in the repositories contradicts that. But the Finland bug is reproducible. Render the Kenttä permit without the Finland block and the blank slab comes back. A before and after pair would be the single strongest image in the article. Worth deciding whether that is worth one render.

Wall Number Two. Bergs Kommun

This is the best one, and you did not mention it.

The maps print municipality names. Trivial. Take the name, add the word kommun. Berg becomes Berg kommun.

Wrong. It is Bergs kommun. And Östersunds kommun. And Härjedalens kommun. But Ragunda kommun. And Åre kommun. No s.

Swedish genitive on municipality names is irregular. There is no rule a machine can follow. And here is the uncomfortable half. There is no rule you can state either, despite having heard these names your entire life. You know it is Bergs kommun. You cannot derive why.

An AI asked to construct the string name plus kommun does it with total confidence and is wrong roughly half the time. That does not make the model bad. It did exactly what it was asked.

The fix was to stop generating and start looking up. Lantmäteriet publishes the authoritative field, called beslutatnamn, the decided name. And the rule now sits in the codebase in capital letters. Never construct name plus kommun yourself.

That single line might be the thesis of the whole article. Every time an authoritative field exists, use it. Every time you let a model, or yourself, generate something somebody else already decided, you are building in an error that looks correct.

Wall Number Three. The Requirement That Never Existed

For weeks the entire print specification was built around A3. Maps would be A3. Resolution was dimensioned for A3. The website made A3 claims out loud.

A3 was never a requirement. It came from misreading something about the Årebladet centre spread, early, in passing, and then it propagated through the design as though it were a fact. The actual renders were roughly A4 landscape.

There was no bug. The code did precisely the right thing against a requirement nobody ever made. It took two commits to unwind, one pulling the claims off the site, one recording in the documentation that the requirement had never existed.

The thing to say into the recorder is how cheap one question in week one would have been.

Wall Number Four. The One Codex Found

This is the scope leak you mentioned, and it turns out to be more specific than expected.

A publishing routine filtered on directory identifiers, while the list it was reading from contained names. Different things. Which meant a typo in a municipality name could have quietly written an empty manifest. In plain terms, silently severing the connection between permits and their maps. No error message. Nothing on fire. The maps would simply stop being there.

It was found by a second model, running as a reviewer in a cowork round, and logged as two priority two findings. The fix makes a zero match abort with a failure code and touch no manifest at all.

That is your verification agents catching drift, and it is concrete enough to name in the article. The interesting angle is that neither you nor the model writing the code found it. A third party whose only job was to look for problems found it.

The One Being Held Back On Purpose

There is a commit that closes a fail open state in the personal number redaction firewall. Redaction of natural persons as owners was in the system from very early. This closed a condition where the guard failed open rather than closed.

Given that you said we can be very open, this is the most honest item available anywhere in the repository. It is also the easiest thing on the list for a reader to misread as personal data having leaked, which is not what the commit says.

It is in the draft as a bracketed question, not as prose. This is entirely your call and it is voice note number two.

Three Things That Actually Helped

First, a second model reviewing. Several of the nastiest problems were found by neither you nor the model writing the code.

Second, writing rules down where the code lives. Never construct name plus kommun sits in the same file that describes how municipality maps are rendered. The next session, yours or a model's, reads it before repeating the mistake. Not in your head. Not in a note somewhere.

Third, choosing empty over bad. There was an early decision that sections without real content should be blank rather than filled with placeholder. It reads like a design detail. It is really a way of not lying to yourself about how finished something is.

The Numbers

221 commits, from 17 May to 26 July. Just under 10 weeks.

Roughly 1067 permits in the render batch. Be careful here, because there is also a page count of 1059 floating around in a different commit. Two different numbers measuring two different things. Do not let them merge.

And the number that says the most. Over one 90 day window, gruvkartor took 246 page views from 81 unique visitors. Parception punkt se, over the same window, took 2.

That is not flattering. It is also the most honest fact in the article, and it points at something worth saying out loud. It is not hard to build things anymore. It is exactly as hard as it always was to get anyone to look at them.

Now The Loose Threads. Things Found That May Not Belong

These are unsorted. Some are probably better as separate articles. Some are probably nothing. React to whichever ones make you talk.

There is a commit that sweeps em dashes out of the entire site and replaces them with contextual punctuation. That is the AI tell being scrubbed. For an article about building with AI, that is almost too on the nose, and it might be great.

The licensing moved from Creative Commons non commercial to full copyright at one point. There was a reason. It is not in the article.

The renderer originally lived in a different repository called parmaps and was moved in tree partway through. There is a whole migration runbook about it. Probably its own story about when to merge two projects.

The maps are served through a content delivery network in Stockholm. Choosing that, and why, is a small honest infrastructure story.

The business model is an honour system. No logins, no approvals. Anyone can download any map and test whether it fits their layout. Commercial users fill in a form and get an invoice. Some leakage from corporate users who skip the form is accepted as a tolerable cost, on the grounds that it is cheaper than building authentication and incompatible with staying low friction. That is a genuinely unusual decision and nobody has written about it.

Nonprofits, researchers, students, sameby groups and citizen groups get the maps free. Media gets a discount. Consultancies and mining companies pay full price. Same product, different terms.

The site runs under Årebladet's publishing licence with you as responsible publisher, which gives the database constitutional press protection. A separate application went in to register this specific database. That is a strange and interesting thing to have done and it is invisible on the site.

Every download ships a sources file listing every layer, its URL, its snapshot date and its licence. Radical transparency as a product feature rather than a slogan.

There is an editorial rule that says no opinions on the map side. Facts only. The editorial layer is which facts to combine on which template, never which facts to leave out. That distinction is sharper than most newsrooms manage.

Municipality maps carry two counts. Permits in the municipality, and permits in the picture. Those are different numbers and the map says both. Exclaves get drawn but excluded from centring, so a stray fragment of a municipality does not drag the whole frame off target.

The price lives in exactly one place in the code. One constant. Change it there, rebuild, done. Small thing, but it is the kind of small thing that is invisible until it is missing.

A licensed map covers that map and any regenerated version of it for about six months. Long enough that nobody feels punished when the underlying data shifts the day after they buy.

And there is an unsolved problem parked in the concept document. Naive file hash change detection will trigger regeneration every time the agency touches a file, even when nothing meaningful changed, which makes the date stamps meaningless. A semantic diff is the better answer. It was deliberately parked until there is real evidence the noise matters. Knowing when not to solve something is its own story.

The Questions To Answer Into The Recorder

One. White Finland or tan Finland.

Two. Does the fail open firewall go in the article, yes or no.

Three. Did the scope start at three municipalities before the eight in Jämtland. The map type documentation only evidences eight, then nationwide. Your notes say three.

Four. How much of the uranium investigation gets summarised inside this article. Right now it is kept short with a link out. Australian bitcoin company becomes uranium prospector is a strong hook if you want more of it.

Five. Is it worth one render to reproduce the Finland bug for a before and after image.

Six. Which of the loose threads is actually article number 11.

That is everything found. Talk back at whichever parts deserve it, and the draft gets rewritten around what comes out.