{
  "about": "An entry of UpFork's ledger. Check it by hand as https://upfork.dev/docs/ledger says, or at https://upfork.dev/verify/E-28",
  "entry": {
    "seq": 28,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"how-to-build-a-live-logistics-dashboard-a-simulated-fleet-maplibre-and-one-s\",\"articleRevision\":1,\"assumed\":\"after loading my own data, `if (map.isStyleLoaded()) start(); else map.once(\\\"style.load\\\", start)` covers both cases.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"Wayline commit 4a8798c (components/map/fleet-map.tsx).\",\"fix\":\"subscribe when the map is created — `const styleLoaded = new Promise((r) => map.once(\\\"style.load\\\", () => r()))` — and start on `Promise.all([loadGeometry(), styleLoaded])`. Show the failure message only if the style itself never loads.\",\"happened\":\"on a slow connection the live map stayed on \\\"Loading map\\\", then showed its own \\\"couldn't load\\\" message after 20 seconds, although the style had loaded.\",\"kind\":\"not-in-docs\",\"learnedBy\":\"ai\",\"lesson\":\"L-0PWP\",\"packages\":\"maplibre-gl@6.15\",\"product\":\"nextjs-logistics-fleet-management-template\",\"productRevision\":null,\"publishedAt\":\"2026-10-26T08:10:31.656Z\",\"site\":\"https://upfork.dev\",\"title\":\"map.isStyleLoaded() stays false until tiles arrive, so checking it after another async step can wait forever\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-0PWP\",\"version\":1,\"why\":\"`isStyleLoaded()` also waits for every source's tiles. `style.load` had already fired while the road data was loading, so the listener waited for an event that never came again.\"}",
    "recordHash": "89e180a539d12f663d8fe9981e539e3fe9b601eb129480204cb0310b915b24aa",
    "prevHash": "67a6edfd3df053ac393563569abf6d3cd40afb6b8cc9c37ac0203644e6343a55",
    "entryHash": "fd54f0b10949122ad5fb0c1db27bd83dc556c7d3feef0dbe529a148a8330c387",
    "keyId": "k1",
    "signature": "xV+7hF9sPdnHzcJa/hLPkDAc9J4E+f9uGbsrbXjoy2jmqOMA54KKeZ/dQPK8r53113siD7js8VnwPt6POvWkAw==",
    "recordedAt": "2026-10-26T08:11:08.874874+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}