Once the tool could read another country, the obvious move was to make it public as one bigger app.

One selector. One broader name. One cleaner story about how the system had grown up.

That would have looked like progress.

It would also have been the wrong move.

Earlier pieces around Danish Politics Data were all about different forms of honesty.

First, the tool had to say the thing election coverage usually forgets: a pattern is not an explanation.

Then the language around the tool had to get stricter. The correlations could be correct while the wording around them still claimed more than the data had earned.

Then the instrument had to learn something harder again: not every year supports the same factors, and a public interface should know when to say not yet.

This next step stayed in that same line, but it forced a different distinction into the open.

The question was no longer just whether the tool could read another dataset.

The question was what the public product should look like once it could.

Sweden was the first real pressure test. Not as a vague “international expansion” story, but as a real second country with its own election years, factor layer, national-history scope, and public semantics.

That was enough to break a quiet illusion.

Denmark had been the first public surface.

It had never been the architecture.

Once Sweden started working, the tempting move was to expose the whole thing as one public multi-country app and let the country selector do the explaining.

That would have made the surface look broader. It also would have blurred distinctions that still matter.

Denmark and Sweden do not expose the same public years. They do not expose the same factor set. They do not expose the same election-history depth. And most importantly, they do not justify a public cross-country reading simply because they now share some internal machinery.

That is what a shared public shell gets wrong too early.

If two countries live behind the same selector, the user starts reading them as members of one already-comparable system. Same layout, same controls, same polished front door. Surface symmetry starts implying methodological symmetry long before the data layer has earned it.

Homepage TID preview showing both Swedish Politics Data and Danish Politics Data as separate public rooms.
The public split is visible at the door: sibling country surfaces, not one fake world app.

So the honest move was not to make the public product broader.

It was to split it.

Internally, the system did become broader.

World-politics-data/ now exists as the engine behind the line. It carries the shared shell, the country registry, the fetch/build flow, the adapter logic, the tests, and the discipline around how a new country gets added without pretending it is already the same as the first one.

But public truth lives at a different layer.

Instead of exposing one large public “world politics” surface, the system now splits into sibling country products.

Swedish Politics Data became its own public repo and its own live app.

Swedish Politics Data showing the Sweden national trends view.
Sweden exists as a real public surface, not as a hidden extra tab inside Denmark.

Danish Politics Data was then migrated onto the same newer shell.

Danish Politics Data showing the Denmark national trends view on the newer shell.
Denmark now reads through the same public family shape without losing its own scope.

Both now live under TID as separate rooms.

That is the important fact.

Not that the engine got wider.

Not that another flag could now be added to a selector.

The important fact is that the public surface stopped pretending one internal system had to appear as one public instrument.

That sounds smaller than launch language usually wants. It sounds less like expansion and more like restraint.

But it is a stronger claim.

The public family can now share shape without claiming more than it knows. The two products can resemble each other without pretending they are already interchangeable. They can share structure, naming rhythm, room placement, and interface discipline while still remaining loyal to their own scope.

That loyalty matters because public products teach the user how to read them.

If the Sweden surface talks only about Swedish elections, Swedish factors, Swedish years, and Swedish sources, then the user enters a Swedish instrument.

If the Denmark surface does the same for Denmark, then the user enters a different instrument with shared family traits.

That is a cleaner promise.

The line now has a family, but the family resemblance is not itself the analysis.

In one sense, the system got broader and narrower at the same time.

Broader underneath.

Narrower in public.

That is not a contradiction. It is what honesty looked like at this stage.

One engine does not require one public product.

One shared shell does not justify one public claim.

And one second country does not mean the framework is suddenly finished.

If anything, Sweden proved the opposite.

It showed that the framework only became real once Denmark stopped being mistaken for it.

Sweden did not prove that the tool had become international.

It proved that one country was never the framework.

Swedish Politics Data — open the public tool

Danish Politics Data — open the public tool

— Dennis Hedegreen