← All work

Case study · Blockchain / web3

Curator

A production Web3 data-curation platform for the Geo / The Graph ecosystem. Communities run bounties, host live video community calls, track attendance, and publish curated records on-chain to a decentralized knowledge graph, wrapped in a polished React app with wallet-based auth.

Role
Lead engineer & top contributor
Timeline
Oct 2025 – May 2026
Scale
~150K LOC · 889 files · 230 tests
Ecosystem
Geo / The Graph (GRC-20)
Curator live community call, colourful participant tiles for editors and members, with a participants panel and call controls
Live community calls (LiveKit), editors, members and watchers in one room, with recording and attendance tracking.
Curator pre-call green room, a scheduled community call join screen with microphone and camera device selection and audio/video toggles
The pre-call "green room", device checks and RSVP-linked scheduling before joining a call.
Curator design system, colour tokens (CTA, primaries, accents) and a full typography scale
The shared design system, colour tokens and type scale, documented in Storybook and consumed across every app.

Architecture

A pnpm monorepo of five apps

Two of them, rapporteur and rendezvous, are independently deployable microservices, repository-pattern abstracted (Neo4j now, Postgres-ready) and communicating over HTTP.

  • curator-frontend

    React 19 app with React Query, Tailwind v4 and a Storybook-documented design system (Base UI + Framer Motion). File-based routing, complex dynamic forms and custom hooks.

  • curator-backend

    Effect-TS Platform HTTP API over a Neo4j graph database. Repository-pattern abstracted, Postgres-ready.

  • rapporteur

    Autonomous on-chain publishing agent. Owns a smart-account and publishes to the GRC-20 knowledge graph as a space editor.

  • rendezvous

    Standalone calendar & RSVP service. Sends iCalendar (iMIP) invites over SMTP and ingests RSVP replies via an inbox webhook.

  • curator-metrics

    Standalone quality-metrics dashboard built with Recharts.

  • shared packages

    Transactional email, curator-utils and a shared design-system consumed across the apps.

What it demonstrates

Depth across the stack

Functional architecture with Effect-TS

  • Effect-TS across the stack, @effect/platform, @effect/rpc, @effect/sql, @effect/cluster, @effect/opentelemetry.
  • Strict TypeScript with exactOptionalPropertyTypes, branded domain types, Data.TaggedError typed errors and discriminated-union state.
  • Spec-driven backend workflow: instructions → requirements → design → plan → implementation.

Web3 & decentralized systems

  • GRC-20 on-chain publishing via the protocol SDK and @graphprotocol/hypergraph.
  • Smart-account abstraction with Permissionless + viem; Privy wallet authentication.
  • Designed and deployed a custom ontology, call events, attendance, post-call assets, with verified property / relation IDs.

Real-time & communications

  • LiveKit live video for community calls, including Krisp noise filtering and track processors.
  • iCalendar generation with stable updates, and a full RSVP round-trip, SMTP out, webhook in.

Frontend craft

  • React 19 with file-based routing and a shared design system (Base UI + Framer Motion) documented in Storybook with a11y addons.
  • Complex forms, a dynamic bounty editor with difficulty-based validation, and custom hooks such as usePollUntilFound.

Engineering rigor

  • Biome lint/format, full TypeScript project-references build, Vitest + @effect/vitest.
  • Playwright E2E with Privy test accounts, Knip dead-code analysis, Sentry, OpenTelemetry and coverage gating.

Role & context

Curator is a client / team project. I worked as lead engineer and its single largest contributor, over 1,200 commits across two identities, out of roughly 3,000 total, over a ~10-month span, alongside a small team of other contributors.

Building something on-chain?

Let's talk