Crypto

    Vibe Coding POAP2RSS

    Ever since I created my first POAP drop I’ve wished that I could see claims of POAPs in Feedbin. What a great way to keep informed of the tokens that people are claiming! As I created more POAPs I realized that I also would like to subscribe to other people and see what POAP events they are claiming. And as I played around more with them I realized it would be so useful to be able to hook POAP claims up to automation platforms like IFTTT, Zapier, or Make β€” all of which support RSS out of the box!

    I’ve been going deep on all things AI and I wanted to experience vibe coding for real versus just reading blog posts about others doing it. I’m a big believer in playing directly with tech to learn it. So, why not try creating the thing I’ve always wanted with POAPs by vibe coding it?

    I’ve now successfully created, and already an extensive user of, POAP2RSS! This simple service allows you to subscribe to RSS feeds for POAP events as well as addresses of collectors. It is magical and I love it already!

    In the spirit of vibe coding let’s ask AI what it is.

    What is vibe coding?
    Vibe coding is a modern approach to software development that emphasizes creativity and collaboration with AI tools. It involves expressing coding intentions in plain language, allowing AI to transform these ideas into executable code, often without deep technical knowledge from the user. This method focuses on maintaining a creative flow and minimizing micromanagement in the coding process. The term was popularized by AI researcher Andrej Karpathy and is gaining traction as a way to democratize coding and make it more accessible to non-programmers. Karpathy IBM Willison

    Let’s go! πŸ”₯

    Vibe Prototyping

    First I’m going to share that I only realized I was prototyping a solution in retrospect. What I really did was go to Claude and start a new conversation.

    Please create a Python function to run in AWS Lambda that will retrieve the list of collectors for a comma separated list of POAP Event ID's and then merge them into a single RSS feed. The items in the feed should include information for each token minted.
    I'll create a Python function for AWS Lambda that retrieves POAP collectors and generates an RSS feed. This will use the POAP API to fetch token information and create a properly formatted RSS feed.

    It created a new artifact and put about 250 lines of Python code in there. Voila! Now what?

    Let me qualify my skills here. I can bang around in most languages reasonably well. I can navigate Python the best. I can read code very well. I’m pretty basic when it comes to writing it. I’m a solid scripter but can quickly get out of my league. This Python code was better than anything I could do but I was able to navigate it easily enough.

    But what do I do now? I have an AWS account and have setup S3 buckets. I’ve never setup a Lambda function though. Let the vibes flow…

    How do I setup the Lambda function?
    I'll guide you through setting up the Lambda function step by step. Here are the complete instructions:

    I got another artifact now with step-by-step directions on what to do in the AWS Console. Brilliant!

    I followed the directions and then actually ran a test, which Claude told me how to do.

    I ran this with a known valid event_id and I got this error:

    { "statusCode": 404, "body": "{\"error\": \"No tokens found for provided event IDs\"}" }
    The issue is likely with the POAP API endpoint or authentication. Let me search for the current POAP API documentation to see what's changed.
    …
    Great! I found the issue. The POAP API now requires API keys for authentication, and the endpoint documentation shows that you need to include the header X-API-Key={apikey} where {apikey} is your unique API key. Also, the correct endpoint for getting event tokens is /event/{id}/poaps which returns paginated info on the token holders including the token ID, POAP transfer count, and the owner's information like address, amount of POAPs owned, and ENS.

    Claude and I went back and forth like this for a while with me running the Lambda, an error coming back, me sharing the error back to Claude, it making updates and me applying those. And then…

    it worked!
    Excellent! πŸŽ‰ That's fantastic news! You now have a fully working POAP RSS feed generator.

    I hit a big stumble getting routing working through API Gateway to the Lambda function and Claude corrected me when I started going the wrong way.

    CORS is not enabled. Is that a problem?
    CORS isn't the issue here! CORS only affects browser-based requests when JavaScript tries to access your API from a different domain. Since you're getting a response (even if it's an error), the request is reaching your Lambda function fine.

    Okay Claude β€” got it! 🫑

    After this session I had a working prototype. The code was ugly. It turned out we needed to include OAuth support and added that much later. The design of the API endpoint was bad but it was working. It only took about an hour but I had explored this surface area deeply. I knew broadly what the service should look like, what some of the edge cases were going to be, and what was required to integrate with the POAP API.

    Now to come back later and turn this into something that would be real. I was about 1 hour into exploring this topic and now knew a lot.

    I deleted the Lambda function and all of the configuration I had created. It was created trial and error and I wanted to now be more rigorous.

    Expand Features

    Creating the prototype gave me a bunch of notes and a much better understanding of what was going to be needed to make the solution work right. I wanted to make sure I wasn’t missing some things so I decided to turn to ChatGPT o-3 and Deep Research to explore the necessary features.

    Please help me explore and expand the features for POAP2RSS service that provides an RSS feed to subscribe to claims from a POAP event. The POAP events do not have an RSS feed, so I want to create a service that provides an RSS feed for a user using the POAP API to populate the data.

    I’m already considering:

    • Only include entries for most recent 20 claims
    • If no claims in 4 weeks, add an entry that states that and suggests the user remove the feed. Change this for every additional week and change the RSS feed ID so it will show up as new to the user.
    • Provide ENS names in the RSS item and set the Author of the item to the ENS name or address that claimed the token. Set the date and time of the item to the collected time.
    • Add an initial item to all feeds that shows the description of the POAP Event and uses the timestamp for the event.
    • Use DynamoDB to cache results from POAP API for 15 minutes
    Please help me explore and expand the features for POAP2RSS service that provides an RSS feed to subscribe to claims from a POAP event. The POAP events do not have an RSS feed, so I want to create a service that provides an RSS feed for a user using the POAP API to populate the data.
    It is for any user including all three of those, however I suspect it will be most frequently used by the creator of the POAP event to monitor claims. I also expect it will be used in Automation -- for example to send a message anytime a claim is made by connecting the RSS feed to something like Zapier. The RSS feed should be fully standard so it can be used in any way desired.

Thanks, that context is very helpful. I’ll explore and expand on potential features for the POAP2RSS service that creates a standard RSS feed from POAP event claims, targeting usability for event creators, collectors, and automation tools like Zapier. I’ll also examine best practices from similar services and technical considerations for maximizing compatibility and reliability.

I’ll get back to you shortly with ideas and suggestions.

o-3 then went off for about 10 minutes to do some research. I decided to watch it and had a real chuckle when I noticed that Deep Research was reading my own blog! It turns out over the years I’ve written about things that POAP could add including RSS feed support. Actually multiple times.

After this was done I had a full feature description for POAP2RSS!

I read through it all and felt together we had vibed the right set of things to consider in creating this solution. Now to make this thing work!

Create Service

With the features of POAP2RSS now figured out it was time to build the solution. I was comfortable with how Claude had worked for this Lambda function in the prototype so I went back to Claude and attached the full document for the features along with a prompt to code it.

I'm attaching a description for a service I would like to create called POAP2RSS. I would like you to write the Lambda function that would meet these requirements.

Relevant information

  • Please write this using Python and structure it for a Lambda function.
  • Use the hostname app.poap2rss.com and then put the API (or RSS feeds) endpoints at /event and /address.
  • It is okay to use Python packages such as Requests, or others to make the code more manageable and readable.
  • Make sure to include relevant information for logging to Cloudwatch.
  • Note the caching requirements included and the use of DynamoDB.
  • The POAP API requires an API token. I have obtained a token from POAP and it can be provided via an environment variable.
  • The POAP API requires an authentication token. I have the necessary Client ID and Client Secret and can be provided by an environment variable.

Regarding authentication

Here is an example from POAP to retrieve an authentication token.

curl --location --request POST 
  --url 'https://auth.accounts.poap.xyz/oauth/token' 
  --header "Content-Type: application/json" 
  -data '{
  "audience": "https://api.poap.tech",
  "grant_type": "client_credentials",
  "client_id": "$clientid",
  "client_secret": "$clientsecret"   }'
Looking at your POAP2RSS service requirements, I'll create a comprehensive Lambda function that implements all the specified features. This will be a substantial implementation, so let me build this as a complete solution.

Claude’s comment on “substantial implementation” made me chuckle.

I had a big miss in my ask though β€” I never told it was URL POAP2RSS would run on and what the URL for the endpoints should be! Ugh.

I forgot to tell you the URL that this service will run on. Please use the hostname app.poap2rss.com and then put the API (or RSS feeds) endpoints at /event and /address instead of in a /feed directory.
Perfect! I've updated the Lambda function to use the correct hostname and endpoint structure:

This was a little interesting to me since an actual developer working with me would have never just assumed they knew this. They would have stopped and requested clarification since this is such an obvious miss in the request.

This version of POAP2RSS had more complexity with the caching in DynamoDB. I needed a good set of documentation to know how to create everything in AWS Console.

Excellent. Please create a document with the instructions to configure the necessary services in the AWS console.
I've created a comprehensive AWS setup guide that covers all the necessary services and configurations for deploying your POAP2RSS service.

With that Claude created a seven step detailed deployment document. Nice!

At some point here I hit a significant issue with the SSL Certificate being configured right to route through API Gateway and on to the Lambda function. I kept getting issues with the certificate being incorrect. This blocked me for about an hour as I was trying to debug things. I finally found that I had the Cloudfront configuration incorrect and pointing to the wrong resources. Ugh!

With that issue solved I had a fully deployed service and it was working exactly how I wanted it to work. Notable to me:

This round took me about 2 hours to get working entirely.

Get Professional

I now had POAP2RSS working and working well. I now wanted to get this cleaned up and something I could maintain. I created a new repo in Github for POAP2RSS and moved the prompts, docs, and source into the repo.

I now wanted to explore what I could do with OpenAI Codex. I attached Codex to the code and asked it. (I’m abbreviating Codex’s responses. It is fairly verbose and detailed and would be too much to include all of. It also has complicated buttons and links that are hard to replicate.)

Familiarize yourself with the repo.
The repository appears ready for deployment with AWS resources, focusing on delivering real-time POAP claim data through standard RSS feeds. The main Python Lambda implementation is self-contained and designed for use in an AWS environment with caching via DynamoDB and POAP API calls authenticated through environment variables.

Codex operates much differently. It creates a whole development environment for every ask, gets all the code from the repo, and does whatever it needs. I then asked it a really general question.

look for bugs in the lambda function
  • Typo in channel description

  • HTML in item descriptions gets escaped

  • Incorrect link target for claimant address

I thought it was hilarious that Claude had made a typo in the description and indeed it had. That was simple enough. The CDATA escaping of HTML in the descriptions was a notable miss for Claude, and frankly even for o-3 to miss in the features. Nice catch!

I sequently asked it to fix each of these issues and it issued a pull request for each one.

I reviewed and merged each of these pull requests.

Very cool! πŸ”₯ I now have a fully working service and a reasonably clear code base. I wasn’t entirely happy though with the HTML that was being put into the RSS feed descriptions. This is where I hit some “fit and finish” work that I ultimately did not find vibe coding a good approach for. I started to ask Codex “Please reformat the descriptions for events to look like…” and realized it was more work for me to ask Codex than to just go into the code and cleanup the strings myself.

I did some actual coding here. πŸ› οΈ It was fun to tweak and make it just what I wanted. I found a number of things that needed to be cleaned up:

I now have a fully working service and it is even sending information as I would want it!

Build the website!

Early in the project I had Claude create an index.html that I could drop into the www directory to have a simple website. It was okay but not at all the design I wanted. So, the next day I decided that this was a perfect ask for Codex so I asked it to build me a website.

The www directory contains the website for POAP2RSS. For this request work only inside that directory.

I would like to create a new website for POAP2RSS. The website should have the following pages which should all be included in the primary navigation of the website.

  • index.html: the landing page for the project
  • about.html: information about the project, why it exists, who created it
  • changelog.html: to share changes about the project

Additionally there should be.

  • dormant.html: the page POAP2RSS feeds direct users to when there is no activity in the feed and they should consider unsubscribing from the feed

All pages of the site should include references to Plausible for analytics. The tag is:

For design and user experience:

  • I would like to use the Pico CSS framework found at https://picocss.com
  • I would like you to lean on the colors and feel of the POAP website at https://poap.xyz
  • A simple and clean look is right for a project that has those same principles.

You will find two HTML pages already in the www directory. The documentation in those files is good but they can be replaced with the new website.

Summary

  • Replaced the landing page with a Pico CSS design and added site navigation linking the new pages

  • Provided project background and goals on a dedicated About page

  • Created a simple Changelog outlining initial release updates

  • Updated the dormant feed notice to use the same layout and encourage unsubscribing

Wonderful! I merged in the Redesign POAP2RSS website and it was great.

I found myself in another “fit and finish” situation where it was much easier for me to just edit the HTML to what I wanted rather than asking Codex to do it for me. So I tweaked away and in not much time had a site up and running on www.poap2rss.com that made me happy!

Good Vibes!

I’ve been playing with this service now a bit over the holiday weekend. It is working great. I’ve already used it to do a ton of automation for the 612 POAP Challenge. I’ve added subscriptions to several people that collect POAPs which is super fun.

The experience of Vibe Coding this was incredible. It took something that was beyond my capabilities and made it accessible. I shared the project with someone that knows and they said the code looked like it would have taken “2 days” to create the source. I got this done much faster, and did a lot more than just the code.

It also highlighted for me how this approach isn’t just about the code. I used AI to help create the stories as well as create the documentation and website. Those were huge helps.

I’m tracking open issues so I have some items that I’ll likely use to test Cursor or do further work with Codex.

Overall, this was a very rewarding project to create and I learned a lot from making it a reality.

PS: Thank you to Matt for the slick message styling CSS for Tiny Theme!

∞

Had fun using POAP2RSS and feeding through Make with Claude doing some creative for me and then syndicating to 612 POAP Challenge accounts on Mastodon and Bluesky. Whew!

∞

Worked with OpenAI Codex this morning and redesigned the website for POAP2RSS. It gave a clean structure as requested that I could fill in and make better.

∞

Seeing POAP claims show up on Feedbin thanks to POAP2RSS is making me giddy! 🀩

∞

I decided to declare POAP2RSS officially launched. It seemed fitting for Independence Day!

How do you celebrate creating a service to make POAP activity available in RSS? You make a POAP of course! Now drop β€” POAP2RSS Created! πŸ’₯

∞

I cleaned up the RSS items that POAP2RSS outputs this morning. I decided to remove the titles on the items and add the POAP images which makes it great for adding to a micro.blog timeline. Now I can share my POAP claims automatically!

∞

Collected POAP 7386503 for POAP2RSS Created.

∞

I’ve created my first project using AI to write nearly all of the code with me!

Introducing POAP2RSS!

For years I’ve wanted to get updates for POAP events and users in RSS. Now with the help of AI I’ve created it!

Still cleaning to do. Check out the code on Github.

∞

Just used ENS Fairy for the first time to send halaas.eth to Erik Halaas of 612 Series fame! I’d been wanting to try ENS Fairy out and it worked amazing. Once he sets his reverse record the 612 POAP Challenge Leaderboard will reflect halaas.eth too.

∞

I’ve supported the Electronic Frontier Foundation for over twenty years. I am excited to have this 35th anniversary coin, number 0061, as a keepsake. If only they did POAPs. 🀩

“Working to ensure that technology supports freedom, justice, and innovation for all people.”

∞

Indieweb is Punk β€” from blog post to t-shirt and POAP!

∞

Collected POAP 7379713 for Creating Community with POAP β€” MN Blockchain.

∞

I added a new award to the 612 POAP Challenge β€” the Explorer! This token is given to players that are the first to mint a location in the event. I sent it to the 8 players that have been the first to claim 31 of the 33 locations. There are only two more chances to get this award!

∞

Collected POAP 7378481 for 612 POAP Challenge - Explorer.

∞

Love that @ericmwalk did a run with Strava to get some 612 POAP Challenge locations today! Brilliant! Nice collection of 7 locations so far.

∞

IndieWeb is Punk: Wear It!

I published IndieWeb is Punk and it resonated with folks.

Jim Mitchell created the shirt! Go ahead and get one!

I wanted to make a POAP to go with it so Jim sent me the image files and here we are!

For fun I asked ChatGPT to create the description for this POAP in the voice of Henry Rollins of Black Flag speaking to bloggers of today!

You walked away from the corporate feed trough. You ripped your voice out of the algorithm’s claws. That took guts. That took conviction. That’s punk!

The IndieWeb isn’t some polished product you buy with a tap. It’s you, your words, your server, your turf. It’s raw HTML and full-throated autonomy. This isn’t about metrics or brand deals – it’s about owning your damn voice. If you’ve ever looked at those social media sugar traps and said, “No thanks, I’m not a product,” then congratulations – you’re part of the resistance.

We need digital buttons, badges like the ones we used to stab into our jean jackets – statements of identity, rebellion, belonging. This POAP? It’s not just a collectible. It’s a battle patch. A symbol. A nod to the hard-headed, soft-hearted punks building the web they want to live in.

It started with Jamie Thingelstad screaming the truth from his blog: IndieWeb is Punk. Then others joined the chorus and even joined in voice, and Jim Mitchell did what punks do – he made a damn shirt.

So slap that badge on your digital vest. Wear it like blood, sweat, and static.

You’re not just on the web – you are the web!

Want a POAP? Contact me and I’ll send you a claim code!

∞

I’m going to be sharing my love of POAPs at the Minnesota Blockchain meetup on June 30th β€” Creating Community with POAPs! Will include 612 POAP Challenge as an example and will also be sharing a POAP for the evening of course!

∞

Today Tammy and Tyler completed a 26-mile walk around Lake Geneva, Wisconsin. They started at 6:21 AM and completed at 2:58 PM. Epic. I thought it deserved a POAP β€” Lake Geneva Loop Legends! So very impressive. πŸ₯Ύ

∞

Stone Arch Bridge Fest

Today was Mazie’s birthday and one of the things she decided we should do is the Stone Arch Bridge Festival. It had been a very long time since we had been to this and I was really impressed by the size of it. There were so many artists and vendors. It felt to me like it had a particular Minnesota flare to it, with a lot of art that was locally inspired. We spent about four hours but could have spent the entire day there.

Some artists that caught our eye:

Mazie bought a piece of art with her own money β€” her very first art purchase from H. Ward Mileswww.hwardmiles.com.

I also really liked these very local artist creating location pieces. Maybe I could get one of them to participate in a future year of the 612 POAP Challenge. 😊

We grabbed some switchel from Hobby Farmer on our way heading back home!

∞

Got a recursive selfie while collecting the Grain Belt Sign for the 612 POAP Challenge with the family (see moment).

Favorite quote from Mazie @mthingelstad : “Why is this actually kind of fun?” Love it. 😍

Older Posts β†’