What does it do?

In case you just stumbled upon this: the idea for Meme Museum is that, if you're a person who posts memes enough, you probably have a little library, either a folder on your computer or a mental shortlist that you can quickly search up to include.

Now to be clear from the start: I'm not actually one of these people! Not never, but really not often. I wanted to try to build out the concept to demonstrate why atproto is a lot more than just incidental plumbing for another twitter clone. I wrote more about that second bit in another post.

But I also wanted to build it out to see how all the parts fit together. Here are some of the details.

The nerd box

This project was really fun to make in a lot of ways. For starters, it was practice in what I can get an LLM coding assistant to do. I've been building on the web basically for as long as it has been around, but my regular job these days is a lot less about coding than it used to be. Meme Museum is far from my first LLM-assisted project, but it still feels good to practice, both for myself and because my job involves supporting students and working journalists who are developing their tech skills.

Multiple things can be true

I acknowledge a lot of people's deep concerns about "AI". Someone I worked with back-when-the-web-was-new just posted a really scathing attitude towards GenAI the day before I started drafting this. (Jason, if you see this, it's been cool seeing you pop up on BlueSky now and then and I really hope this project doesn't infuriate you!)

@brittanyellich.com nailed it a recent post: Multiple Things Can Be True

I want to be clear about what I'm not saying. The way this technology was developed is problematic in ways that are genuinely hard to wrap my head around, and the questions about its footprint are real. I'm not asking anyone to stop caring about those things. I care about them. We should continue to care about them and attempt to mitigate those impacts in whatever ways we can.

I've concluded that the best way for me engage critically and work to mitigate those impacts includes using LLMs so that I can really understand what they can and can't do.

The nerd box, cont.

Basically, there are two key features to Meme Museum: manage your library and find images in it, and compose posts.

The library

For the managing part, it's like any other little organizer: make subcollections, tag things, and quick search to find what you're looking for. It's familiar, but using the LLM made it a lot easier to make sure certain kinds of polish are in there.

  • The upload meme feature accepts pasting an image or an image URL as well as actually uploading a file.

  • But I didn't even have to upload memes to test it; the LLM just whipped up a batch of them and seeded my library. They were just colored squares (Claude was copyright-sensitive) but it made two of them animated since I had raised the question of reduced motion support. At first, the animated "memes" were flickering through colors and kind of annoying so I prompted it to "make them pulse instead" and there you go.

  • Even pulsing, I knew that having a gridful of animations could be really unpleasant for people. I would not have known how to solve it, but I knew it needed solving. Claude whipped up a svelte component that pulled the first frame and showed it as an image, with an overlaid play/pause toggle. A year ago, figuring out that strategy and implementing it would have taken a good share of the total time I have spent building this entire app.

Polish aside, as a longtime web app developer, the idea that I don't have to set up a place to save all these images is glorious. And I dont have to worry if they're uploading porn or anything—not my server, not my problem! I just get that for free when I have someone sign in with their atmosphere account.

The composer

Pretty simple. 300 characters. You can add a new meme to your library while posting, by uploading a file, or by pasting an image into the composer (another thing I would have had to research and struggle to implement).

For what it's worth, the library also has a "post this meme" if you want to start by sifting through your little meme treasures looking for the perfect thing.

the (atproto) nerd box

Since Atmosphere Conf this year, I have been so lit up by the energy in this community. So many people are dreaming big and trying things. It was fun as I did this project to link into that community in as many ways as I could.

  • I registered the domain with marque.at, which offers some cool integration with other atproto services like configuring your custom handle and other boilerplate config.

  • I used eurosky.social to create the @meme-museum.at account. It was at the top of the open to registration tab at pds.directory.

  • Gotta put the source code somewhere. Tangled.org is an atproto-savvy git forge, so you can find the code at https://tangled.org/meme-museum.at/meme-museum

  • Tangled has web page publishing, but not yet with custom domains. So I tried wisp.place for the first time and it was very smooth. Any developer who is just throwing something together and needs to put it up should know about it.

  • Since I'm an inveterate pds.ls snooper, I had a sort of vain concern with not putting my little test lexicons into public before they were ready, so I used atproto-devnet to run my own isolated PDS locally. It still feels kind of heavy to install but I had done it for my last project and just told Claude "do it like that".

  • It's a little thing, but I've really enjoyed typeahead/suggestion features on other atmosphere apps. It was super easy to add that using 's typeahead service.

Looking ahead

This would be a lot more useful if it helped you find memes that aren't in your library yet. Maybe I could look at internet search, but I could more easily make an AppView that indexes at.meme-museum.meme records. People already have an option to mark their memes as unlisted, but it still raises moderation issues that I need to spend a lot more time thinking through. (It would give me a great excuse to play with HappyView).

I started poking around making it an installable PWA so that you could use natural "share" features to add images to your library or to reply or quote post with memes. If I were an android user, I'd probably try harder, but they seem pretty sharply restricted on iOS. I may still come back to this one. Or, I'd consider a pull request!

I don't think I have any interest in making a fully installable app for either mobile platform. Or meme generation.

Anything I missed?