Build and publish a complete English React/TypeScript website for EXISTING UNLOCK (UNLK), Sepolia launch 1560, parent job 407c3cbb-d967-4666-99e6-0ab7139c141f. Use the project's latest accepted source and verified ABIs. Scope: frontend, live data, tests, GitHub and IPFS hosting. Preserve deployed contracts; no new token/pool/deployment or mainnet transactions. This site does not modify IMD Explorer.

CONFIG: chainId 11155111; repo https://github.com/identity-md-launches/launch-1560-unlock, inspected commit ea89426f3fe9df79096a5e02345fc8821bd1c783; reconcile newer work. Token 0x20978223b637fec0c6276ab0184cf7011dd1d483; hook 0xbbb78a4898e903b082ccd09efc7823ca7339bfc0; router 0x28f04118fe5d940fe9a81740e74d611313b3004b; distributor 0xf55d5bacbf3ce5464921a94708c08a99bea99cdd. Discover and verify hook.rewards(), oracle(), poolKey() and reciprocal bindings from actual deployed code. Pool: native ETH currency0, UNLK currency1, fee 12500, tickSpacing 60, this hook. Existing public buy proof: https://sepolia.etherscan.io/tx/0x595a858a472215ec90b12ef0f30fa193daae4f17fa9ddb83269b6a1214e101ab . Sell/claim tests remain pending.

DESIGN: Distinctive, carefully composed, premium financial experiment. Deep ink, warm white, restrained cyan/champagne gold, precise tabular numbers, expressive typography, generous spacing and a custom geometric unlock/diamond emblem. Subtle brand line: "Diamond hands. Transparent rules." Never imply guaranteed returns or pressure users to hold. Avoid generic AI copy, template card walls, cartoon coins and excessive glow. Editorial homepage plus polished trading workspace. Responsive mobile-first, accessible contrast/keyboard/focus/touch targets and reduced motion. Natural concise English, explain terms beside numbers. Always visibly label "Sepolia testnet - test assets, no real monetary value".

SECTIONS: Home/experiment and verified progress; Trade; My Unlock; Milestones/scenarios; Holders/activity; How It Works/FAQ; Contracts/Transparency. Public pages work without a wallet. Mainnet plans may include more tiers/higher targets, but values/date are undecided and not current rules.

MY UNLOCK: Read W=balance, E=eligible(wallet), S=sold(wallet), p, tier and fullyUnlocked. Before full unlock Q=max(0,floor(E*p/10000)-S), C=min(W,Q). Show C as "Within your current sell allowance", W-C as "Outside your current allowance", never escrowed/locked. Full unlock C=W for everyone; do not display max-uint remainingQuota. Execution also depends on liquidity, fees, approvals and pending trades. E credits authenticated official buys, proven payer allocation and synchronized proven native claims. Ordinary transfers/donations/liquidity never move/create/reset E or S. Transfer-only E=0 holders cannot sell here before full unlock. Use BigInt and exact units.

MILESTONES: Initially 25%; verified USD FDV $100K:35%, $250K:45%, $500K:55%, $1M:70%, $2.5M:85%; $5M permanently removes quotas, including transfer-only holders. Falling prices never revoke rights. Separate achieved tier, current FDV and pending confirmation. Interactive future scenarios hold W,E,S fixed: C_r=min(W,max(0,floor(E*r/10000)-S)), increase over current C; final scenario uses W. Clearly label hypothetical results; avoid negative comparisons for achieved tiers. Include a worked numerical explanation of cumulative acquisitions and used quota.

ORACLE: Use deployed constants/state, fdvUsd(), observations, qualifyingSince and lastConfirmation. Distinguish indicative spot price from verified milestone FDV; invalid data is unavailable, never zero. Current rules: 2h TWAP/warm-up, 5m checkpoint freshness, 90m ETH/USD freshness, sequential 6h confirmations, 24h final confirmation, 4m minimum interval, 10m maximum valid-confirmation gap. Show real progress/reset/gap states, not promised dates or automatic unlock at timer expiry. Explain actual liquidity validation; seed quote capacity is not ETH reserves. Expose permissionless checkpoint/update actions with gas costs and explicit signing. A static site does not maintain observations when nobody calls. Invalid data blocks new tiers, not earned rights or otherwise valid trades. Targets may never occur.

SWAP: Use ONLY the bound UnlkSwapRouter, not IMD's generic quoter/Universal Router with empty hookData. Simulate the actual swap from the connected trader; support Buy/Sell, correct currency order/price bounds, exact fees/deltas, partial fills, selected slippage, minOutput/maxInput and deadline. Re-simulate/estimate gas before signing and invalidate stale quotes. Buy spends test ETH; sell approval is directly to this router for the needed amount. Handle missing allowance quote prerequisites honestly. Show spender/approval amount, expected/minimum receipt, trading fee and gas. Track rejection/revert/pending/confirmed receipts; never automatically resend. router.nativeCredit(wallet) contains sale proceeds/unused buy prefunding: show ETH available to withdraw and provide withdrawNative(), not a false claim of immediate wallet ETH delivery. Connection triggers no signatures/approvals/trades. Support MetaMask/Rabby discovery, correct network/account changes and actual direct-route smart-wallet compatibility.

REWARDS: Verify IMD proofs against native distributor roots, amounts, claimed/swept flags and release times. Separate unclaimed entitlement, native claims, evidence attestation and pending quota credit. Native claim is independent of credit synchronization. Implement verified claim -> evidence.attest -> hook.syncRewards as separate recoverable steps, with deduplication; show syncPayer if applicable. Uncertified rounds need the actual certification process, not invented claims or bypasses.

DATA: Real 1B supply/18 decimals, 10/87/3 allocation, price/FDV, pool-specific liquidity and principal-protection evidence, 1.25% pool fee (1% payer/0.25% IMD), zero extra hook fee, oracle health, rewards, holders and activity. PoolManager's total token balance is not this pool's reserves. Implement verified event indexing, current balances and pagination: holder count means nonzero-balance addresses excluding zero address; label infrastructure and distinguish wallets from people. Holder rows show address, balance, supply share and verified allowance status when available. Chart prices/volume/history only from real covered events. Provide block/time, freshness, partial-history and unavailable states; refresh on blocks/receipts/account/network changes, cache and use read-only RPC fallback. Any necessary data service must be public and working, not a placeholder.

EXPLAIN: Quotas, transfers, fees, rewards, ETH withdrawal, immutable setup and permanent unlock in clear FAQs. Disclose official-pool scope/other-pool bypass, sustained-price manipulation, protocol-fee-triggered halt and treasury reward-round powers. No safety/return guarantees. Link actual contracts, source/ABIs, PoolKey/PoolId and review findings; substantiate audit claims.

TEST/DELIVER: Test wallet arithmetic against contract

Published · Site

site
unlk.site.identitymd.eth · an earlier version, since replaced
ipfs
bafybeiaukcyc4kfjvxeprtknwkmnhtzjsusnimqjdrqlq2j2brctljbf3y · 1.4 MB
source
identity-md-launches/launch-1560-unlock · pull request

Work

  1. Posted1 h 25 minto the first attempt
  2. Build websiteAgent #70111 files changed

    Implemented the site with complete static export, source, lockfile, README, and design documentation.

    Build/typecheck, 8 frontend tests, 66 Solidity tests, wallet/recovery checks, and 16/16 design checks passed. Submission files total 7.08 MiB, below 8 MiB.

    The export is ready for contributor GitHub/IPFS publication. No transactions were broadcast. Public sell/full reward-flow execution remains unverified; WebKit testing failed to initialize its EGL display.

    Not delivered: artifacts/allowance-vectors.json, artifacts/browser-validation.json, artifacts/chain-verification.json, artifacts/live-interactions.json, artifacts/recovery-validation.json, artifacts/rpc-check.json, artifacts/submission-check.json, artifacts/swap-math-vectors.json and 3 more. Under artifacts/, only this step's named outputs leave the machine.

    ran oncodex · gpt-6-astra · 15 turns · 1h 25m · 401.8K in · 131.2K out · 15.1M cached
    submissiond179ef9d7c0ea07bff5592774b6af49f2ef69cec1a020c4002e76275485565be
    device2fe9efd0790ef9c3323e4e47b30b504ff55bde22a27d795a26ed932f20804cf0
    started fromea89426f3fe9df79096a5e02345fc8821bd1c783
    bundle588eb17ec7961b0e14b856fbaaa33aa1ed6d5efe9bb3d2bfdf75a77ca0566d5f · 569 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 111 files
    DESIGN.mdREADME.mddist/abi/IChainlinkEthUsd.jsondist/abi/MerkleClaimEvidence.jsondist/abi/MerkleDistributor.jsondist/abi/UnlkHook.jsondist/abi/UnlkOracle.jsondist/abi/UnlkSwapRouter.jsondist/abi/UnlkToken.jsondist/assets/ccip-DCdxdwwE.jsdist/assets/dm-sans-latin-Xz1IZZA0.woff2dist/assets/index-BIDv8drv.jsdist/assets/index-D2ATNe5F.cssdist/assets/index-mBUSrEXk.jsdist/assets/instrument-serif-italic-latin-DKMiL14s.woff2dist/assets/instrument-serif-latin-DnYpCC2O.woff2dist/evidence/allowance-vectors.jsondist/evidence/browser-validation.jsondist/evidence/chain-verification.jsondist/evidence/design-probe.jsondist/evidence/live-interactions.jsondist/evidence/native-claim.jsondist/evidence/recovery-validation.jsondist/evidence/round-0.jsondist/evidence/rpc-check.jsondist/evidence/submission-check.jsondist/evidence/swap-math-vectors.jsondist/evidence/test-results.txtdist/evidence/validation.mddist/evidence/wallet-validation.jsondist/favicon.svgdist/fonts/DM-Sans-OFL.txtdist/fonts/Instrument-Serif-OFL.txtdist/index.htmldist/share.pngdist/share.svgdist/wallets/metamask.svgdist/wallets/phantom.svgdist/wallets/rabby.svgweb/NOTICE.mdweb/index.htmlweb/licenses/design-guidance.txtweb/package-lock.jsonweb/package.jsonweb/public/abi/IChainlinkEthUsd.jsonweb/public/abi/MerkleClaimEvidence.jsonweb/public/abi/MerkleDistributor.jsonweb/public/abi/UnlkHook.jsonweb/public/abi/UnlkOracle.jsonweb/public/abi/UnlkSwapRouter.jsonweb/public/abi/UnlkToken.jsonweb/public/evidence/allowance-vectors.jsonweb/public/evidence/browser-validation.jsonweb/public/evidence/chain-verification.jsonweb/public/evidence/design-probe.jsonweb/public/evidence/live-interactions.jsonweb/public/evidence/native-claim.jsonweb/public/evidence/recovery-validation.jsonweb/public/evidence/round-0.jsonweb/public/evidence/rpc-check.jsonweb/public/evidence/submission-check.jsonweb/public/evidence/swap-math-vectors.jsonweb/public/evidence/test-results.txtweb/public/evidence/validation.mdweb/public/evidence/wallet-validation.jsonweb/public/favicon.svgweb/public/fonts/DM-Sans-OFL.txtweb/public/fonts/Instrument-Serif-OFL.txtweb/public/share.pngweb/public/share.svgweb/public/wallets/metamask.svgweb/public/wallets/phantom.svgweb/public/wallets/rabby.svgweb/scripts/check-allowance-math.tsweb/scripts/check-browser.mjsweb/scripts/check-recovery.mjsweb/scripts/check-swap-math.tsweb/scripts/check-wallet.mjsweb/scripts/inspect-claim.tsweb/scripts/verify-chain.tsweb/scripts/verify-live-interactions.tsweb/src/App.tsxweb/src/Rewards.tsxweb/src/Trade.tsxweb/src/abis/IChainlinkEthUsd.jsonweb/src/abis/MerkleClaimEvidence.jsonweb/src/abis/MerkleDistributor.jsonweb/src/abis/UnlkHook.jsonweb/src/abis/UnlkOracle.jsonweb/src/abis/UnlkSwapRouter.jsonweb/src/abis/UnlkToken.jsonweb/src/assets/fonts/dm-sans-latin.woff2web/src/assets/fonts/instrument-serif-italic-latin.woff2web/src/assets/fonts/instrument-serif-latin.woff2web/src/charts.tsxweb/src/components.tsxweb/src/config.tsweb/src/data.tsxweb/src/indexer.tsweb/src/live.tsweb/src/main.tsxweb/src/math.tsweb/src/pages.tsxweb/src/rewards.tsweb/src/storage.tsweb/src/styles.cssweb/src/verified.jsonweb/src/wallet.tsxweb/tests/math.test.tsweb/tsconfig.jsonweb/vite.config.ts
  3. Design criticAgent #1010found 2 medium
    AreaResult
    Requirements85 grouped checks: 81 met, 2 missing, 0 faked, 2 after review, 0 needing requester input
    Broken features1 error-state defect
    First screenPass: product and main action visible at 390×844
    taste@116/16 passed
    Copy1 finding
    Share cardPresent: 1200×630 image and required metadata

    Saved two medium findings, with exact source snippets and concrete reproductions, to .imd-findings.json. No high or critical defects found. Website files remain unchanged.

    • Fidelity: the sell percentage is labelled as an acquisition allowance. The live 25% readout and wallet ledger use acquisition terminology. Rename these labels to describe the sell allowance rate.
    • Bug: failed initial RPC reads appear as empty history. Blocking all three RPCs produces “Loading,” “No records” and zero matching addresses despite unavailable data. Show unavailable states until an interval has actually been read. Restoring access and retrying recovered three holders and one swap.

    Eight arithmetic/proof tests passed. Independent live checks matched three holder quotas, three buy simulations and all 459 reward proofs. All seven routes passed automated accessibility checks at 390px; 56 browser/width combinations had no horizontal overflow. WebKit rendered and supported the tested controls, but its live reads were limited by missing TLS support in this machine’s browser runtime. No public transaction was signed.

    UNLOCK is a Sepolia sell-allowance experiment carried visually by a precise geometric diamond and restrained editorial typography.

    The requirement coverage below uses filenames relative to web/src/ unless stated otherwise. “Met” denotes inspected implementation and supporting evidence; it does not claim public execution of unsigned transactions.

    #RequirementStatusEvidence
    1“complete English React/TypeScript website”Metmain.tsx, App.tsx
    2Existing UNLOCK, launch 1560 and specified parent jobMetconfig.ts; Contracts page
    3Latest accepted source, verified ABIs, reconcile newer workMetRemote HEAD matches ea89426…; token/hook ABI hashes independently match
    4Frontend, live data and testsMetweb/src/, web/tests/, web/scripts/
    5GitHub hostingAfter reviewPublishing handoff in README.md; dist/
    6IPFS hostingAfter reviewRelative assets and hash routes in dist/
    7Preserve contracts; no new token/pool/deployment or mainnet transactionsMetSolidity/configuration unchanged; read-only review
    8Do not modify IMD ExplorerMetSeparate website implementation
    9Specified chain, repository, commit and four addressesMetconfig.ts; live binding verification
    10Discover rewards, oracle, PoolKey and reciprocal bindingsMetlive.ts, verified.json
    11Native ETH/UNLK, fee 12500, spacing 60, specified hookMetExact PoolKey validation in live.ts
    12Existing buy proof; pending sell/complete claim-flow evidenceMetHome progress list; discovered native claim distinguished from complete flow
    13Distinctive, composed premium financial experimentMetInspected Home and Trade composition
    14Ink, warm white, cyan/gold, tabular numbers, typography, spacing, emblemMetstyles.css; components.tsx
    15“Diamond hands. Transparent rules.”MetHome and footer
    16No guaranteed returns or holding pressureMetHome, FAQs and footer
    17Avoid generic copy, card walls, cartoon coins and excessive glowMetInspected composition, copy and assets
    18Editorial homepage and polished trading workspaceMetHome; Trade.tsx
    19Responsive mobile-first layoutMet320/390/768/1440px browser checks
    20Accessib
    ran oncodex · gpt-6-astra · 9 turns · 17m 4s · 175.8K in · 31.6K out · 5.6M cached
    submissionf0254ed50d8f879008b55719f40b140628affd34b00888e027676469a1d3eee1
    device563355f47e653bac9febe4315b4a90741d0c8076b791c8d62fb688d8838e457f
    started fromb01b41bfdf20a20519c5902eda3d0677b7f2b6df
    bundlenone
    applied on588eb17ec7961b0e14b856fbaaa33aa1ed6d5efe9bb3d2bfdf75a77ca0566d5f
    • mediumfidelity: the sell-percentage is labelled as an acquisition allowanceweb/src/pages.tsx:72

      Now: The home readout calls p an "acquisition allowance"; My Unlock repeats "25% acquisition rate" and "p · Achieved acquisition rate". p limits cumulative sales from eligible acquisitions; it does not limit acquisitions or describe an acquisition rate.

      Change to: Use "Sell allowance rate" above the home percentage, "25% of eligible acquisitions" for the connected-wallet badge (derive the percentage from p), and "p · Achieved sell allowance rate" in the ledger. Keep the existing explanation that prior sales consume the allowance.

      Why: The brief requires concise English and terms explained beside numbers, and defines p as the percentage used in Q=max(0,floor(E*p/10000)-S). The prominent current labels name the wrong side of the trade.

      At 390×844 or 1440×1000, open /#/ and wait for the live readout.

      It displays "Current acquisition allowance" immediately above "25%" (verified p=2500, tier=0 at block 11912385).

      Open /#/unlock with read-only EIP-6963 account 0x48E4E74fE1d0c14404cEB57B9fec5b21329C6ec9: the badge says "25% acquisition rate" and the ledger says "p · Achieved acquisition rate", while the same page computes the sell allowance as 122,823.7479 UNLK from E=491,294.9918… UNLK and S=0.

      Expected labels describe the sell allowance, not an acquisition restriction.

      No signature or transaction is needed.

    • mediumbug: failed initial RPC reads are presented as empty historyweb/src/charts.tsx:48

      Now: If all RPCs fail before the first snapshot, history indexing never starts, so historyError remains empty. The trade chart says "No valid swap prices in the covered history"; Holders & activity simultaneously shows "Reading…", "Loading…", "No records available in the covered interval" and "0 matching addresses". The global error notice is correct, but these local states imply an empty dataset or continued initial loading although no interval was read.

      Change to: When no index/snapshot exists and d.error is set, display "Price history unavailable" and "Holder and activity data unavailable"; use "Unavailable" for the coverage/count summaries and withhold the zero-results pager until a dataset exists. Reserve the current empty-history messages for a successfully read interval with zero records. Reuse the existing retry control.

      Why: The brief explicitly requires freshness, partial-history and unavailable states; a first visitor must be able to distinguish a failed read from a verified absence of trading activity.

      At 390×844 (also applicable at 1440px), start a fresh browser context and abort requests to all three configured RPC hosts: ethereum-sepolia-rpc.publicnode.com, rpc.sepolia.ethpandaops.io and sepolia.rpc.sentio.xyz.

      In Playwright use context.route(/publicnode|ethpandaops|sentio/, route => route.abort("failed")), then load /#/activity.

      Wait for "Live reads interrupted." and another 3 seconds.

      Measured DOM: the coverage value remains "Loading…", the table says "No records available in the covered interval.", and the pager says "0 matching addresses · page 1 of 1" while the data stamp says "Chain data unavailable".

      Navigate to /#/trade: its chart says "No valid swap prices in the covered history" instead of unavailable.

      No wallet is needed.

      Restore RPC access and retry: real data contains 3 holders and 1 swap, proving the failed-read state was not a verified empty result.

  4. Hostedan earlier versionsitenaming transaction
  5. Onchain2 receipts, 2 scoreson Ethereum mainnet
    receipt
    work accepted · transaction · record
    receipt
    site named · transaction · record
    scores
    written, with no entries recorded on it · block 26,258,829 · transaction
    scores
    2 scores for built, reviewed on structural, submission · all 2 passed · block 26,190,528 · transaction#70#1010