John Oliver’s episode on AI slop was absolutely hilarious.
John Oliver’s episode on AI slop was absolutely hilarious.
Over the past weekend I finally did a thing I had been wanting to do for quite a while. I created an automated page of interesting (to me) links with a little commentary around each one. It’s called Linkity Link. I often joke that if I could make a living from surfing the web, I would do it in a heartbeat. This isn’t that though.
I’ve been loving the human web (cozy web? small web?) since a friend from the KU computer lab showed up with a copy of Mosaic. I have literally never stopped. The web has always been filled with some of the most amazing, generous, curious and lovely people I’ve ever (and never) met. Yes yes, it’s also fill with awful people, but so is the world and I really try not to give the awful people space in my head or in my writing. The web is also filled with garbage and, increasingly, AI slop that is changing the web as we know it. And it is not doing so for the better, at least not yet.
What has always made the web great are the humans. To this day, there are few things that excite me more than stumbling upon someone I have never heard of, some blog I have never read, where someone is sharing something of themselves. It could be words, art, music, a video, a zine, whatever! This happens every single day. Nearly every evening when my kids are in bed and I knock out some work, I go surfing. And I always find things. And when I find anything remotely interesting to me, I bookmark it. Today those bookmarks live in Raindrop. Before that they were in Pinboard. And before that they were in del.icio.us.
After all these years, I’ve curated around 66,000 bookmarks, mostly for myself. I share a lot of them with people directly, many of them show up on this blog in some form, but now I have a way to publish the most recent 18 links and even use a single one as a headline. The links reflect my interests and attention. I generally don’t post news. There are plenty of other places to get news in plain text.
Now for the nerdy details. I made Linkity Link with Claude Code, which is my coding assistant of choice. I run it in Terminal and Cursor. You can check out the repo on GitHub. It started with a long, rambling prompt that essentially described what I wanted to create, some of the values and some of the features. After that, it was a lot of back-and-forth, yes to that, absolutely not to that and after around four hours of that, it was pretty close to what you see today.
There is no build process, no framework, just good old HTML, CSS, and vanilla JavaScript. Here’s the stack:
The entire app is client-side. When someone visits the site, the browser loads the static HTML/CSS/JS files, JavaScript fires off API calls to Raindrop.io, bookmarks are fetched and rendered into the DOM and everything happens in the visitor’s browser. The end.
You might ask - why not use React? Or Next.js? For a simple bookmark site, vanilla JavaScript is perfect. There’s no build process, which means nothing to break, fast-loading means happy visitors and it’s easy (for me) to understand, which means I can maintain it on my own (with some help from Claude).
Speaking of maintaining, instead of having to maintain a database or JSON file of bookmarks, Linkity Link pulls directly from Raindrop.io collections. Raindrop is already the place where I’m creating bookmarks as I browse, so I figured if I could integrate with Raindrop’s API, that would probably be the way to go. There are two collections – one called “Linkity Link” (for all of the links) and another called “Linkity Link Headline” (for the, uh, headline).
The app makes parallel API requests on load:
const [headlineBookmarks, regularBookmarks] = await Promise.all([
fetchHeadlineBookmarks().catch(() => []),
fetchBookmarks().catch(() => [])
]);
Each request hits the Raindrop API with specific parameters:
sort=-created
- Most recent firstperpage=18
- Limit results (or perpage=1
for headline)The site uses a personal access token stored right in config.js
, which under normal circumstances I probably wouldn’t have done, but in this case, since the token only has read access to bookmarks I’m already making public, who cares?
const RAINDROP_CONFIG = {
TEST_TOKEN: 'your-token-here',
BASE_URL: 'https://api.raindrop.io/rest/v1',
// ...
}
No login flow needed, no OAuth, just straight API calls.
How about the cursor?! Instead of the default cursor, visitors get an animated ASCII character that cycles through different symbols:
const cursorChars = ['+', 'x', '*', 'o', '•', '○'];
Click anywhere and you’ll see ASCII particles float up and fade away. Pure CSS animations, no libraries needed.
The headline link cycles through rainbow colors using a CSS animation:
@keyframes rainbow {
0% { color: #ff0000; }
14% { color: #ff8c00; }
28% { color: #ffd700; }
/* ... and so on */
}
The bookmarks distribute across three columns using a simple algorithm:
const itemsPerColumn = Math.ceil(bookmarks.length / 3);
const columnIndex = Math.floor(index / itemsPerColumn);
On mobile, it collapses to a single column. No grid framework needed, just flexbox.
I feel great about what I was able to accomplish in a matter of a few hours over a weekend and I’m not sure how much more I will add to this in terms of features. Since pushing it live, I’ve made some speed improvements, cleaned up the code and added support for RSS. If there’s anything else you’d like to see, drop me a note and let me know.
I added an RSS feed to Linkity Link. You can now enjoy the links in the reader of your choice.
I received my physical copy of Antimemetics: Why Some Ideas Resist Spreading by Nadia Asparouhova and immediately started reading.
Platform Reality from Robin Sloan is worth a read.
Drawing inspiration from clone.fyi, I spent several hours building Linkity Link as a way to share certain links I bookmark on Raindrop. It uses HTML, CSS and JS and the Raindrop API. It was a fun exercise and I have a few more features I want to add. Feedback welcome.
How’s your afternoon going?
Absolutely FLOORED by Yancey’s TED talk. Been following him for many years and supporting his ideas, big and small. This is maybe the biggest of them all. A lot of people talk about supporting artists and creators, but Yancey has made it his mission and I truly believe it will be his legacy.
I wonder when someone will recreate Plaxo or something like it. I have wondered this a lot. Contacts are another thing that continue to be an absolute mess, even in 2025. I use Obsidian as my personal information manager. As I meet people I make notes about them to help me remember things about them, when I met them, connections to other people, etc. Maybe I need to get working on an app for myself that can read and write to my contacts base in Obsidian. Hmmm.
I took the kids to the No Kings protest in Culver City. It was great to see friends and so many people turn out. What’s happening, especially in Los Angeles, is absolutely terrible and scary. Feels like it’s going to get worse before it gets better.
I installed the developer betas of iPadOS 26 and macOS 26 and boy do I dislike the new interface. It’s such a fucking mess, especially from an accessibility standpoint. Not good.
20 years ago (on my 31st birthday!) Steve Jobs gave his now-famous Stanford commencement address. I’ve taken to watching it at least once a year, usually on or around my birthday. This year, The Steve Jobs Archive posted a “newly enhanced version” of the address along with some related relics. High recommended, even if you’ve seen it before. Stay hungry, stay foolish.
It’s 2025, we have lots of AI, but my photos are still a fucking mess.
Clone is pretty cool. Link quality feels a little mid or too mainstream a lot of the time. I want weirder links from non-mainstream sources. I visit daily though and can’t say that about a lot of sites.
Worth reading Sam’s latest post, The Gentle Singularity. The challenging thing, at least for me, is not to roll my eyes too much. I can have doubts. How much of what he talks about will really come to pass by 2035? Maybe some. Maybe more. It doesn’t matter if you agree, disagree, drink the Kool-Aid or not. What matters is whether you are capable of catching your cynicism and instead engaging your imagination. How difficult is that for you? Because that is a reflection of how you see the world. You can choose. And your choice won’t have any bearing on the outcome, but it will impact how you live the rest of your life.
Most apps all look the same and have been stripped of any and all whimsy. There are exceptions. Carrot Weather is one such example. !Camera is such a wonderful camera app. Been playing with it the last few days.
Linking to Gruber’s post on Bill Atkinson’s passing. Certainly one of the most important minds in tech. Pancreatic cancer is awful. It took my dad at 61. I really hope it’s one of the cancers we can start detecting earlier.
Pleasantly surprised to learn that Black Moth Super Rainbow has a new album out today!
There is a genre of YouTube videos that I cannot get enough of. I think they’re simply called reaction videos, but the premise is that people listen to albums for the first time ever. There are tons of these videos on YouTube. I think it all started with turning the tables for me, though I think they’ve kinda jumped the shark at this point. I just finished watching a bunch of stoners listen to In Rainbows for the first time and was laughing so hard I was crying. Do yourself a favor and watch them listen to the first few tracks.
Apparently the roof is off limits 🤷♂️
I went to an event last night. There was a lot of AI Kool Aid consumed. It was an impressive crowd though – pioneers, luminaries, legends even! As is often the case, I ended up spending most of the time with a single person. This person told me about a company called Bronze, who seems to be doing some really cool work at the intersection of AI and sound. After talking to this person, I left with a long-time personal friend for deep conversation while we walked on the beach, eventually making our way to a late (for me) dinner.
We took the kids to see Kendrick and Sza at SoFi Stadium on Friday, May 23. It was a great show, but the sound was absolutely awful. You would think in a venue as new as SoFi is, they would have worked out all the acoustics. The kids didn’t care though. Their minds were blown and that’s all that mattered. Getting to see two artists at the top of their game was really special. I’m grateful we could give that to them.
My friend Chris was in town last week and we got together on Saturday for a hike before he went back to New York. We hiked the Grasslands Trail in Malibu Canyon. It was perfect weather and great to commune with nature while we caught up in person for the first time in while. We saw some turkey vultures hanging out on dead tree at the beginning of the hike, the wild flowers were popping, lizards were everywhere.
I couldn’t remember the last time I ate at Genghis Cohen. I think it might have been with Ted Cohen, of all people. But last week Nicole, who had never stepped foot in Genghis Cohen, was in town and since it was Memorial Day there was almost nothing else open. Bob made a late dinner reservation. Some screamo band was playing in the live room. It was the only stage I’d ever played on. It was a Wild Gift show in the early aughts. Joel invited me up. Anyway, we shut the place down. It was one of those times when you’re deep in conversation (or just listening to Bob talk), when you look up only to notice everyone else has already left. We walked outside, the staff left one-by-one and we ended up hanging out and talking in front for another hour. Fairfax was dead and it would be the last time any of us would step foot in Genghis Cohen. It’s been there since 1983, but as of today, the location is no more. Kind of a bummer, but so it goes in Los Angeles.
There is some cool stuff in The David Lynch Collection auction.