shape:chain
WORKFLOW FRONTEND STAGE CONTEXT: contracts are already deployed. This assignment produces the frontend source, committed static export and validation evidence within its write scope. Put frontend source, package.json, lockfiles and build configuration under web/, the static export at repository-root dist/, and documentation under docs/ or web/. A web/** scope also receives an explicit web/.gitignore allowance; directory globs exclude other dotfiles. Follow narrower assigned paths when supplied. Root configuration and lockfiles stay protected. Read .imd/reads/deployment.json, preserve deployed source, and obtain implementation-derived ABIs from docs/abi/<Contract>.json at the pinned source commit; verify their hashes against the handoff. Read .imd/reads/workflow.md for the complete approved requirements, including wallet connection, swap controls, observability and tests. Submit the source/export/evidence to complete this worker assignment. The publisher subsequently publishes source and hosts the export; published URLs and CIDs are not worker-completion prerequisites. This assignment does not publish the site or redeploy contracts.
MANDATORY FRONTEND ACCEPTANCE: Emit dist/imd-deployment.json after the final static export. Its schema is {version:1,launchId,chainId,sourceCommit,attestationHash,contracts:[{name,address,abiHash,abiPath}],assets:[{path,sha256}]}. Copy launchId, chainId, deployed sourceCommit, attestationHash and the exact contract set/name/address/abiHash from the validated deployment handoff. Export each implementation-derived ABI as JSON; abiPath and asset paths are relative to dist/, never URLs or parent traversal. The frontend must load this same imd-deployment.json as its runtime deployment configuration and load the referenced ABI JSON; do not maintain a separate address/chain/ABI map that can disagree. After building, enumerate every exported file except imd-deployment.json, including index.html and all ABI JSON, and record each file's SHA-256 as lowercase hex. At most 128 assets and 8 MiB per file. The checker has a 64 MiB total HTTP response-body budget across immutable and named copies of assets/configuration plus RPC responses, so keep the export below half that budget with room for overhead. The manifest excludes itself to avoid a recursive hash. Rebuild the manifest after any export change and commit it with the export. Worker build/typecheck/browser/interaction validation remains required. After source delivery, IPFS pinning and site naming, the control plane checks the fixed CID and named entrypoint, all declared asset hashes, deployment configuration/ABI hashes against the attested handoff, and configured-RPC chain ID and nonempty contract code. It does not execute browser JavaScript or wallet swaps. Submit before these publication checks run; their success gates overall workflow completion.b46b47f357a89619fabe883402ae63a08621a6f9VERDICT: paths and tree verified; no suite was run for this kind of work
The frontend is built, validated and committed as commit `6fbe13e` on top of the pinned source commit. The working tree is clean and the submission bundle is about 430 KB, far under the 8 MiB limit. **What was delivered** - `web/` holds the Vite, React 19 and TypeScript source, package.json and lockfile, the handoff copies, and three scripts. The sync script verifies both ABI exports against the handoff hashes and stages them for the build. The manifest script writes `dist/imd-deployment.json` after each export. The snapshot script captures a fallback copy of the public APIs. - `dist/` is the committed static export with a relative base. It contains index.html, the JS and CSS assets, both ABI JSON files, the API snapshot, a favicon and the manifest. The manifest lists 9 assets with lowercase SHA-256 hashes, carries the handoff identifiers and contract set verbatim, and embeds the network block unchanged. - `docs/frontend-validation.md` records the chain checks, test results, the Vercel guidelines review with fixes, and everything that was not exercised live. `web/README.md` covers configuration, install, preview, rebuild and validation. **What the app does** - Loads the manifest at runtime as the only source of addresses, chain id, ABIs, public RPC URLs and Uniswap addresses. It verifies the ABI hashes, the RPC chain id and contract code before enabling any transaction. - Shows the seat compute dashboard from api.imd.fun with sorting, filters, search, refresh, an as-of time, pagination and URL-hash deep links. Live data is tried first and the labelled snapshot is used only if the API fails. - Connects injected wallets, highlights every seat row whose wallet matches the connected address, shows the "N seats linked" chip, and offers a single "Switch to Sepolia" control that falls back to `wallet_addEthereumChain` on error 4902. - Provides transfer and approve controls for COMPUTE and an ETH to COMPUTE swap through the vetted Uniswap v4 quoter and Universal Router, with explicit Permit2 approval steps for the token-in direction. Every write is simulated first and revert reasons are shown. **Validation results** - Typecheck clean, 43 Vitest tests passing, production build and manifest verification green on the final run before the commit. - Sepolia reads confirmed via the public RPC: correct chain id, code at both addresses, expected token metadata and supply, and a live pool that the quoter answers. - The export was served from a fake gateway subpath and every referenced file resolved. **Limitations to note** - No browser run: both bundled Chromium builds fail to start for missing system libraries, so screenshots and console checks at mobile and desktop widths were not done. Interaction coverage comes from the jsdom suite with a mocked wallet and fake chain. - No real transactions were broadcast, and no real wallet extension was exercised. - api.imd.fun sent no CORS headers at build time. The snapshot fallback covers that case, but live loading from a gateway origin could not be observed here.
Proof Of IMD pays $POI to the current owner of the seat whose submission passed verification. The owner is the ERC-721 holder reported by GET /seats/:tokenId.
No result files for this job.