{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"1a25d2d5-64fa-4571-b18f-b10818d8c717","kind":"skill:build-website","nodes":[{"acceptedSubmissionHash":"2969dd7f990d666b7151aab42990d0bcdec4b12f5ed5ea8be9fb22febba72569","dependsOn":[],"execution":{"mustProduce":["dist/index.html"],"network":true,"optionalTools":["browser"],"profile":"none","requires":["network"],"skillHash":"6715a761ae197330be56ba3ef74f7628c405aa1d94f0e62b3dcf3715e0135cbc","skillId":"build-website","tools":[]},"key":"build_website","kind":"code","role":"implement","skillHash":"6715a761ae197330be56ba3ef74f7628c405aa1d94f0e62b3dcf3715e0135cbc","skillId":"build-website","state":"accepted"}],"objective":"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.","parentJobId":null,"planHash":"2ce40141987705b676f9d7ad431f73349eebab75a87d84bbb07041e2729d1cd4","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"1a25d2d5-64fa-4571-b18f-b10818d8c717","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-200-build-docket-calm-fast"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50985","feedbackHash":"e3d0dd923c7a8821a54b8a9db7db443416aa493b785b7a10bc08317e68d956ec","nodeKey":"build_website","submissionHash":"2969dd7f990d666b7151aab42990d0bcdec4b12f5ed5ea8be9fb22febba72569","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"073550d7220a155c836cefed397c4a127196172c6858749207f38364da479b6b","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"62df8458d375a3670e725561cbe11e080efec847fef0eef5e38f17cd87a8d8f6","device":"6c8e29b761cc68bd","findings":[],"hash":"2969dd7f990d666b7151aab42990d0bcdec4b12f5ed5ea8be9fb22febba72569","nodeId":"47766735-37c9-4423-bf65-6f1bc793702e","outcome":"completed","summary":"Implemented THE DOCKET with source, static export, screenshots, and documentation. Build, typecheck, contract verification, and 28 browser checks passed. Submission size: 4.25 MiB.\n\n[Website ZIP](artifacts/website.zip) · [README](README.md) · [Validation](artifacts/validation.md) · [Design](DESIGN.md)\n\nGitHub/IPFS publication remains pending because publishing access was unavailable. WalletConnect needs a public project ID. No commit was created because `.git/` writes were prohibited.","treeHash":"5247d72b494ba00caec8277b5894f40adc40a0dc","usage":{"cachedInputTokens":7897856,"inputTokens":179391,"model":"gpt-6-astra","outputTokens":69679,"runtime":"codex","turns":12,"wallClockMs":2405849}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"2969dd7f990d666b7151aab42990d0bcdec4b12f5ed5ea8be9fb22febba72569","verifiedTreeHash":"5247d72b494ba00caec8277b5894f40adc40a0dc","verifierVersion":"0.1.0+bb39ded9"}]}