Work Sample 1: Project Overview
Project Overview work sample for iSpeakNerd.
Work Sample 1: Project Overview
Project Name: POAP Channel Invite Tool
Project Context: I built a tool at Devcon 2024 that allows community owners on Farcaster to discover the holders of their POAPs on Farcaster and invite them to join their Farcaster channel. The blog article explains the development of the tool and provides an overview of how it works that is accessible for both technical and nontechnical audiences.
Project URL: POAP Invites Frame
Article URL: POAP-Powered Pathways to Participation reproduced below:
POAP Powered Pathways to Participation
TableTop.xyz, a Next.js app hosted on Vercel, gives out POAPs (Proof of Attendance Protocol) as engagement tools for onboarding board gamers onchain and to streamline user engagement in the /tabletop Farcaster channel. This guide explains how we implemented a POAP-based channel invite flow for new members, the lessons we learned, and how you can replicate the process.
Overview
Problem Statement
During events like Devcon, we distribute POAPs to attendees who verifiably play board games. However, we faced challenges in ensuring these participants could join the Tabletop channel:
- Many attendees hadn’t signed into the event platform (lu.ma).
- POAP holders lacked a direct invite flow to access the Farcaster channel.
- We had little way of associating the wallets with POAPs to users’ social identities on Farcaster.
Solution
We built a custom flow that transforms POAP claims into Farcaster channel invites. This flow:
- Retrieves wallet addresses that claimed the POAP via poap.tech.
- Matches these wallets to Farcaster FIDs using Neynar APIs.
- Creates an FID allowlist for invites.
- Delivers channel invites through a custom Farcaster frame.
Technical Components
- Poap.tech API: Handles POAP wallet lookups.
- Neynar SDK/API: Resolves wallet addresses to Farcaster FIDs.
- Frog.fm: Delivers interactive invites or redirects users via Farcaster frame.
- Next.js: API service that handles frame interactions on Warpcast to deliver invites to users.
Implementation Details
Architecture
We structured the solution into four main stages:
- POAP Lookup
- Query the poap.tech API:
GET /event/{id}/poaps
. - Collect wallet addresses holding the specified POAP.
- Query the poap.tech API:
- Convert Wallets to Farcaster FIDs
- Use the Neynar SDK/API:
GET /v2/farcaster/user/bulk-by-address
. - Match wallets to their Farcaster user profiles.
- Use the Neynar SDK/API:
- Generate the Invite Allowlist
- Compile eligible Farcaster IDs for channel invites.
- Use the allowlist to enable interactive invite flows via Farcaster frames (Frog.fm).
- Deliver Invites
- Post a frame for invite interactions.
- If a user isn’t on the allowlist, redirect them to joining instructions.
Invites could also be delivered via direct messages as a link for users to click, or as direct channel invites in Warpcast. We decided to go with the private invites in public offered by using frames to maximize attention for /tabletop channel during Devcon.
Flow Diagrams
Sequence Diagram:
Process Diagram:
We decided to use a public frame to leverage attention for /tabletop on Farcaster despite it being a more involved solution than private DMs.
Deployment
We shipped the first version of this flow during Devcon on November 17 on Vercel. This deployment revealed several key insights:
- Dynamic Image Generation: We encountered compatibility issues with dynamic image generation with Satori inside Frog. We ended up using static assets and plan to return to do dynamic images.
- Distribution Impact:
- Folks like to engage with frames! Comments boosted the cast and the frame cast got over 1k views despite it being a very simple 2 stage frame.
Challenges and Learnings
- Improving Invite Distribution:
- Wider Farcaster distribution increased visibility but didn’t significantly boost activity.
- Understanding User Preferences:
- Users preferred standalone posts for invites over nested comments.
- Optimizing Dynamic Frames:
- We needed to fine-tune dynamic frame generation for reliability.
Open Source Code
I open-sourced this implementation so others can make their own version and innovate on the idea:
- View the announcement cast on Farcaster.
- Source code on GitHub.
How to Use:
- Refer to the GitHub README for step-by-step instructions, examples, and configurations specific to the implementation.
Live Demo
Check out the frame in action:
- Channel Invite Frame on Farcaster.
Invite Frame Screens
The invite frame looks like this:
- Start frame entrypoint
- Split viewers if their FID is on the allowlist or not.
- If the viewer’s FID is on the allowlist they receive the invite link.
- If the viewer’s FID is not on the allowlist they receive a link inviting them to join an alternate way.
- The “Ways to join” link opens to another cast:
Epilogue: Warpcast’s User Onboarding with Channel Invites
Since implementing this POAP-based invite flow, Warpcast introduced a streamlined channel invites for new users feature. This update improves how communities onboard new members by simplifying the process:
- Gift Farcaster Accounts: Send an invite that creates a new Farcaster account.
- Pre-Select Channels: Ensure new users automatically join specific channels as part of the onboarding.
- Share Seamlessly: Generate a link or QR code, eliminating the need for outdated email flows.
- Improved Claim Flow: Users can now redeem their invite with a code, further optimizing the onboarding experience.
This innovation expands opportunities for community growth while removing barriers to entry. Future iterations of the POAP invite flow for /tabletop and other channels could integrate these new Warpcast features, creating even smoother pathways for user participation.