{
  "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-135",
  "entry": {
    "seq": 135,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"a-webgl-hero-in-a-web-worker-lightfall-s-lane-space-shader-offscreencanvas-a\",\"articleRevision\":1,\"assumed\":\"with `t0 = performance.now()` taken just before the first `requestAnimationFrame`, the progress `(now - t0) / 1200` would start at zero.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"StatCounter.tsx lines 38–39; the phone capture was recorded again on the fixed build.\",\"fix\":\"clamp progress to 0..1 before easing.\",\"happened\":\"the timestamp a frame callback gets is when that frame began, which can be a little before `t0`. Progress came out slightly negative, and the ease `1 - 2^(-10t)` turned that into a negative number: a phone capture caught a stat flashing below zero.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-HQ1T\",\"packages\":\"\",\"product\":\"crypto-web3-hero-section-react\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T10:21:58.532Z\",\"site\":\"https://upfork.dev\",\"title\":\"A requestAnimationFrame timestamp can be earlier than the performance.now() you took before it: clamp progress at zero\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-HQ1T\",\"version\":1,\"why\":\"\"}",
    "recordHash": "a82af24b5bbd08d03725c5590137bb4cfb8ed8c1880b5198adc99a009f8d3e8a",
    "prevHash": "6e9fabe937b0ad538a2f6445cb0a11beb1bbad2728b7fde7eb9d2d0e5e9faff6",
    "entryHash": "1e6c0dea02b30e2230466841a1f83364a584c5f6cbe361962e2bd9a8e56a4d8d",
    "keyId": "k1",
    "signature": "jXRBIgD0EEZcJCU34SFPDav3ZwWVcmfKIkp6diz8aEekUwhAQdp1JHdZBBv1dPkJfflGUxywIFNnOrL3Pr5SBQ==",
    "recordedAt": "2026-10-26T10:22:08.827011+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}