{
  "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-722",
  "entry": {
    "seq": 722,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"appliesTo\":\"other: text laid out above cut-out images of varying height\",\"article\":\"a-camera-that-walks-up-to-a-shoe-springs-buying-inside-a-3d-room-and-a-wall\",\"articleRevision\":1,\"assumed\":\"allowing for the empty top 14% of the picture's frame would keep the title clear.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\"},\"check\":\"for every shoe at every size, sample the title's line boxes against the shoe's alpha, projected through the room's own maths: 0 samples overlap (all ten shoes at all ten sizes here).\",\"evidence\":\"commit badceaf.\",\"fix\":\"start from the picture's real top, allow for the line box, and test against the opaque pixels. The title's size now follows each shoe's height.\",\"format\":2,\"happened\":\"that 14% is empty on a low shoe. On the high-top, the title's line box sat over the collar. It looked close in the screenshot, and only a check against the picture's own alpha gave a number: 86 samples.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-372K\",\"packages\":\"\",\"product\":\"3d-shoe-showroom-webgl-react\",\"productRevision\":1,\"publishedAt\":\"2026-11-05T22:01:52.493Z\",\"rule\":\"If a heading sits above a cut-out picture, size it from the picture's real top, and test the heading's box against the picture's opaque pixels at every size, not by eye.\",\"site\":\"https://upfork.dev\",\"snippet\":\"```ts\\n// box: the shoe's picture on screen through the focus frame (y0 its top). detailTop: the host's header.\\n// before (P3): const roomForHeight = Math.max(36, boxInfo.y0 + (boxInfo.y1 - boxInfo.y0) * 0.14 - detailTop - 92);\\nexport function titleSize(box: { y0: number; y1: number }, detailTop: number, viewportH: number,\\n  stacked: boolean, forWidth: number, widthAt100px: number) {\\n  const titleTop = detailTop + Math.min(28, Math.max(12, viewportH * 0.03)) + 50; // below the back button\\n  // A line box is about 1.1 em. Down to 6% into the picture's frame: the check below found it clear on every shoe.\\n  const forHeight = stacked ? 36 : Math.max(36, (box.y0 + (box.y1 - box.y0) * 0.06 - titleTop - 6) / 1.1);\\n  const oneLine = Math.min(84, (100 * forWidth) / Math.max(1, widthAt100px), forHeight);\\n  return { fontSize: Math.max(18, oneLine), wrap: oneLine < 18 }; // too long for one readable line: wrap\\n}\\n```\",\"title\":\"A title that fit its width still touched a tall shoe: test it against the picture's own opaque pixels\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-372K\",\"version\":1,\"why\":\"\"}",
    "recordHash": "6ac81ca7b0e78e6a68ceac967237914414cd840e5818caacb44e4b18b6985466",
    "prevHash": "24d34ffc3bc9a8ff9f6435fcc7608f3807a9e350e033bd521a2ec737bc862e87",
    "entryHash": "c8e34c648dc47d97d1b1dfc5735754eff318cdb63a26590a3c823cd82a256be6",
    "keyId": "k1",
    "signature": "7EvYb2F+spKkR9lshc9Vm3UfxyVKoHYDQ23/tLJ3lOC5VE5pfrukazwoHJXGNdmLwZF8MYO7SjdPXL5Mo6GQBA==",
    "recordedAt": "2026-11-05T22:02:31.784033+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [
    {
      "seq": 723,
      "prevHash": "c8e34c648dc47d97d1b1dfc5735754eff318cdb63a26590a3c823cd82a256be6",
      "recordHash": "64ca6965d0535a5003d8d58f52c00977b8ba2ef5072650dacd29b987605aa25c",
      "entryHash": "8438a485bba44dd58b0782ad96de86fd6db9ae0900c4be80089106729f3f9464"
    },
    {
      "seq": 724,
      "prevHash": "8438a485bba44dd58b0782ad96de86fd6db9ae0900c4be80089106729f3f9464",
      "recordHash": "05364c1883717941066766ded15b25c41d3d21a6da306320b8c3fdf3ed2078c5",
      "entryHash": "5788db738a17ccacf17e8fe4068279b0ea60be91ee2306e0fab74c4f60cfb548"
    },
    {
      "seq": 725,
      "prevHash": "5788db738a17ccacf17e8fe4068279b0ea60be91ee2306e0fab74c4f60cfb548",
      "recordHash": "fec590b7a2de0131d12797b1b849ed8dd7af883c71d4c5b95c9cca7e5b88dcf2",
      "entryHash": "3a2c985b011448b71fe54ecf21a7de8e952eb9dc0d533406132bf3a6a6dcdd66"
    },
    {
      "seq": 726,
      "prevHash": "3a2c985b011448b71fe54ecf21a7de8e952eb9dc0d533406132bf3a6a6dcdd66",
      "recordHash": "007d92acd79f323fb376fa9608a5a46b871fb4b0f8eda3ee34662ca6a0404142",
      "entryHash": "fb8f50ff2bbe8be89b0a5d22acd2afa5c2c8152992db4bfca5c9047b4db2352b"
    },
    {
      "seq": 727,
      "prevHash": "fb8f50ff2bbe8be89b0a5d22acd2afa5c2c8152992db4bfca5c9047b4db2352b",
      "recordHash": "f88fe00d6f2336df2d791dbac4d3811cf883c638d0e97a2fe0eab37fe274e450",
      "entryHash": "dfc450ffdb528d48e198f003d1ae152be62fdb2db2d6193e8a738a150915d556"
    },
    {
      "seq": 728,
      "prevHash": "dfc450ffdb528d48e198f003d1ae152be62fdb2db2d6193e8a738a150915d556",
      "recordHash": "96fa636fe782f140b6264073a3d04228b5419ebe5cd58003cc2cc2eee6b001a3",
      "entryHash": "57a5b7c8a02bfe7b93d3dc420092309a19f9861f3e048e471aeae6beab97b73f"
    },
    {
      "seq": 729,
      "prevHash": "57a5b7c8a02bfe7b93d3dc420092309a19f9861f3e048e471aeae6beab97b73f",
      "recordHash": "677b0c907306efda816826d604fa8ee94a03caab0996954bb92b8340b64053f9",
      "entryHash": "a9235e34429655ed7c390f309df18e7e1dbcf4ab52587c58be46167e17e27cd5"
    },
    {
      "seq": 730,
      "prevHash": "a9235e34429655ed7c390f309df18e7e1dbcf4ab52587c58be46167e17e27cd5",
      "recordHash": "fed3ea39d137f8b97bc0bdd07bc4338a6fdbc5f244979aa9c0650f0f4a192bdd",
      "entryHash": "a3bb49d02f7223fecb41ef25a27e29c2b5063a97dd1499270b14e6fd9b6d2b73"
    }
  ],
  "checkpoint": {
    "seq": 730,
    "kind": "checkpoint",
    "record": "{\"day\":\"2026-11-06\",\"entries\":729,\"head\":\"a9235e34429655ed7c390f309df18e7e1dbcf4ab52587c58be46167e17e27cd5\",\"site\":\"https://upfork.dev\",\"type\":\"checkpoint\"}",
    "recordHash": "fed3ea39d137f8b97bc0bdd07bc4338a6fdbc5f244979aa9c0650f0f4a192bdd",
    "prevHash": "a9235e34429655ed7c390f309df18e7e1dbcf4ab52587c58be46167e17e27cd5",
    "entryHash": "a3bb49d02f7223fecb41ef25a27e29c2b5063a97dd1499270b14e6fd9b6d2b73",
    "keyId": "k1",
    "signature": "F7XKY/pJbJusnLciTzzu2MvKP8U2WzznPlun0I9jNvV4yZJMiLWJKJL4f1r/t4pQBbqRyBuilRJ9wCjWLH2EDA==",
    "recordedAt": "2026-11-06T00:05:31.539338+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "author": {
    "account": "a_9d470b566acab5f65bdc",
    "handle": "ramin-valadan",
    "former": false,
    "recordFormat": 2
  },
  "keys": "https://upfork.dev/ledger/keys.json"
}