doxa-maps/data/tables/index.json
doxa-maps-88655c70 b05d1f13b4 Pin every people group, and link what exists in their own language
The map shaded COUNTRIES and stopped there, so the one question it could not answer
was the only one that matters in the field: for THIS group, what exists right now?
12,379 people-group pins now sit on it, each one clickable into the resources for
its language.

THE JOIN. people-groups-slim.json carries Lat/Long per people-group-in-country;
people-group-resources.json carries the real scripture_url/film_url per LANGUAGE.
The key is ISO 639-3 (slim.LanguageCode == resources.iso639_3), never the group
name — a group is reached in its language, not its nationality, and names collide
across unrelated languages.

MEASURED at build time: 5,981 of 12,379 pins (48.3%) join a resource record and
5,109 (41.3%) join one carrying a real URL, across 862 language codes. The other
59% is not a gap in the data to be hidden — it IS the subject. A pin with nothing
found sorts ABOVE a covered one, so the gap wins the z-fight at world zoom rather
than disappearing under a green dot.

NO URL IS INVENTED. Every link is copied from the resources table, which records
its own checked_pools/unchecked_pools, and the sheet keeps saying "none found
means absent from the pools checked, never proof that nothing exists". has_audio
keeps its third state: absent means the pool was never queried, not a no.

PIN COLOURS READ OFF BANDS rather than declaring a fourth palette, so a pin and
the country under it can never disagree about what "nothing found" looks like.

The table is generated into data/tables/ — the REPO ROOT copy, which is what
generate-tree publishes. The plugin-local data/tables/ is a stale divergent
duplicate that nothing serves; building into it ships a file no page fetches.

Verified on the served tree at 1280x800: 12,379 pins loaded AND rendered, layer
and source present, and a click on Han Chinese returns ebible.org/cmn2006/ plus
jesusfilm.org languageId=53352, both rendered as real anchors in the sheet and
both answering 200. window.__grState() exposes those counts so the next check does
not have to guess at screen coordinates to hit a 3px dot.
2026-09-24 03:02:06 +00:00

70 lines
No EOL
1 KiB
JSON

{
"generated": "2026-08-01",
"method": "Derived from the source tables in this folder.",
"tables": [
{
"name": "people-group-resources",
"rows": 2106
},
{
"name": "gospel-access-vs-growth",
"rows": 2106
},
{
"name": "key-cities",
"rows": 1646
},
{
"name": "network-operators",
"rows": 6526
},
{
"name": "country-connectivity",
"rows": 175
},
{
"name": "social-platforms",
"rows": 1306
},
{
"name": "messaging-channels",
"rows": 1157
},
{
"name": "languages-by-country",
"rows": 613
},
{
"name": "languages-per-city",
"rows": 1866
},
{
"name": "city-bridge-opportunities",
"rows": 28
},
{
"name": "deaf-gap",
"rows": 120
},
{
"name": "open-doors",
"rows": 2106
},
{
"name": "key-cities-admin-n",
"rows": 277
},
{
"name": "platform-reachability",
"rows": 2625
},
{
"name": "gaps-and-opportunities",
"rows": 2106
},
{
"name": "people-group-pins",
"rows": 12379
}
]
}