Selected work

IQ.Wiki

The world's largest blockchain encyclopedia, anchored on-chain.

sheet 01 · 2024–Now

Frontend Engineer

iq.wiki

IQ.Wiki interface

iq.wikiNext.js 15 · React 19 · GraphQL · TanStack Query · wagmi

01 · brief

Thousands of articles in three languages, each stored as JSON on IPFS with its hash committed to Polygon. The problem is encyclopedia-grade SEO on per-request rendering: three locales that can never fork, wallet publishing ordinary people can use, and search that answers before you finish typing.

Architecture, and why

  • Tag-based caching over pre-building

    An on-chain revision fires a webhook that purges exactly that wiki, its sub-pages and the homepage, in all three locales.

  • Parallelize, then degrade gracefully

    Token stats, NFTs, ratings and explorers fan out under their own Suspense boundaries, so a slow subsystem costs one widget.

  • Typed GraphQL, end to end

    Queries type-check live against the introspected schema with no codegen, and every request aborts at ten seconds.

  • One auth hook, two worlds

    RainbowKit for crypto natives, Web3Auth social login for everyone else, unified behind a single useAuth().

  • A catch-all route instead of a redirect table

    Unknown slugs resolve at request time to a wiki, a wallet address or a 404, replacing an unmaintainable redirect map.

Engineering highlights

  • Search that answers first

    Ghost-text autocomplete runs off a cached Gemini call while an AI panel streams its summary, fenced against stale streams.

  • Gasless on-chain publishing

    Pin, sign EIP-712, relay to Polygon, await receipt, poll ingestion. The contributor anchors provenance without holding gas.

  • An agent takes the suggestions

    Wiki suggestions run through a tool-calling agent that checks the catalog for duplicates and scores crypto-relevance.

  • SEO as a system

    Typed JSON-LD graphs, per-locale canonicals, production-gated indexing and a proxied backend sitemap.

  • A caching rule learned in production

    A cached function must throw on failure, or a swallowed error gets memoized as good data for the whole window.

  • Spot the Logo, an arcade game in the footer

    Logos pixelate and resolve on canvas, the soundtrack is synthesized in Web Audio, and it all loads only on intent.

04 · impact

3
languages served from one routing layer
72k
lines of TypeScript
Top 3
contributor on a 5,000-commit codebase

next sheet

Sophia Editor

The AI editor behind the world's largest blockchain encyclopedia.