{"workflow":null,"planning":null,"id":"dafe19ad-6058-4437-b7e8-1e53ca1b20ab","state":"completed","template":"skill:build-website","objective":"Make the existing Swarm map work well on mobile (phones 360–430px wide, portrait and landscape) without changing the desktop layout, the visual style, or any data logic. Keep it plain HTML/JS (index.html + swarm.js), read-only, no framework, no wallet, no analytics.\nMobile fixes (apply below ~768px width):\n- Canvas fills the screen using the visual viewport (100dvh), sized with devicePixelRatio capped at 2 so it stays sharp but fast; handle resize and orientation change.\n- Collapse the left stats panel, the top-holders leaderboard and the live events ticker into a compact bottom sheet with three tabs (Stats / Holders / Events), collapsed by default to a slim bar showing active Pepes, total weight and total backing; tap to expand.\n- Top bar: shrink to one row (title, LIVE dot, a Replay button and a menu); move the replay speed selector, highlight-wallet input and Fit button into the menu.\n- Touch controls: one-finger drag to pan, pinch to zoom, double-tap to fit; prevent page scroll/zoom on the canvas (touch-action: none); add <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\">.\n- Tooltips: on tap, show the node info as a small card anchored at the bottom (above the sheet) instead of the hover tooltip; tap empty space to close.\n- Performance on phones: cap particles and trail length, lower the glow/blur cost, and render Pepe images only when zoomed in enough to see them; target smooth 60fps on a mid-range phone.\n- Respect safe areas (notch) with env(safe-area-inset-*); minimum 44px tap targets; text at least 12px.\nTest at 375x812 and 412x915 in portrait and landscape: no horizontal scroll, nothing overlapping, all panels reachable, and node count still matches the contract. Keep desktop (≥1024px) looking exactly as it does now.","blockedReason":null,"createdAt":"2026-10-08T15:10:04.308Z","updatedAt":"2026-10-08T15:39:48.221Z","paidBy":"0x5b95a971b4583a5f011e9da082acdd679b870d06","parentJobId":"6ef64375-62db-40dc-b421-635ee146330b","project":{"id":"6ef64375-62db-40dc-b421-635ee146330b","head":"97da9659-fc24-40b9-8a4a-e78473df23e4","running":null,"versions":[{"jobId":"6ef64375-62db-40dc-b421-635ee146330b","workflowId":null,"objective":"Host this existing static site from Lavel0rz/og-swarm-pepes (commit 2e62d34) on IPFS at an eth.limo address.\nBuild: run `npm run build` (node build.mjs, no dependencies). It copies index.html, swarm.js, ethers.umd.min.js, favicon.svg and screenshot.png unchanged into dist/. Publish dist/ as the static export.\nIt is a plain HTML/JS read-only visualizer for OG launch #1040 Swarm Pepes on Ethereum mainnet, not React. Do not rewrite, restyle, convert to a framework, or add wallet connect, transactions, analytics or trackers. Keep all paths relative.\nReturn the eth.limo URL and IPFS CID.","baseCommit":"2e62d34c60c03b456d67afb6fa8abddf777e8339","state":"completed","createdAt":"2026-10-08T14:53:55.172Z"},{"jobId":"dafe19ad-6058-4437-b7e8-1e53ca1b20ab","workflowId":null,"objective":"Make the existing Swarm map work well on mobile (phones 360–430px wide, portrait and landscape) without changing the desktop layout, the visual style, or any data logic. Keep it plain HTML/JS (index.html + swarm.js), read-only, no framework, no wallet, no analytics.\nMobile fixes (apply below ~768px width):\n- Canvas fills the screen using the visual viewport (100dvh), sized with devicePixelRatio capped at 2 so it stays sharp but fast; handle resize and orientation change.\n- Collapse the left stats panel, the top-holders leaderboard and the live events ticker into a compact bottom sheet with three tabs (Stats / Holders / Events), collapsed by default to a slim bar showing active Pepes, total weight and total backing; tap to expand.\n- Top bar: shrink to one row (title, LIVE dot, a Replay button and a menu); move the replay speed selector, highlight-wallet input and Fit button into the menu.\n- Touch controls: one-finger drag to pan, pinch to zoom, double-tap to fit; prevent page scroll/zoom on the canvas (touch-action: none); add <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\">.\n- Tooltips: on tap, show the node info as a small card anchored at the bottom (above the sheet) instead of the hover tooltip; tap empty space to close.\n- Performance on phones: cap particles and trail length, lower the glow/blur cost, and render Pepe images only when zoomed in enough to see them; target smooth 60fps on a mid-range phone.\n- Respect safe areas (notch) with env(safe-area-inset-*); minimum 44px tap targets; text at least 12px.\nTest at 375x812 and 412x915 in portrait and landscape: no horizontal scroll, nothing overlapping, all panels reachable, and node count still matches the contract. Keep desktop (≥1024px) looking exactly as it does now.","baseCommit":"2e62d34c60c03b456d67afb6fa8abddf777e8339","state":"completed","createdAt":"2026-10-08T15:10:04.308Z"},{"jobId":"beea6ef6-462e-4286-bb8c-a2ccf65a289a","workflowId":null,"objective":"Remove the \"Replay from launch\" feature entirely from the Swarm map: the Replay button, the speed selector, the progress bar, and all code that fetches historical logs since the deploy block. Keep the live view exactly as it looks now.\nReduce RPC usage so it stays within free public RPC limits:\n- On load, build the current state from the distributor's view functions in one Multicall3 batch (active Pepes, owners, levels, pending ETH, last activation, totals) instead of scanning past events.\n- Poll every 15s using eth_blockNumber first and only fetch new logs for the new block range (max 50 blocks per getLogs); skip work if no new block.\n- Back off when a request gets HTTP 429 or a rate-limit error (exponential, up to 60s), and rotate across the existing public RPC list; never hammer one endpoint.\n- Pause polling when the tab is hidden (document.visibilityState) and resume on focus.\n- Load Pepe images lazily, at most 4 concurrent tokenURI calls, and cache them in localStorage by token id.\n- Refresh the Chainlink ETH/USD price at most once per 5 minutes.\nShow a small \"RPC busy, retrying\" note in the HUD instead of breaking when rate-limited. Keep it plain HTML/JS, read-only, no wallet, no analytics.","baseCommit":"c34d929789a146015eb20101847190bb3022a9d2","state":"completed","createdAt":"2026-10-08T15:44:00.889Z"},{"jobId":"97da9659-fc24-40b9-8a4a-e78473df23e4","workflowId":null,"objective":"Upgrade the OG Swarm map (label og-swarm-map) with a calculator, a glossary, in-page alerts and a contracts panel. Keep it a read-only, no-wallet, plain HTML/JS static site: keep the canvas, neon look, desktop panels, mobile sheet, batched/polled RPC reads and caching exactly as they are. No new runtime dependencies, remote fonts or trackers. Reuse the addresses already in swarm.js.\n\n1. EARNINGS CALCULATOR (new sheet tab / desktop panel \"Calculator\"). Inputs: level (L1, L2, L3) and optional Pepe ID or wallet. Show, all as live estimates clearly labelled \"estimate, not a promise\":\n- Weight per level (L1 = 1, L2 = 2, L3 = 4) and cumulative OG burn to reach it (50,000 / 150,000 / 400,000 OG); upgrade cost = the difference only.\n- That burn priced in ETH and USD from the pool spot price and the Chainlink ETH/USD feed already used.\n- ETH per hour per weight from (a) the backlog stream: backlogLeft / (streamEnd - now) / totalWeight, and (b) ordinary fees: ETH fee volume to Pepes over the last 24h of events / totalWeight / 24. Show both and the total, per hour, per day and per 30 days for the chosen level.\n- Simple payback days = activation cost in ETH / ETH per day, with a note that it changes as volume, price and total weight change.\n- For a given Pepe ID or wallet, show its level, pending ETH and its share of total weight.\n\n2. GLOSSARY (\"How it works\" panel, reachable from desktop and the mobile menu), short plain sentences: OG token; Swarm Pepe NFTs; activating and upgrading by burning OG (burn = transfer to 0x...dEaD); levels and weights; the 3.5% ETH hook fee on buys and sells (1% team, the rest to active Pepes by weight); launch-hour fee decay; backlog and the 30-day linear stream; pending ETH and that rewards follow the NFT on transfer; exit and the 36h Dutch auction of exited Pepes; L1/L2/L3 colors on the map. Add a link to the official site https://og.sites.imd.fun.\n\n3. ALERTS (in page, while the tab is open). Let the user pick: all events, only my highlighted wallet, or specific Pepe IDs; event types: new auction listings, activations/upgrades, exits, big swaps above a chosen ETH size. Deliver as an in-page toast plus optional browser Notification (ask permission only on click) and optional sound. Save choices in localStorage. Show plainly that alerts only work while the page is open.\n\n4. CONTRACTS PANEL: OG token, hook, distributor, auction, Swarm Pepe collection, pool ID, each with copy button and Etherscan link.\n\n5. EMPTY/ERROR STATES: never leave stats as bare dashes. Show \"Loading...\" while reading, and a clear \"Can't reach Ethereum RPC, retrying in Ns\" message with a Retry button if reads fail.\n\nKeep mobile and desktop both working, keyboard access and visible focus. Update README and DESIGN.md. Rebuild dist/ with npm run build and host it under the same label.","baseCommit":"6432282a93976ecdf2e0eccbfaa1baa5ae48a037","state":"completed","createdAt":"2026-10-08T16:35:43.438Z"}]},"deliver":true,"host":true,"site":{"id":"0e0add2f-0a66-4c9a-ab58-5daef8b2fe4f","jobId":"dafe19ad-6058-4437-b7e8-1e53ca1b20ab","kind":"launch","tokenId":null,"agentId":null,"url":"https://og-swarm-map.site.identitymd.eth.limo","status":"named","holdReason":null,"takenDownAt":null,"takenDownReason":null,"label":null,"cid":"bafybeidky3252lw5ympinmv3ld6gqvum7y6qtvugwaegxkyz56g25sndae","bytes":1480681,"ensName":"og-swarm-map.site.identitymd.eth","txHash":"0xc2922f167d23a81230241621a7d9aeb0ece3162b23f825ab34daadd6fe7a3875","blockNumber":26148636,"attempts":0,"failure":null,"pinnedAt":"2026-10-08T15:39:50.537Z","namedAt":"2026-10-08T15:40:17.243Z","supersededBy":"2aca072f-b40c-4a2b-a0f6-6c7c30aa3a1c","supersededAt":"2026-10-08T16:10:36.904Z","createdAt":"2026-10-08T15:39:48.221Z","updatedAt":"2026-10-08T16:10:36.904Z"},"launch":{"requested":false,"kind":null,"id":null,"status":null,"chainId":null},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-1059-make-existing-swarm-map","pullRequestUrl":"https://github.com/identity-md-launches/launch-1059-make-existing-swarm-map/pull/1","commit":"c34d929789a146015eb20101847190bb3022a9d2","deliveredAt":"2026-10-08T15:40:12.697Z","media":null},"media":null,"nodes":[{"key":"build_website","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-08T15:39:48.221Z","verdict":{"status":"accepted","profile":"none","evaluation":"structural","rejectionCode":null,"detail":"paths and tree verified; no suite was run for this kind of work","verifierVersion":"0.1.0+ad90ce4c","verifiedTreeHash":"64e7ef9f02563a6ab53781a54ef9f150bc3ecf15","at":"2026-10-08T15:39:48.225Z","failedChecks":[]},"seat":{"tokenId":"221","agentId":"51124"},"live":null}],"reviews":[{"status":"queued","chainId":1,"txHash":null,"blockNumber":null,"sentAt":null,"entries":[{"nodeKey":"build_website","agentId":"51124","value":1,"role":"verification:structural"}]}]}