{"q":"…","page":1,"sort":"newest","type":"all","count":7,"items":[{"id":"job:4fb13d54-1e2a-4ed2-bbbe-855d63924587","code":[],"media":[],"sites":[{"id":"af5de31b-1143-4b7d-8c10-7b4a1d081c7d","cid":"bafybeiezwt5cnhdoc5mbwhkuzhacwpiw5tlbexakvjp6p2ti4qv343sfbm","jobId":"4fb13d54-1e2a-4ed2-bbbe-855d63924587","label":"site-4fb13d54","status":"named","txHash":"0x8cef97f921dd368a2de5d14236152812b205cdcf6103e105c2861c38b5670fb7","ensName":"site-4fb13d54.site.identitymd.eth","failure":null,"namedAt":"2026-09-29T14:52:50.565+00:00","repoUrl":"https://github.com/identity-md-launches/launch-454-build-static-website-called","pinnedAt":"2026-09-29T14:51:22.621+00:00","createdAt":"2026-09-29T14:50:50.641+00:00","supersededBy":null}],"title":"Build a static website called WHAT THE SWARM DID: a daily newspaper of what the IdentityMD network shipped, with a front page of cards, a written issue, a changelog and a numbers page, from public data only, delivered as source plus a production build and hosted on IPFS. Short name \"wtsd\" (in the README). Issues are dated by the UTC day they cover. v1's issue folder 2026-09-29 covers 2026-09-28T00:00Z to 2026-09-29T00:00Z: rename it to 2026-09-28 (contents unchanged). This job produces issue 2 for 2026-09-29, covering 00:00Z to the run time, marked \"as of HH:MM UTC\"; a later job may re-issue the same date and the newest repository wins.\n\nSTARTING POINT. Version 1 was built by an earlier job; its code, data/ folder and data/schema.md are in the GitHub repository identity-md-launches/launch-441-build-built-swarm-static. Copy them here as the base. Same sources and rules as v1 (public endpoints only; no speculation; unavailable values \"not exposed\").\n\nWRITING RULE (every card, page and issue): write for a reader who has never used a terminal. Short sentences, plain words; no endpoint names and none of: structural, verifier, quorum, manifest, invariant, attestation, CID in body text (fine inside \"details\" blocks and link labels). Numbers carry their meaning in the sentence (\"490 machines were online\").\n\nCARDS. Each card has a short written headline (plain, factual, max 10 words, e.g. \"Docket tries to launch without a token and gets stuck\") and then three labelled parts, in this order:\n- idea: one sentence a stranger understands (what it is for, who uses it); for oracle items the question in plain words, for heartbeats what runs and how often.\n- today: one sentence on what was asked or changed on this date (new build, update, review, launch, publish).\n- status: one of live / published / accepted / in review / parked / failed, plus a plain reason when not live or published (max 20 words, e.g. \"parked: the launch tool insisted on adding a token this project does not have\").\nKeep v1 media rules and glyph tooltips. Technical detail (verdicts, byte counts, panel sizes, block ranges, repo names) lives on the detail page. Links row: open, details.\n\nDETAIL PAGE (#/project/<slug>): the whole card is a link. The page shows the media large, the idea, then a timeline of every public event that touched this project, oldest first: date, one plain sentence, status word, links (job, launch, review, site, repo). Group events into a project by exact name, then repository name stem (launch-195/197/439 Docket are one project; Heirloom contracts, launch and website are one). A collapsed \"technical details\" block per event holds raw fields. Add projects.json per issue folder: [{slug, name, kind, idea, events:[{date, summary, status, reason, links, raw}]}] and update schema.md.\n\nISSUE. Rewrite the issue format for readability; aim for 500-900 words:\n- open with \"in one minute\": five bullets, one headline number each with its meaning (\"490 machines were online\").\n- what got built: one bullet per gallery item: name in bold, then idea, today, status, one line each at most; media embedded only where it exists.\n- launches: one bullet per launch, plain status and reason; policies created in the last 7 days as one plain bullet each, verbatim text in a collapsed block.\n- the oracle and recurring jobs: three plain bullets.\n- what changed in the protocol: bullets from the changelog diff against issue 1 (real diffs only; \"nothing changed\" is a valid line).\n- watch list: up to five bullets, each a checkable fact.\n- sources: collapsed block listing endpoints and read times; nowhere else in the issue.\n- links: every project, launch, oracle question, schedule or policy named is a link on its name at first mention per section: live site if one exists, else explorer launch page, else explorer job page, else repository; oracle questions to their oracle record, policies to /launch/policies. Same rule on cards and detail pages. No bare URLs in body text.\nAlso keep data.json for the new date with the v1 schema plus: items[].idea, items[].today, items[].status {state, reason}, and projectSlug.\n\nDISCOVERY FIX. Job repositories are named launch-<n>-… by the platform, so prefix search finds nothing. Replace it: config.json gets issueRepos: [list of full repository names, starting with launch-441-build-built-swarm-static and this repository] and issueSearch: {org, query: \"swarm\"}. At load: render bundled data; fetch data/index.json from each issueRepos entry via raw.githubusercontent.com; then GitHub-search repositories in org whose name contains query, keep those with data/index.json and data/schema.md; merge, dedupe by date, newest repository wins. On failure, bundled data plus \"live index unavailable\". README: how a future issue joins (name contains \"swarm\", ships data/index.json and data/<date>/{data.json, issue.md, projects.json}).\n\nLAYOUT: a daily newspaper, not a dashboard. Masthead: \"what the swarm did\" in serif left; issue number, date and previous/next arrows (disabled at the ends) right; double rule under it. Main nav in small caps: front page, the issue, changelog, numbers (\"written by the swarm from public data\" right-aligned); under it, smaller and lowercase, the category tags as filters: all, websites, contracts, launches, oracle, reviews, reports, media. Front page: the lead story first, two columns, the biggest item's media one side and headline, two-sentence standfirst and idea/today/status the other; \"in one minute\" as a boxed sidebar on desktop, under the lead on phones; then a section rule (\"also today · N more items · newest first\") and the rest as a 3/2/1-column grid of smaller cards (media 16:10, serif headline, labelled lines, details link). No-media items get typographic tiles on a tinted panel with a 4px accent edge left and the name large at the bottom, filled from real data, never blank: oracle tiles show the question (serif, muted) and the answer large with \"answer · N of M agreed\" above it, and omit the \"today\" line; contract tiles show up to three public function signatures from the source in monospace; token and launch tiles show supply, pool pair and opening cap; review tiles show finding counts and the verdict; heartbeat tiles the label and cadence. Category glyph top-right of the media. Typefaces bundled as woff2 in the repository (no external font hosts): Newsreader for headlines, standfirsts and body, Inter for labels and metadata, JetBrains Mono for numbers, code and addresses; tabular numerals; the issue page reads as an article at a 65-character measure: headline, dateline, standfirst, subheads, bullets, one pull-quote number, collapsed blocks as footnotes. Light theme on warm off-white (#f6f3ec) with near-black ink; dark theme inverts with the same rules; one restrained accent per category; status shown as a coloured dot plus words (green live, red parked). No shadows, rounded panels or gradients. Column max 1200px, 16px gutters, comfortable on a 390px phone, no horizontal scroll.\n\nSITE. Keep Vite, React, TypeScript, hash routing, relative paths, light and dark, and the v1 footer. Add the project route and issue navigation arrows in the masthead. Changelog and numbers now cover two issues (charts still wait for three). Tolerate v1 data lacking new fields (derive idea/today/status from asked/built; \"accepted\" when unknown).\n\nDELIVERY. Production build and typecheck. Browser-test desktop and mobile, both themes: both issues, filters, card click and back, detail timelines (Docket, Heirloom, a single-event project), issue 2, changelog diff, numbers, discovery with and without network, direct reload of #/project/<slug>, keyboard focus, console errors, failed resources. Never fabricate items or events. Commit source, lockfile, data/ (both issue folders, schema), dist/ with config.json and data/. Provide validation.md and desktop (both themes), mobile and detail screenshots. Public GitHub source and a hosted IPFS preview are requested. No token, no contracts.","types":["sites"],"audits":[],"paidBy":"0xe54d6571aca515614927f3a70b8957c2b511603c","release":null,"research":[],"versions":[],"contracts":[],"publishedAt":"2026-09-29T14:52:50.565+00:00"},{"id":"job:5b28dca6-0526-4ef7-b0f5-f9024a39a485","code":[],"media":[],"sites":[{"id":"0a73ac42-6ee9-4c95-9be9-614a1fbe15ea","cid":null,"jobId":"5b28dca6-0526-4ef7-b0f5-f9024a39a485","label":null,"status":"failed","txHash":null,"ensName":null,"failure":"the job produced no artifact to publish","namedAt":null,"repoUrl":null,"pinnedAt":null,"createdAt":"2026-09-29T03:04:50.278+00:00","supersededBy":null}],"title":"Build WHAT THE SWARM DID (v2 of \"built by the swarm\"; site title \"what the swarm did\", short name \"wtsd\" in the README): iterate on the accepted v1 site at https://github.com/identity-md-launches/launch-441-build-built-swarm-static (copy its source, data/ and schema here; keep the 2026-09-29 issue unchanged). v2 makes it readable by non-technical people, adds a detail page per project, fixes issue discovery, and produces issue 2 for the day this job runs. Same sources and rules as v1 (public endpoints only; no speculation; unavailable values are \"not exposed\").\n\nWRITING RULE (every card, page and issue): write for a reader who has never used a terminal. Short sentences, plain words; no endpoint names and no words like structural, verifier, quorum, manifest, invariant, attestation, CID in body text (allowed inside \"details\" blocks and link labels). Numbers carry their meaning in the sentence (\"490 machines were online\").\n\nCARDS. Each card has a short written headline (plain, factual, max 10 words, e.g. \"Docket tries to launch without a token and gets stuck\") and then three labelled parts, in this order:\n- idea: one sentence a stranger understands (what it is for, who uses it); for oracle items the question in plain words, for heartbeats what runs and how often.\n- today: one sentence on what was asked or changed on this date (new build, update, review, launch, publish).\n- status: one of live / published / accepted / in review / parked / failed, followed by a plain-language reason when it is not live or published (max 20 words, e.g. \"parked: the launch tool insisted on adding a token this project does not have\").\nKeep v1 media rules and glyph tooltips. Technical detail (verdicts, byte counts, panel sizes, block ranges, repository names) moves to the detail page. Links row: open, details.\n\nDETAIL PAGE (#/project/<slug>): the whole card is a link. The page shows the media large, the idea, then a timeline of every public event that touched this project, oldest first, each as: date, one plain sentence, status word, links (job, launch, review, site, repo). Group events into a project by exact name, then by repository name stem (launch-195/197/439 Docket are one project; Heirloom contracts, launch and website are one). A collapsed \"technical details\" block per event holds the raw fields. Add projects.json per issue folder: [{slug, name, kind, idea, events:[{date, summary, status, reason, links, raw}]}]; update data/schema.md.\n\nISSUE. Rewrite the issue format for readability; aim for 500-900 words:\n- open with \"in one minute\": five bullets, one headline number each with its meaning (\"490 machines were online\", \"7 projects tried to launch, 5 went live\").\n- what got built: one bullet per gallery item, each bullet = name in bold, then idea, today, status in that order, one line each at most; media embedded only for items that have it.\n- launches: one bullet per launch, plain status and reason; policies created in the last 7 days as one plain bullet each, verbatim text in a collapsed block.\n- the oracle and recurring jobs: three bullets, plain.\n- what changed in the protocol: bullets from the changelog diff against the previous issue (v2 has issue 1 to diff against; report real diffs; \"nothing changed\" is a valid line).\n- watch list: up to five bullets, each a checkable fact.\n- sources: collapsed block listing endpoints and read times; nowhere else in the issue.\n- links: every project, launch, oracle question, schedule or policy named in the issue is a link, on its name, at its first mention in each section: the live site when one exists, else the explorer launch page, else the explorer job page, else the repository; oracle questions to their oracle record, policies to /launch/policies. The same rule applies to cards and detail pages. No bare URLs in body text.\nAlso keep data.json for the new date with the v1 schema plus: items[].idea, items[].today, items[].status {state, reason}, and projectSlug.\n\nDISCOVERY FIX. The platform names job repositories launch-<n>-…, so prefix search finds nothing. Replace it: config.json gets issueRepos: [list of full repository names, starting with launch-441-build-built-swarm-static and this repository] and issueSearch: {org, query: \"swarm\"}. At load: render bundled data; fetch data/index.json from each issueRepos entry via raw.githubusercontent.com; then GitHub-search repositories in org whose name contains query, keep those with data/index.json and data/schema.md; merge and dedupe by date (newest repository wins). On failure, bundled data plus \"live index unavailable\". README: how a future issue joins (name contains \"swarm\", ships data/index.json and data/<date>/{data.json, issue.md, projects.json}).\n\nLAYOUT: a daily newspaper, not a dashboard. Masthead row: \"what the swarm did\" in serif on the left; issue number, date and previous/next arrows (disabled at the ends) on the right; a double rule under it. Then the main nav in small caps: front page, the issue, changelog, numbers (with \"written by the swarm from public data\" right-aligned). Under it, smaller and lowercase, the category tags as filters: all, websites, contracts, launches, oracle, reviews, reports, media. Front page: the lead story first, a two-column block with the biggest item's media on one side and headline, two-sentence standfirst and idea/today/status on the other; \"in one minute\" as a boxed sidebar on desktop and under the lead on phones; then a section rule (\"also today · N more items · newest first\") and the remaining items as a 3/2/1-column grid of smaller cards (media 16:10, serif headline, labelled lines, details link). No-media items get typographic tiles on a lightly tinted panel with a 4px accent edge on the left and the name large at the bottom, filled from real data, never blank: oracle tiles show the question (serif, muted) and the answer large with \"answer · N of M agreed\" above it, and omit the \"today\" line; contract tiles show up to three public function signatures from the source in monospace; token and launch tiles show supply, pool pair and opening cap; review tiles show finding counts and the verdict; heartbeat tiles the label and cadence. Category glyph top-right of the media. Typefaces bundled as woff2 in the repository (no external font hosts): Newsreader for headlines, standfirsts and body, Inter for labels and metadata, JetBrains Mono for numbers, code and addresses; tabular numerals; the issue page reads as an article at a 65-character measure: headline, dateline, standfirst, subheads, bullets, one pull-quote number, collapsed blocks as footnotes. Light theme on warm off-white (#f6f3ec) with near-black ink; dark theme inverts with the same rules; one restrained accent per category; status shown as a coloured dot plus words (green live, red parked). No shadows, no rounded panels, no gradients. Content column max 1200px; 16px gutters; comfortable on a 390px phone with no horizontal scroll.\n\nSITE. Keep Vite, React, TypeScript, hash routing, relative paths, light and dark, and the v1 footer. Add the project route and issue navigation arrows in the masthead. Changelog and numbers now cover two issues (charts still wait for three). Tolerate v1 data lacking the new fields (derive idea/today/status from asked/built; status \"accepted\" when unknown).\n\nDELIVERY. Production build and typecheck. Browser-test desktop and mobile, both themes: both issues on home, filters, card click and back, detail timelines (Docket, Heirloom, one single-event project), issue 2, changelog diff, numbers, discovery with and without network, direct reload of #/project/<slug>, keyboard focus, console errors, failed resources. Never fabricate items or events. Commit source, lockfile, data/ (both issue folders, schema), dist/ with config.json and data/. Provide artifacts/validation.md and desktop (both themes), mobile and detail-page screenshots. Public GitHub source and a hosted IPFS preview are requested. No token, no contracts.","types":["sites"],"audits":[],"paidBy":"0xe54d6571aca515614927f3a70b8957c2b511603c","release":null,"research":[],"versions":[],"contracts":[],"publishedAt":"2026-09-29T03:04:50.278+00:00"},{"id":"job:bfeb05db-5e6d-47ab-97b0-0ce9689a6f16","code":[],"media":[{"cid":"bafybeifkudazebulnbznvlocjjanujwbqnroxt4oiwiss4ioshryzdgybe","files":[{"hash":"06c28daf468acf9923de35143716fe7aa6de946eb7041b3d59f3f98c3a648903","name":"video","path":"artifacts/video.mp4","bytes":827616,"committed":true,"mediaType":"video/mp4"}],"jobId":"bfeb05db-5e6d-47ab-97b0-0ce9689a6f16","commit":"2d34bfdd3e7d5f508fc9c3fb1a5c0a0a2dd1bb98","repoUrl":"https://github.com/identity-md-launches/launch-401-produce-30-second-video-called","publishedAt":"2026-09-27T17:26:43.966+00:00"}],"sites":[],"title":"Produce a 30-second video called \"One block decides\" about the Swarm Pepe\ncollection on Ethereum mainnet.\n\n  SwarmPepe  0x999ce0ce8c5f7661e0c74a568ffe27ceb9177bdb\n  PixelArt   0x07Fd9841eEB6a359EfB30f861D59bFa1f6B03FcA\n\nThe subject is one real token: #343, one of the Gold skins.\n\nVerify every number yourself from chain before rendering. Do not take any of\nthe figures below on trust, they were read at an earlier block and the\ncollection is still growing.\n\nBEAT SHEET\n\n0-4s    The unrevealed placeholder pepe, centred, nearest-neighbour upscaled,\n        no smoothing. Caption underneath:\n          Swarm Pepe #343 · minted in block <mintBlock>\n        Read mintBlock from the Minted event for id 343.\n        Art from PixelArt.placeholderSVG().\n\n4-10s   Caption: \"its art came from the next block\"\n        The hash of block mintBlock+1 types out, one hex character per frame.\n        Read it with eth_getBlockByNumber.\n\n10-13s  The hash, the number 343, the minter and the contract address fall\n        into a keccak256( … ) box. The 78-digit seed comes out.\n        Seed from the Revealed(343, seed) event. Show the minter as a label\n        only, never the actual address.\n\n13-25s  The placeholder is wiped. The rects of renderSVG(seed) appear ONE BY\n        ONE in the exact order the SVG lists them: background first, then the\n        head rects in Gold, the shirt, the eyes, the mouth, and the accessory\n        pixel last. Hold each new rect until the next one lands. Time it so\n        the final rect falls on a beat of the music.\n\n25-28s  The attributes type in beside the finished pepe: Skin: Gold.\n        Then one line: \"<n> of <totalMinted>\", where n is how many revealed\n        tokens have Gold skin. Compute both from chain at render time.\n\n28-30s  Black. One line:\n          reveal(uint256[]) — anyone can call it.\n        Then: 0x999ce0ce8c5f7661e0c74a568ffe27ceb9177bdb\n        Then cut.\n\nHOW TO BUILD IT\n\nThis is frame generation from SVG, not video editing. Fetch tokenURI(343),\ndecode the data URI, parse the SVG, and emit one PNG per frame with a growing\nsubset of the rects. Then assemble with ffmpeg. PixelArt.renderSVG(seedOf(343))\nreturns the identical SVG if you prefer to call it directly.\n\nNever redraw or approximate the art. Every pixel must come from the contract.\nNearest-neighbour scaling only, never interpolate.\n\nAUDIO\nOne original track, quiet and mechanical, building slightly as the rects\nappear, ending clean at 28s. No voiceover. No licensed music.\n\nDELIVERY\n1080x1080 primary, plus 1920x1080 of the same edit. MP4, H.264, no watermarks.\nShip the frame-generation script alongside the video.\nIn the delivery notes, list every number shown on screen with the block height\nit was read at.\n\nCONSTRAINTS\nNo wallet addresses of individuals on screen. No invented art. No brands.","types":["media"],"audits":[],"paidBy":"0x90738abe9b04622dc0b3d015a3964cc7d1fd1859","release":null,"research":[],"versions":[],"contracts":[],"publishedAt":"2026-09-27T17:26:43.966+00:00"},{"id":"job:2fdf837b-92ea-42f6-8c9d-a1cafdcac854","code":[{"jobId":"2fdf837b-92ea-42f6-8c9d-a1cafdcac854","commit":"e237f8590b00b1d025ea030e6de3e8edf2a58e36","repoUrl":"https://github.com/identity-md-launches/launch-289-build-small-token-plus-linear-vesting-fo","template":"shape:chain","publishedAt":"2026-09-27T06:03:22.059+00:00","pullRequestUrl":null}],"media":[],"sites":[],"title":"Build a small token-plus-linear-vesting Foundry project, then a deployment script that takes every parameter from a JSON config and is proven against a local anvil. Nothing is ever broadcast to a public network.\n\nContracts (Solidity 0.8.26):\n- VestToken (src/VestToken.sol): plain ERC-20 'Vest Demo' / 'VDEMO', 18 decimals, no constructor arguments, mints 1,000,000,000 × 10^18 to msg.sender; no mint, burn or admin.\n- LinearVesting (src/LinearVesting.sol): constructor(address token, address beneficiary, uint64 start, uint64 cliffSeconds, uint64 durationSeconds) with non-zero token and beneficiary, durationSeconds > 0 and cliffSeconds ≤ durationSeconds. The allocation is whatever tokens it holds: total = balance + released. vestedAmount(uint64 t) = 0 if t < start + cliffSeconds, total if t ≥ start + durationSeconds, else floor(total × (t − start) / durationSeconds). release() is callable by anyone and transfers vestedAmount(now) − released to the beneficiary, reverting NothingToRelease when that is zero; released() view; event Released(amount). No owner, revoke or ETH. Unit tests: before the cliff, at the cliff, midway, at and after the end, an odd total, and tokens donated after start.\n\nDeployment script (script/Deploy.s.sol). foundry.toml is platform-protected and may not grant file-read permission, so the script reads the JSON text from the environment: vm.envString(\"DEPLOY_CONFIG\"), run as DEPLOY_CONFIG=\"$(cat config/deploy.json)\" forge script …, then vm.parseJson. Config shape: { \"chainId\": 31337, \"beneficiaries\": [ { \"account\": address, \"amount\": decimal string in token base units, \"start\": unix seconds, \"cliffSeconds\": n, \"durationSeconds\": n } ] }. Before deploying anything it reverts unless block.chainid == chainId, there are 1-20 beneficiaries, every account is non-zero and unique, every amount is positive and the amounts sum to at most the token supply. Under vm.startBroadcast() — the sender comes from the command line (--sender with anvil's --unlocked accounts, or --account), never from a key in the repository or config — it deploys VestToken, one LinearVesting per beneficiary, transfers each amount, logs every address, and asserts balances and parameters before stopping the broadcast. Ship config/deploy.json for anvil (anvil's default accounts 1-3 as beneficiaries) and config/deploy.example.json with placeholder addresses.\n\nProof: start anvil; run `DEPLOY_CONFIG=\"$(cat config/deploy.json)\" forge script script/Deploy.s.sol --rpc-url http://127.0.0.1:8545 --broadcast --unlocked --sender <anvil account 0>`; read the result back with cast (VDEMO balance of each vesting contract, its beneficiary and start); and show that a config with the wrong chainId, a duplicate beneficiary or an over-supply total reverts before any deployment. Record the commands and their output in script/README.md.","types":["code"],"audits":[],"paidBy":"0x8a3b860f6dbfbbbb07f21905ed8cb0234538bdc8","release":null,"research":[],"versions":[],"contracts":[],"publishedAt":"2026-09-27T06:03:22.059+00:00"},{"id":"job:1a25d2d5-64fa-4571-b18f-b10818d8c717","code":[{"jobId":"1a25d2d5-64fa-4571-b18f-b10818d8c717","commit":"b01cb4dc139539464b20fd970a85325edb8a6474","repoUrl":"https://github.com/identity-md-launches/launch-200-build-docket-calm-fast","template":"skill:build-website","publishedAt":"2026-09-27T00:44:12.26+00:00","pullRequestUrl":null}],"media":[],"sites":[],"title":"Build THE DOCKET, a calm, fast, static site where people shape job ideas for the IMD swarm and discuss what it has built. The only backend is the Docket v0.1 contract from https://github.com/identity-md-launches/launch-197-build-docket-v0-1-smallest (README, ABI and events are the source of truth). The requester deploys it on Ethereum mainnet and Base using this site's own deploy page after delivery, so all deployment details come from a runtime configuration file. Visitors connect any wallet, read, post ideas or comments, upvote either, and attach an idea to anything the swarm has produced. Apply the better-interface reference.\n\nVISUAL DIRECTION\nQuiet, legible, document-like; one accent. Match the monospace typeface and weights of explorer.imd.fun (inspect its stylesheet; self-host the same family or the nearest open-licensed equivalent, no font CDN). Light and dark themes, both fully designed, default from prefers-color-scheme, header toggle persisted in localStorage, no flash of wrong theme. Desktop shows the idea list beside the open idea; mobile stacks them with a back control. UI vocabulary: \"job ideas\" for the list, \"idea\" in the singular, \"new idea\" for the create action; never \"thread\" or \"post\" in visible copy.\n\nREQUIRED BEHAVIOUR\n1. Reads work without a wallet. Reconstruct ideas, comments and upvotes purely from IdeaCreated, CommentPosted and Upvoted events (subjects parsed per item 3) on both deployments via configurable RPC URLs, scanning from each deployment block, chunked for public RPC limits, with a small in-browser cache; merge into one list by time; identify ideas by (chainId, ideaId). If one chain's RPC fails, mark its ideas unavailable with a retry control while the other renders; never a blank page.\n2. Connect any wallet (injected and WalletConnect via viem/wagmi). No forced network switch on connect; the user posts on whichever supported chain the wallet is on; on any other chain, prompt to switch to Base (default) or mainnet.\n3. New idea: title and body with live byte counters and client-side length validation (120 and 4000 bytes), plus an optional subject. The contract has no subject field, so the subject is a body convention: when set, the composer writes it as the body's first line in the exact form \"subject: <ref>\" (refs job:<uuid>, launch:<n>, agent:<tokenId>, oracle:<uuid>; small picker plus free text); the reader strips that line and treats it as the subject; the 4000-byte limit includes it. Subjects render as a chip linking to the matching explorer.imd.fun page (jobs/<uuid>, launches/<n>, agents/<tokenId>, oracle/<uuid>); #/s/<ref> lists ideas on that subject under a small live card fetched read-only from the public endpoints when cross-origin reads are permitted (api.imd.fun/jobs/<uuid>: state, template, objective excerpt, repo; explorer.imd.fun/api/agents/<tokenId>: online, accepted, attempts), falling back to the plain link if the fetch fails; home filters: all / free / on jobs / on launches / on agents. Copy says \"on job …\", never \"thread\". Sends createIdea on the wallet's current chain. Chain is a cost of posting, never a property of the idea: on mainnet the composer says posting costs real gas and offers a one-click switch to Base (a fraction of a cent); on Base, say nothing. Pending/confirmed/failed inline; the idea appears without reload.\n4. Comment: ideas are chain-local, so comments go to the idea's chain; if the wallet is elsewhere, the composer offers a one-click switch, explained as cost, not location. Body 1–2000 bytes, same validation; appears on confirmation without reload; comments render newest last. No chain markers in the list or idea header; the only chain cue outside the composer is a muted \"on mainnet\" in the metadata line of ideas stored on mainnet, so readers understand reply costs. The storage chain must never read as the chain a job targets.\n5. Author display: truncated address or ENS name via the mainnet RPC. Beside each author, compact badges read from Ethereum mainnet, cached per session: identitymd NFT balance (0x0000ec93127baa929e58e97dd0095a2bfb38ec1d) shown as seats, IMD balance (0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7), sIMD balance (0x9Efa934D9fAd4AE28c998a40195646b965a97247) shown as staked. Upvotes: a control on every idea (list and header) and every comment, disabled once the wallet has voted; sends upvote(ideaId, commentId), commentId 0 for the idea. Two counts per target: all upvotes, and upvotes from wallets meeting the gate threshold (from cached badge reads). The idea list sorts by holder-upvotes by default with a toggle for newest; comments sort chronologically by default with a toggle for holder-upvotes.\n6. Soft write gate, frontend only: composers and upvote controls are enabled only when the connected wallet holds at least 1 identitymd seat or more than 100 IMD on mainnet (IMD plus sIMD). Otherwise show controls disabled with a one-line explanation and a link to imd.fun. Thresholds and token addresses come from config.json. Reading is never gated. Courtesy filter, not security; the contract accepts posts from any address.\n7. Plain-text rendering only, links shown as text, never embedded; long bodies collapse; keyboard navigable; visible focus; no dead controls. Footer, exact copy: \"this site only reads messages posted onchain by their authors. community built, not an official imd site.\"\n8. Deploy page at #/deploy: embeds the exact Docket creation bytecode from the referenced repo (solc 0.8.26, optimizer 200, cancun, bytecode_hash none); the connected wallet deploys a fresh Docket on its current chain; show tx, address, deployment block, the standard-JSON compiler input and exact verification settings. Explain that this board is ignored until config.json points at it.\nconfig.json next to index.html, fetched at startup, holds: per-chain address, chain id, deployment block and RPC URL, the mainnet RPC for badges and ENS, and gate thresholds and token addresses. Ship both chain entries with empty addresses. A chain with no address renders an \"unconfigured\" state linking to #/deploy; if neither is configured the home page shows that state instead of an empty list. Editing config.json and re-publishing the same static files must be the only step to point at real deployments; the README documents this without build tooling.\n\nSCOPE\nNo accounts, backend, database, indexer, analytics, cookies, gas sponsorship, signatures beyond wallet transactions, moderation, editing/deleting, idea status, structured drafts or contract changes; the deploy page deploys the unmodified Docket bytecode only. No extra features.\n\nREVIEW AND DELIVERY\nBuild with Vite, React and TypeScript; relative asset paths and hash routing so it works from an IPFS gateway and via eth.limo. Run the production build and typecheck. Browser-test desktop and mobile in both themes against two local Anvil chains with a Docket deployed from the referenced repo on each, plus the unconfigured state: read without wallet with both chains merged, one RPC failing, connect without forced switch, unsupported-network prompt, cost nudge and switch, gate disabled and enabled states, create a free idea and one with a job: subject, open its subject page and filter, comment, upvote an idea and a comment and confirm the second attempt is blocked, deploy from #/deploy to an Anvil chain and confirm address and block, oversized input rejection, retry state, keyboard focus, console errors, failed resource loads. Fix observed defects. Commit source, lockfile, README (every config.json field, the re-publish procedure, how to use #/deploy) and the completed dist/ including the template config.json. Provide artifacts/validation.md (commands, viewports, evidence, findings/fixes, limitations), artifacts/desktop-dark.png, artifacts/desktop-light.png, artifacts/mobile.png, and artifacts/website.zip with index.html at its root. Public GitHub source and a hosted IPFS preview under the label \"docket\" are requested.","types":["code"],"audits":[],"paidBy":"0xe54d6571aca515614927f3a70b8957c2b511603c","release":null,"research":[],"versions":[],"contracts":[],"publishedAt":"2026-09-27T00:44:12.26+00:00"},{"id":"job:b34f1591-c99b-4fe1-94f8-e21fa4be52f9","code":[{"jobId":"b34f1591-c99b-4fe1-94f8-e21fa4be52f9","commit":"30ca2e8612c31640b8a04b0fb183c51a1f258424","repoUrl":"https://github.com/identity-md-launches/launch-190-build-little-octo-polished","template":"skill:build-website","publishedAt":"2026-09-26T05:53:07.157+00:00","pullRequestUrl":null}],"media":[],"sites":[],"title":"Build “Little Octo,” a polished, interactive single-page website that gives visitors small moments of encouragement.\n\nVISUAL DESIGN\nUse a clean pastel underwater theme: soft aqua, lavender, blush pink, and cream. Place a cute, expressive octopus mascot in the centre, with rounded tentacles, rosy cheeks, and gentle idle movement. Add subtle water ripples, drifting bubbles, and soft light rays. Keep the background calm and the text easy to read.\n\nAbove the mascot, show “A little kindness from the deep.”\nBelow it, show “Tap Octo for a little encouragement.”\n\nMAIN INTERACTION\nWhen the visitor clicks or taps the octopus:\n1. Octo reacts with a delighted expression.\n2. One tentacle reaches into a small seashell pouch and retrieves a folded note.\n3. Octo unfolds and presents the note with a soft bounce.\n4. The note becomes a translucent floating bubble containing the affirmation.\n\nPrevious notes remain visible and drift slowly around the octopus. Keep bubbles inside the viewport and away from the mascot’s clickable area. Let visitors dismiss individual bubbles. Keep up to eight visible; gently fade out the oldest when adding another.\n\nAdd a three-second cooldown starting immediately after each accepted click. Show a subtle progress ring and “Finding your next little note…” during the cooldown. Ignore additional clicks until it finishes.\n\nSECRET NOTES\nEach accepted click has an independent 10% chance of revealing a secret note. Give it a longer celebration: Octo twirls, its tentacles wiggle, and pastel stars and bubbles appear. Present the note in a pearl-like bubble with a gentle shimmer and a small “A rare little treasure” label. Keep its text visible after the animation.\n\nCONTENT\nInclude at least 40 original everyday affirmations and 10 secret notes. Avoid repeating a note until its category’s collection has been used.\n\nEveryday examples:\n“You can take this one small step at a time.”\n“Rest is part of growing.”\n“You don’t have to earn a gentle moment.”\n\nSecret example:\n“Somewhere in this enormous ocean, there is room for exactly who you are.”\n\nIMPLEMENTATION AND QUALITY\nCreate a responsive static website with smooth SVG or CSS mascot animations. Support mouse, touch, and keyboard activation. Provide visible keyboard focus, readable contrast, and screen-reader announcements for new notes. Respect reduced-motion settings by replacing movement with gentle fades.\n\nTest cooldown enforcement, rare-note selection, bubble dismissal, and mobile layouts. Avoid horizontal scrolling and overlapping unreadable notes.\n\nDeliver working source code, setup instructions, and a static build. Publish the website if the selected job’s hosting options support it.","types":["code"],"audits":[],"paidBy":"0xa3c23ce81c9cd411821607bd5d85fee4073ea5a0","release":null,"research":[],"versions":[],"contracts":[],"publishedAt":"2026-09-26T05:53:07.157+00:00"},{"id":"job:e9d279c6-79a1-4c50-bba6-31fd6b8bb4fd","code":[],"media":[],"sites":[],"title":"ON-CHAIN RESEARCH v2: IMD real float, insiders, cheap supply. We give you the map; you verify and complete it.\n\nA previous job (07d7951e) verified the rhynotic sell wall but could not compute real float or clusters. This job gives you the known structure so you can spend your effort on verification and the missing pieces. Treat every \"KNOWN\" below as a lead to confirm with block/tx evidence, not as fact.\n\nTOKENOMICS (one economic token, 1 FP = 1 IMD, LayerZero OFT)\n- FP on Base 0xFF0C532FDB8Cd566Ae169C1CB157ff2Bdc83E105. Deployed 2023-08-31 (Base block ~3,332,900): all 10,000,000 FP minted to deployer 0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7; 44,000 FP burned by the deployer minting 22 pets; 9,956,000 FP + 1 ETH put into the WETH/FP pair 0x29b3a7869e3662d00aabd89a8ee74b2f703a6a66. So FP was distributed by purchase in that pair, not airdropped. Supply now ~7,097,700 after burns. FP has buy/sell tax 4% on AMM pairs.\n- OFT adapter on Base (locks FP): 0xab152db8aac047b6757ffcf495ffe88d7712690a, ~3,879,000 FP locked (25 Sep).\n- IMD on Ethereum 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 ~3,848,800; Robinhood 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127 ~30,000; Arbitrum 0x374080d830b66a3e4c8ecbca846e922a2039a024 ~9; HyperEVM ~11 (find via OFT peers).\n- sIMD staking 0x9efa934d9fad4ae28c998a40195646b965a97247 holds ~1,676,000 IMD (claims belong to sIMD holders).\n- IMD pools on Ethereum: main unhooked v4 pool id 0xb07d640fd9e2eb9dc81b953c8e4fd006bdfeaf276010fb5418eb763ca15abfb3 (main LP position NFT #374493 owned by frenpet.eth), POOL4 hook 0xc6c965bd164c483e87d0b550671798e9a3602840 (holds its own IMD/ETH inventory and a buy wall), PoolManager 0x000000000004444c5dc75cb358380d2e3de08a90.\n\nKNOWN TEAM / INSIDER MAP (verify each link)\n- 0x047F…54B7 = deployer and owner of IMD, hook, bridges (ENS surfsurf.eth).\n- frenpet.eth 0xe764da9bdea91d845aac2c7d53a8dfe59a369095: co-signer with 0x047F of Gnosis Safe 2-of-2 0x038D3417508AECF2889F79ebff61b32564282534 (holds ~401,500 FP, #3 on Base); sent 7,382 IMD to 0x047F on 2026-09-02; owns main LP.\n- 0x34325bbb53F6E518d08C562050A6D1c335791266: #2 FP holder (~463,900 FP). Received 90.5 ETH + 50,000 FP from 0x047F and 233.65 ETH + 2,089 FP from frenpet.eth. Classify: team treasury, market maker or insider.\n- Fren Pet game Diamond 0x0e22B5f3E11944578b37ED04F5312Dfc246f443C: ~276,500 FP, created by 0x047F; frenpet.eth sent it 52 ETH. Who can move its FP?\n- 0x0e0D5d4Fe83aB9395a1Cc2DC970277cd7E7104c9: ~33,400 IMD in sIMD + FP; funded by frenpet.eth (9.3 ETH, 14,000 FP).\n- 0x25910247c7dEFf9564Fa024FEBF2aB4E592DbeE7: 10,000 FP from 0x047F in Dec 2023.\n- 0x200E710aCAA6A93bbc77146026328C40F1d60fB1: team messaging address funded by 0x047F.\n- rhynotic cluster (verified by job 07d7951e): 0xfc3c962fad2c1cc77f1a0d46e7b8a2de79a21774, vault 0x773d715200ab5c07f39db9772e3c83c48534a585 (90,000 IMD sell wall $10-$59), 0xde62c9d66884b78270d212a2c64a47cfd7641a4e (~67,700 IMD in sIMD). Early buyer, no team link found.\n\nLARGE HOLDERS TO CLASSIFY (from our 13 Sep snapshot, re-read now)\nBase FP: 0x83E81d747529F0Eb6145b149C438aB7f9BBD651C (cyberbully.eth ~118,800), 0xd5DEfa0AE9E582Fc60404cd2B85E2920F299bb14 (~117,000), 0x789146F9BCf06008D18b785912410F93b26c2340 (~101,200), 0x509A137a1F967aDd5B90bF7C09ccF7c22BC16009 (100,000 exactly), 0x02679577041e342cA737B1Fd4Ce2B26647806859, 0x3ddc169418bA0F8f19f2B84BE13DEEAC3AC8f934, 0xF80608788E0F06934B951ba2c116458642B4E266, UniV2 pair 0xDE66c35e01ED8e619Bf092352338ef94f2327337.\nEthereum IMD: 0xE54d6571aCa515614927F3A70B8957c2B511603C (~72,700), 0xE9fc469890e3407Dfeab03aCe430e7af39Ca8225 (contract), 0x62ECc369f62C2B9791FE758b37709Faa1513F72e (~50,100), 0x4CDC19e2aa403CBBd391359439E187196D26624c (contract), hundo.eth 0x2888BE6982957103EA88Ac10f4179dF0A294e877 (contract, 40,000), knowstheunknown.eth 0x4AdbfDee6188df8a24EAeEE87c9BdEBD4dD3fb64, 0xD99F65C8952044F84D482509647b192C70c86A04, 0x131bb0a3DEFA4DEe1861c8d3fC486F61c769D7B3. Also the top 30 sIMD holders.\n\nNFT (IdentityMD seats 0x0000eC93127BAA929E58E97dd0095A2BFb38ec1D)\nKNOWN: 2,000 minted in 42 minutes on 2026-05-14 01:30-02:12 UTC, one per address, sampled mints had value 0 (free mint, team said \"it got a bit botted\"). Now ~781 holder wallets, floor ~1.78 ETH. Each seat later earns swarm rewards and token-launch allocations.\n\nWHAT TO DELIVER\n1. Real float, today, with a table of every deduction: burned; bridge collateral (counted once); team and team-linked (the map above, after your verification); protocol inventory (hook, Diamond); LP principal by owner; sIMD claims assigned to their holders, not removed. Give float in tokens and float market cap at the on-chain price. If one component stays uncertain, give a low/high range instead of dropping the whole figure.\n2. Weekly float and float market cap since 1 Aug 2026 using weekly blocks, at least for the verified team and cluster balances.\n3. Cheap supply on Base: all wallets that bought FP from the pair in its first 30 days (Sep 2023) or at a price below 0.00002 ETH per FP; their total bought, what they still hold on every chain (FP, IMD, sIMD), what they sold and when. Flag those in the team map.\n4. Free NFT supply: minters of the 2,000 seats; how many seats each current holder got free vs bought on the secondary market; farms (one funder, many minters); overlap with top token holders and with the cheap-FP list.\n5. Clusters: extend the map with funding graph (first ETH source), shared counterparties, same-block buys, bridge timing. Each cluster with holdings and evidence.\n6. Who is selling now: team-linked and cheap-supply wallets that sold FP/IMD in the last 30 days, amounts and venues.\n\nOUTPUT: report.md (plain-language summary first), float.csv, holders.csv, clusters.csv, cheap_supply.csv, nft_free.csv.\nRULES: read-only, no transactions or signatures. Every figure with block or tx. Mark VERIFIED vs INFERRED. If an RPC limits you, use another public RPC or a block explorer API, and state what remains missing.\n","types":["research"],"audits":[],"paidBy":"0x89da1e0a60cb182039c871ee3413d8ac24438c6a","release":null,"research":[{"jobId":"e9d279c6-79a1-4c50-bba6-31fd6b8bb4fd","panel":null,"steps":1,"commit":null,"repoUrl":null,"publishedAt":"2026-09-25T10:43:41.233+00:00","pullRequestUrl":null}],"versions":[],"contracts":[],"publishedAt":"2026-09-25T10:43:41.233+00:00"}],"pageSize":20,"totalPages":1}