Category

Product Design · Web3

Year

2026

Swiftly

A Web3-native event platform built on Arkiv where events, communities, and attendance records live on-chain.

Overview

The Problem

Event platforms like Luma and Eventbrite are centralized and siloed. Organizers don't own their data, attendance records disappear, and communities have no on-chain identity.

Agora flips this: every event, RSVP, and attendance record is a permanent, verifiable entity on Arkiv.

The platform covers the full lifecycle:

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.

Brand Identity

The identity was developed as part of a hackathon, working from the competition rules and a clear visual direction: a platform that felt native to the crypto ecosystem without looking like generic Web3.

Rather than designing every screen before building, the workflow combined Figma for identity definition and key screens, Figma MCP for automatic specs, and Claude Code for component generation — iterating in Cursor as the product took shape. The brand decisions came first and informed every UI choice from there.

The first functional version focused on getting the on-chain logic working — a raw but real proof that the architecture held up.

From there, the visual identity was defined and applied across the entire product — same logic, completely different feel.

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 — 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.

Demo

Stack

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