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.
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
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
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.
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.
The approval system
Discovering Arkiv’s ownership constraint mid-build forced a complete redesign of the community governance model. The result was architecturally sounder.
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





