Proyect Type

Product Design · Web3 · AI-native workflow

Year

2026

Agora — Decentralized Event Platform

A Web3-native event platform where I designed in Figma, then directed Claude Code to ship it. Events, communities, and attendance records live permanently on-chain.

Overview

Agora is a crypto-native event platform built on Arkiv, where events and communities live on-chain, owned by their creators forever. Discovery, RSVPs, community pages, an organizer dashboard, and wallet-native identity cover the full lifecycle from one platform.

ATTENDEES

Event Discovery

Browse and search crypto events with filters by status, type, date, and location. Grid and list views with color-coded event cards.

ATTENDEES

On-chain RSVPs

RSVP with your wallet. QR ticket generation for check-in. Attendance verification with QR scanner. All records stored on Arkiv.

AI-POWERED

AI Luma Import

Paste a Luma URL and Claude API auto-fills event details, categorizes the event, and suggests relevant communities. 3-strategy fallback chain.

COMMUNITIES

Community Pages

Communities with event calendars, subscriber lists, event approval systems, and custom branding. Community leaders curate their own events.

ORGANIZERS

Organizer Dashboard

Create events with on-chain storage, manage status (upcoming → live → ended), scan QR codes for attendance verification, handle event submissions.

IDENTITY

Wallet-native Identity

No passwords. Your wallet is your profile. Event history and community memberships become part of your permanent on-chain identity.

The Problem

Luma and Eventbrite are centralized and siloed: organizers don't own their data, attendance records disappear, communities have no on-chain identity. Agora flips that. Every event, RSVP, and attendance record is a permanent, verifiable entity.

How I worked

Rather than designing every screen before building, I combined three tools into one loop: Figma for identity and key screens, Figma MCP to generate specs automatically from those screens, and Claude Code to generate the components, iterating live in Cursor as the product took shape. Brand decisions came first and informed every UI choice from there.

The first working version was raw on purpose. It proved the on-chain architecture actually held before any polish went in.

First functional version. Proof the on-chain logic worked, before any visual polish.

Brand Identity

Developed during a hackathon, working from the competition rules toward one clear direction: a platform that felt native to crypto without looking like generic Web3.

Design Decisions

Entity Architecture as UX

The data model directly shaped the UI. With 8 entity types (Event, Community, Profile, RSVP, Waitlist, Attendance, Subscription, and Approval), each with rational expiration dates, I had to design flows that felt simple on the surface but respected complex ownership rules underneath.

The hardest example: the approval system. In Arkiv, only entity owners can modify their own data. This meant community leaders couldn't simply "approve" an event by updating its status, since they don't own that entity. The solution was redesigning approvals as separate entities created by the community leader's wallet. This constraint actually produced a better, more decentralized design.

ENTITY

DESCRIPTION

EXPIRATION

KEY ATTRIBUTES

Event

Community events with metadata

Event date +30d

organizer, community, status, type, slug

Community

Groups that curate events

365d renewable

communitySlug, organizer, address

Profile

User identity and preferences

365d renewable

address, subscriber

RSVP

Event registration

Event date +30d

eventId, attendee

Waitlist

Overflow registration

Event date +30d

eventId, attendee

Attendance

Verified check-in record

10 years

eventId, attendee

Subscription

Community membership

365d renewable

communitySlug, subscriber

Approval

Community event approval

Event date

eventId, community, status

Approval

Community event approval

Event date

eventId, community, status

Wallet-Native Identity

No passwords, no profiles to fill out. Your wallet is your identity. Every write operation verifies chain ID and wallet ownership. The UI had to make this feel seamless: connecting a wallet should feel like logging in, not a crypto interaction.

AI-Powered Luma Import

To lower the barrier for organizers already using Luma, I built an AI enrichment flow: paste in a Luma URL, and Claude automatically extracts event details, categorizes the event type, and suggests relevant communities. This took handling three different data formats (JSON-LD, NEXT_DATA, OpenGraph) depending on the event, so we built a 3-strategy fallback chain.

Event Card System

Designed a flexible card component that handles events with and without cover images, multiple status states (Upcoming, Live, Ended), and category tags, all while maintaining visual hierarchy across a masonry grid.

The component system was designed in Figma first: exploring card variants, status badges, and layout states before implementation.

Hard Problems

01

01

Shared testnet signal/noise

Agora shared the testnet with other apps, so events from other projects appeared in queries. Had to identify 3 different entity schemas and filter by Agora-specific fields.

02

02

Wallet address case sensitivity

Checksummed vs lowercase addresses caused queries to silently return empty results. This took hours to debug and led to a defensive normalization layer throughout the codebase.

03

03

The approval system

Discovering Arkiv’s ownership constraint mid-build forced a complete redesign of the community governance model. The result was architecturally sounder.

04

04

The Luma import

Three different data formats, one fallback chain. Building resilient parsing for a third-party site with no API is messier than it sounds.

Outcome / Status

Agora is live on Arkiv's testnet. When the network migrated endpoints mid-project, I diagnosed the break and shipped the fix myself, a small example of owning a project end-to-end past the design handoff.

Demo

Stack

Next.js 15 · TypeScript · Tailwind CSS · Arkiv SDK (Kaolin testnet) · Wagmi · Viem · Anthropic Claude API · QR code generation + scanning · Vercel