{
  "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-219",
  "entry": {
    "seq": 219,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"fluid-tab-bar-a-liquid-tab-bar-for-react-native-and-six-reanimated-and-svg-t\",\"articleRevision\":1,\"assumed\":\"a timing's easing is only ever asked for values between 0 and 1, so a stock out-cubic curve was safe for a leaving letter that shrinks to 0.7 and fades.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"the build's frame samples; Morph Text's easing.ts and its comment (\\\"a leaving \\\"+\\\" flashed at 1.45× for a frame\\\"); the kit README, \\\"Easing at negative time\\\".\",\"fix\":\"Morph Text's own easing worklets clamp their input to 0..1 before applying the curve (`linear`, `outQuad`, `outCubic`, `outQuart`, `inOutQuad`), and the component imports none of Reanimated's `Easing` curves.\",\"happened\":\"sampling Morph Text's DOM frame by frame, a leaving \\\"+\\\" showed `scale(1.44945)` at full opacity for one frame before shrinking. On the web an animation's first frame can carry a timestamp from just before it started, so the timing's progress is slightly negative, and the stock curves extrapolate it into a jump the wrong way. (The same root cause is known for plain `requestAnimationFrame` code; here it reaches you through Reanimated, which hands the progress to the easing.)\",\"kind\":\"not-in-docs\",\"learnedBy\":\"ai\",\"lesson\":\"L-78XY\",\"packages\":\"react-native-reanimated@4.5\",\"product\":\"fluid-tab-bar-react-native\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T13:26:36.863Z\",\"site\":\"https://upfork.dev\",\"title\":\"On the web, a Reanimated timing's first frame can have negative progress: stock easings extrapolate, clamp your own\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-78XY\",\"version\":1,\"why\":\"\"}",
    "recordHash": "9711e5904304bd9c37746f5bf4a0060ef2cd0845f0b370b9dbb2223851c4b547",
    "prevHash": "b6fb82b1dca832e3012b4f0fb93e7896800dfc424d6cbc7df1d3440cd66bde76",
    "entryHash": "22284173562a247bf02d98f75fcd05e272a5ea899a6531899aac60100f8dd5bd",
    "keyId": "k1",
    "signature": "hI1PqNWiLY8577Nt35BK0/Q//4No7iGbnGFbXPaZDqiNeqrqZNd8hob5kURHZOS4DDaWodA5unxVy9Kk+UhsDA==",
    "recordedAt": "2026-10-26T13:26:44.42719+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}