We had 2,200 members on Meetup and couldn’t email a single one of them.
Why We Stayed as Long as We Did
Meetup was our first home, and the biggest thing it got right was discovery. People find groups on Meetup the way they find restaurants on Yelp. They’re not searching for you, they’re searching for something like you, and Meetup puts you in front of them. That’s how UX Research Atlanta grew. During COVID, when in-person was off the table and everyone was searching for community online, Meetup kept bringing new people in. Most of our members found us that way.
The idea for UX Research Atlanta was hatched over lunch with Zach Pousman, my co-organizer, back in 2018. The decision to leave Meetup was made the same way, over lunch, just the two of us. It took about ten minutes, not because we were hasty, but because the reasons were already clear. That’s how we run the group: small leadership team, no committee, no approval process.
Why We Left
We were dealing with performance issues, unreliable notifications, and price increases for features that didn’t benefit us. We run UX Research Atlanta without outside funding: events are free, organizing is volunteer work. You feel those tradeoffs differently when you’re paying out of pocket for a platform that keeps asking for more.
Members were telling us they weren’t getting event reminders, and Meetup’s messaging platform looked like it hadn’t been touched in years. Any time someone messaged me through it I moved the conversation to email as fast as I could.
When we started thinking about migrating, we assumed we could export the member list, including emails, and bring it with us. That’s not how it works. Meetup doesn’t include email addresses in their member export, and neither does their API. Upgrading to Pro only gets you emails from future RSVPs, not the people already in the group. We didn’t own our audience. Meetup did. We were just renting it, and that’s the part that settled it.
What I Built
I’m a UX researcher, not a full-time developer, so I used Claude Code for the heavy lifting on the coding, design, and integrations. The result is uxratlanta.com, built on Astro v5, deployed via Cloudflare Pages, with Cloudflare Workers, Cloudflare KV, Resend for email, and Luma for RSVPs.
The site does everything I need it to do, and a few things Meetup probably never would:
A homepage on my own domain with a live upcoming event card, a full past event archive with 50+ events documented, a photo gallery (160 photos pulled from Meetup at full resolution), and a mailing list signup.
Individual event pages with shareable URLs, venue details linked to Google Maps, RSVP counts pulled live from Luma, and share buttons for LinkedIn, X, Slack, and Teams.
My own email infrastructure: Cloudflare Workers + Resend handles signups, Cloudflare KV stores subscribers, and when someone joins the list they get a confirmation email I control.
I kept Luma as the RSVP tool. It’s free, the attendee experience is clean, and nothing I evaluated came close for that specific use case. Tinyclub didn’t fit. Eventbrite is now owned by Bending Spoons, the same company that owns Meetup, so that wasn’t a direction I was willing to go. That said, I don’t love Luma and I’m still looking for a better solution. I may end up building my own.
What Was Harder Than Expected
Kit didn’t work out. I tried Kit (formerly ConvertKit) for email first. Too much overhead for a simple signup and confirmation flow, so I scrapped it and built the email layer myself with Cloudflare Workers and Resend. That took longer, but I own it now.
The member list problem has no clean solution. I sent a broadcast message before closing the group on Meetup: here’s where we’re going, here’s the next event, come find us. The list I built from that is smaller, but it’s ours. 2,200 was partly a vanity number. A lot of those people joined years ago and never came back. We have fewer members, but more engagement. That was the trade I made.
Photos and event details are a lot of content to migrate. Every event needed a unique URL, a description cleaned of formatting issues, and a one-line preview summary. The photos had to be pulled from Meetup at full resolution before access was gone. That’s not hard work, but it took a bit to get it right. Claude helped make it quick.
Meetup’s discovery engine is the hardest part to replace. Luma has its own discovery network that surfaces events to people browsing by category and location, and our site is built for SEO so people searching for UX communities in Atlanta can find us. For organic reach, we’re leaning on word of mouth: each event page has a LinkedIn share button so attendees can post directly and bring their own networks in. There’s also an llms.txt file that makes the site readable by AI search tools. Someone asking an AI assistant for UX research communities in Atlanta should be able to find us.
What’s Better Now
No more algorithm deciding who sees the next event post. Members who opt into the list get the email. No more paywalls to see who’s actually attending events. The site reflects the community, not Meetup’s template, with our actual branding and a photo archive that’s open to anyone, not locked behind a login.
We own the member data now. If I ever want to move the email list to a different tool, I can export every address and take it with me. And if Meetup changes its pricing model again, gets acquired, or shuts down a feature I relied on, none of that touches us.
You spend years building a community. You should own it.
If you’re running a community group and running into the same problems, I’m happy to talk through what the migration looks like. It takes planning, but it’s worth it. Let’s talk: cal.com/mattwallens. And if you want to see what we built, check out uxratlanta.com.