Welcome to the people who've joined since last article!
Thank you to those of you that collect my writings, it helps me out and keeps me going!
Grateful to all 337 folks for reading, hope you have a wonderful week!
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:
1. POAP Lookup
2. Convert Wallets to Farcaster FIDs
Use the Neynar SDK/API:
GET /v2/farcaster/user/bulk-by-address
.Match wallets to their Farcaster user profiles.
3. Generate the Invite Allowlist
Compile eligible Farcaster IDs for channel invites.
Use the allowlist to enable interactive invite flows via Farcaster frames (Frog.fm).
4. Deliver Invites
Post a frame for invite interactions.
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 during Devcon.
If a user isn’t on the allowlist, redirect them to joining instructions.
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 & 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
Follow the repository README:
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.
The JOIN NOW link is the Warpcast invite link which opens to:
If their FID is not on the allowlist, they receive a link inviting them to join an alternate way.
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.xyz and other channels could integrate these new Warpcast features, creating even smoother pathways for user participation.
If you enjoyed this,
Please subscribe
Give me a shout on Farcaster!
Share this post with someone who will enjoy it!
Thank you to cameron, benadamsky, samuellhuber, kevinoconnell, and links for feedback.