diff --git a/maps/css/map.css b/css/map.css similarity index 100% rename from maps/css/map.css rename to css/map.css diff --git a/maps/css/shared.css b/css/shared.css similarity index 100% rename from maps/css/shared.css rename to css/shared.css diff --git a/favicon/android-chrome-192x192.png b/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..dd0c5ed Binary files /dev/null and b/favicon/android-chrome-192x192.png differ diff --git a/favicon/android-chrome-512x512.png b/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..0215c71 Binary files /dev/null and b/favicon/android-chrome-512x512.png differ diff --git a/favicon/apple-touch-icon.png b/favicon/apple-touch-icon.png new file mode 100644 index 0000000..3f939bc Binary files /dev/null and b/favicon/apple-touch-icon.png differ diff --git a/favicon/favicon-16x16.png b/favicon/favicon-16x16.png new file mode 100644 index 0000000..98a2188 Binary files /dev/null and b/favicon/favicon-16x16.png differ diff --git a/favicon/favicon-32x32.png b/favicon/favicon-32x32.png new file mode 100644 index 0000000..40a1ce1 Binary files /dev/null and b/favicon/favicon-32x32.png differ diff --git a/favicon/favicon.ico b/favicon/favicon.ico new file mode 100644 index 0000000..71319ac Binary files /dev/null and b/favicon/favicon.ico differ diff --git a/favicon/site.webmanifest b/favicon/site.webmanifest new file mode 100644 index 0000000..630fcab --- /dev/null +++ b/favicon/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/index.html b/index.html index 0ad17a4..71cdfb5 100644 --- a/index.html +++ b/index.html @@ -1,2 +1,55 @@ - + + + + +Municipality Email Maps + + + + + + + + + +
+

Municipality Email Maps

+

Interactive maps showing email infrastructure of ~15,300 municipalities in Germany, Austria, and Switzerland, based on public DNS records and network signals.

+
+ +

Email Providers

+

Which provider handles each municipality's official email? Classified by jurisdiction: US cloud (Microsoft, Google, AWS), domestic, or foreign.

+
+ +

Email Security

+

How well are municipality email domains protected against spoofing? Based on SPF and DMARC configuration.

+
+
+ +
+ + diff --git a/maps/js/map-providers.js b/js/map-providers.js similarity index 100% rename from maps/js/map-providers.js rename to js/map-providers.js diff --git a/maps/js/map-security.js b/js/map-security.js similarity index 100% rename from maps/js/map-security.js rename to js/map-security.js diff --git a/maps/js/map-shared.js b/js/map-shared.js similarity index 100% rename from maps/js/map-shared.js rename to js/map-shared.js diff --git a/maps/js/nav.js b/js/nav.js similarity index 100% rename from maps/js/nav.js rename to js/nav.js diff --git a/maps/index.html b/maps/index.html deleted file mode 100644 index 8850422..0000000 --- a/maps/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - -Municipality Email Maps - - - - - - -
-

Municipality Email Maps

-

Interactive maps showing email infrastructure of ~15,300 municipalities in Germany, Austria, and Switzerland, based on public DNS records and network signals.

-
- -

Email Providers

-

Which provider handles each municipality's official email? Classified by jurisdiction: US cloud (Microsoft, Google, AWS), domestic, or foreign.

-
- -

Email Security

-

How well are municipality email domains protected against spoofing? Based on SPF and DMARC configuration.

-
-
- -
- - diff --git a/maps/providers.html b/providers.html similarity index 93% rename from maps/providers.html rename to providers.html index 9dd15ca..d49913c 100644 --- a/maps/providers.html +++ b/providers.html @@ -16,7 +16,10 @@ Email Providers of DACH Municipalities - + + + + @@ -71,7 +74,7 @@

Open source & open data

{ label: 'Germany', topoUrl: 'topo/de-gemeinden.json', - dataUrl: '../output/providers/providers_de.min.json', + dataUrl: 'output/providers/providers_de.min.json', topoObject: 'VG250_GEM', featureCodeFn: function(f) { return String(f.id); }, domesticCategory: 'de-based', @@ -89,7 +92,7 @@

Open source & open data

{ label: 'Austria', topoUrl: 'topo/at-gemeinden.json', - dataUrl: '../output/providers/providers_at.min.json', + dataUrl: 'output/providers/providers_at.min.json', topoObject: 'gemeinden', featureCodeFn: function(f) { var iso = String(f.id || (f.properties && f.properties.iso) || ''); @@ -108,7 +111,7 @@

Open source & open data

{ label: 'Switzerland', topoUrl: 'https://unpkg.com/swiss-maps@4.7.0/2026/ch-combined.json', - dataUrl: '../output/providers/providers_ch.min.json', + dataUrl: 'output/providers/providers_ch.min.json', topoObject: 'municipalities', featureCodeFn: function(f) { return String(f.id); }, domesticCategory: 'ch-based', diff --git a/maps/security.html b/security.html similarity index 92% rename from maps/security.html rename to security.html index a97da0b..f0dcb77 100644 --- a/maps/security.html +++ b/security.html @@ -16,7 +16,10 @@ Email Security of DACH Municipalities - + + + + @@ -71,7 +74,7 @@

Open source & open data

{ label: 'Germany', topoUrl: 'topo/de-gemeinden.json', - dataUrl: '../output/security/security_de.json', + dataUrl: 'output/security/security_de.json', topoObject: 'VG250_GEM', featureCodeFn: function(f) { return String(f.id); }, REGION_CODES: { @@ -86,7 +89,7 @@

Open source & open data

{ label: 'Austria', topoUrl: 'topo/at-gemeinden.json', - dataUrl: '../output/security/security_at.json', + dataUrl: 'output/security/security_at.json', topoObject: 'gemeinden', featureCodeFn: function(f) { var iso = String(f.id || (f.properties && f.properties.iso) || ''); @@ -102,7 +105,7 @@

Open source & open data

{ label: 'Switzerland', topoUrl: 'https://unpkg.com/swiss-maps@4.7.0/2026/ch-combined.json', - dataUrl: '../output/security/security_ch.json', + dataUrl: 'output/security/security_ch.json', topoObject: 'municipalities', featureCodeFn: function(f) { return String(f.id); }, REGION_CODES: { diff --git a/maps/topo/at-gemeinden.json b/topo/at-gemeinden.json similarity index 100% rename from maps/topo/at-gemeinden.json rename to topo/at-gemeinden.json diff --git a/maps/topo/de-gemeinden.json b/topo/de-gemeinden.json similarity index 100% rename from maps/topo/de-gemeinden.json rename to topo/de-gemeinden.json