koala73 / koala73/worldmonitor

docs(layers): blog copy still advertises all 56 layers as free, and the published 56 total counts unreachable layers

Open
#6,040 1 comment 0 reactions 0 assignees View on GitHub
bug P2
Dominant language
TypeScript
Stars
86.6k
Forks
13.1k
Avg merge
8h 4m
Merged PRs (30d)
825

Description

## Summary

Two residuals found while resolving PR #5488 for #5387 (free tier wrongly advertised as including the Pro-locked Resilience layer). Both are out of that PR's scope but are the same class of claim.

## 1. Blog copy still advertises all 56 layers as free (P2)

The plan/docs surfaces now say "56 map layers (all free except Resilience, which is Pro)". Four blog locations still make the unqualified free claim:

- `blog-site/src/content/blog/free-vs-paid-real-time-intelligence-dashboards.md:20` — "**56 map layer types** across conflicts, military activity, ..." sits inside the list introduced at `:18` by "Using World Monitor's free tier ... a $0 dashboard today includes:".
- `…free-vs-paid-real-time-intelligence-dashboards.md:95` — table row `| Free | $0, no signup | Public situational awareness: 56 map layers, ... |`
- `…free-vs-paid-real-time-intelligence-dashboards.md:111` — "World Monitor's free tier ships 56 map layers and 500+ feeds with no signup"
- `blog-site/src/content/blog/prediction-markets-ai-forecasting-geopolitics.md:171` — "Prediction markets, AI forecasting, and 56 map layers, all free."

Not covered by the new `validatePlanLayerEntitlementCopy` gate, which deliberately scopes to plan/pricing surfaces. Either reword these or extend `PLAN_LAYER_COPY_SURFACES` in `scripts/docs-stats.mjs` to include them.

## 2. The published "56 map layers" total counts layers nobody can reach (P2)

`layerDefinitions` (56) is a raw count of `def(...)` entries in `LAYER_REGISTRY`, and it is what ~20 surfaces publish as the product's headline layer count (README ×3, `docs/architecture.mdx`, `docs/features.mdx`, `docs/map-engine.mdx`, `public/llms.txt`, PRESS_KIT, blog, …). At least one of those 56 is reachable by no one:

- **`iranAttacks` is feature-sunset.** `src/config/map-layer-definitions.ts:345-349` — `IRAN_ATTACKS_ENABLED` requires `VITE_ENABLE_IRAN_ATTACKS === 'true'`, and `isSunsetLayer` removes the layer from `getLayersForVariant` (`:354`), `getAllowedLayerKeys` (`:360`) and `isLayerExecutable` (`:389`). `scripts/check-desktop-build-env.mjs:45` records it as "feature sunset, default-off everywhere (#4982)", and `tests/iran-events-sunset.test.mts` pins that it must not appear in the picker.
- **`cyberThreats` is env-gated.** `src/App.ts:184` `CYBER_LAYER_ENABLED`, hidden at `:1922`, forced off at `:325`; `.env.example:1022` documents it default-OFF. Whether production sets it is not visible from the repo — worth confirming against the Vercel env.

So the honest reachable total is 55 or 54, not 56. This is why the #5387 fix quotes the registry total and names the Pro-only layer instead of publishing a free-layer count — `layerDefinitions - lockedLayerDefinitions` is not a truthful free count. See the comment above `lockedLayerKeys` in `scripts/docs-stats.mjs`.

Deciding what the published total should mean (registry size vs. reachable-on-web size) is a product call, and it moves a number on ~20 surfaces, so it wants its own change rather than riding along with the entitlement fix.

### Also worth noting

`VARIANT_LAYER_ORDER` means no single deployment renders the whole registry — `worldmonitor.app` (full variant, flat renderer) shows 37 of them; the rest live on the tech/finance/happy/commodity/energy subdomains. Any single published layer count is a union across six sites.

Contributor guide

Open the contributing guide

Research direction

Start with the comment above lockedLayerKeys in scripts/docs-stats.mjs, then inspect src/config/map-layer-definitions.ts, scripts/check-desktop-build-env.mjs, tests/iran-events-sunset.test.mts, and the four named blog locations. Confirm the intended meaning of the published total, including deployment variants and cyberThreats availability, before tracing the affected documentation surfaces. Done means the product decision is recorded and all impacted claims and validation coverage consistently reflect it.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
content, documentation
Issue type
Documentation
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.