Sign in

Adam Fortuna

@adamfortuna.com
981 followers 645 following 3.3K posts

Full-stack product developer (Rails/React) in Salt Lake City, UT. I love enlivening experiences, visualizing data, and making playful websites. 📚 Founder @hardcover.app 🎧 Developer @libro.fm ✍️ Blogger @ adamfortuna.com

PostsRepliesMedia
Adam Fortuna @adamfortuna.com · 26/09/2026
Great write up on Pulp Magazine on the rise of tracking media use and why we’ve seen a rise in that activity (ie Hardcover). How Media Cataloging Sites Turned Taste Into a Sport pulpmagazine.com/article/2792
pulpmagazine.com
PULP MAGAZINE
010
Adam Fortuna @adamfortuna.com · 22/09/2026
Hardcover has been hit hard by bots over the last 2 months, including distributed hits from residential IPs around the world. It's been a game of whack-a-mole all week. New CloudFlare rules stop them, then a few hours later they get by them. Upgraded to CF Business yesterday, so we'll see 🤞
Chart of total pageviews on hardcover over the last 5 years. Goes from 1m to 2m in august and 2m to 4m in September.Pageviews per hour over the last week with sudden jumps.
330
Adam Fortuna @adamfortuna.com · 19/09/2026
Fascinating stat for Hardcover. We recently hit 100k confirmed email users (160k unconfirmed). With 31k active in the last month. Curious to see how that changes w/the new email confirm first (vs 3 days). New CF bot restrictions have raised the unconfirmed email users from 55%→98% (!).
050
Adam Fortuna @adamfortuna.com · 16/09/2026
Oof, bot attack at the same time. A bot from India started crawling every book page on the site, roughly 1k at a time. Fortunately able to split them out and stop that one.
Plausible chart showing increase from 20k to 120k visitors in a day (due to bots)Cloudflare chart of blocked requests from bots
010
Adam Fortuna @adamfortuna.com · 16/09/2026
Hardcover's TypeSense Search index was down this morning. It's available through the API, and powers a bunch of features on the site with rotating keys and a proxy in front of it for auth. Finally hit the limit on what 3x16GB cluster can handle. Let's see how long 3x32GB will last. 🤞
120
Adam Fortuna @adamfortuna.com · 15/09/2026
Love this one too. Can't wait for the 3rd one 😭
110
Adam Fortuna @adamfortuna.com · 10/09/2026
Hadn't checked on my old site minafi.com in a while. Got an email from Google Analytics (it was started in 2017 - it was a different time), and looks like the bots have found it. Unless sure 5,800 people from Singapore are really into minimalism, mindfulness and financial independence.
Chart showing 5800 current users.
030
Adam Fortuna @adamfortuna.com · 09/09/2026
Bit of a fun one in Alpha: Vibes for Book Clubs. These are book recommendations based on all the members of a book club. Related note: Most Wanted shows number of book club members who have that book on their Want to Read list.
Vibes page with book suggestions based on people in a book club.
000
Adam Fortuna @adamfortuna.com · 09/09/2026
My first thought too.
130
Adam Fortuna @adamfortuna.com · 09/09/2026
I see constant posts on Reddit about running out of tokens. I’ve been using a Claude Max plan for the last year and I’ve only hit my limits a few times. I wonder if it’s because parsing through an organized Rails/React codebase is predictable, but more likely a difference between Pro vs Max (?).
010
Adam Fortuna @adamfortuna.com · 09/09/2026
General question for anyone who uses any LLMs to program: How often (if at all) do you run out of tokens? If so, how often and with what service + plan? If you don’t, do you know why you don’t?
210
Adam Fortuna @adamfortuna.com · 08/09/2026
You know the Discussions prototype for Hardcover has been created by a developer by counting the rings in the nested information architecture. 😂
Screenshot of hardcover app on mobile on the book page with tabs for high level book info (reviews, book info, discussions), sub nav for discussions, mentions, mod and buddy read, and another nav for all, discussions and mentions.
110
Adam Fortuna @adamfortuna.com · 04/09/2026
Ohhh yeah and: - Cleanup feature-gated features released >30 days ago. This will go through the codebase and remove the feature flag for safely-released features, and remove all feature flag checks, create a PR, wait for CI, have a review agent review it, and land it in "Ready to deploy".
000
Adam Fortuna @adamfortuna.com · 04/09/2026
Been moving more "cleanup" Hardcover tasks to a local Mac Mini: - Implement GH issue - Fix/create bugs for BugSnag errs - PR Review - Audit PR Review (iterates on PR review weekly so it improves) - Verify all PR's have a Project status (assign if not) - Summarize most common help/support requests
100
Reposted by Adam Fortuna
jenn schiffer 😎 @jennschiffer.com · 03/09/2026
if there are people at 1password making the racists afraid to be openly racist at work, a genuine thank you. no one is paid enough to do that work but it’s not to be taken for granted, also sorry you work with scumbags and your ceo is a colossal baby with no swag
227053
Adam Fortuna @adamfortuna.com · 02/09/2026
Ohh this is great! If adding screenshots to agents requirements will make PR review even a bit quicker, it’s a major win.
010
Adam Fortuna @adamfortuna.com · 30/08/2026
Excited to hit 1,000 paid supporters on Hardcover today! 🥳 Building anything in the book space requires a _lot_ of patience. It's taken just over 5 years to get to this point – and we're still far from able to pay full salaries for us working on it (~1.5-2 full-time). Very exciting milestone 📈
Paid supporters gauge chart at 1000Revenue per month spiking above 5k for August 2026.
2180
Adam Fortuna @adamfortuna.com · 27/08/2026
Is one of my top shows this year already - hoping they can keep up this True Detective, with a hint of superhero vibe.
010
Reposted by Adam Fortuna
UtahJS @utahjs.com · 19/08/2026
Adam Fortuna (Hardcover founder) is making D3.js click: core mental models plus AI prompt templates to go from "I get it" to a working dashboard. #UtahJS, Sept 18 @ 11:05 AM. ti.to/utahjs/2026
031
Adam Fortuna @adamfortuna.com · 24/08/2026
Lately I've been jumping around between a bunch of Conductor PRs. I'm curious how others have handled this. What's helped me is creating Chrome Tab Groups that match the name of name of the Conductor workspace, with colors depending if I'm waiting on an agent to build, CI to run, or agent review.
Chrome tabs with titles like "3732 - Journal" with different colors indicating status and PR number.
011
Adam Fortuna @adamfortuna.com · 24/08/2026
On Friday we switched from a 3-day window to confirm email addresses to immediate confirmation. That closes a gap where users could be using the site without a valid email. So far our stats have been roughly the same for email confirmations, and much lower for support requests. Captcha next? 🤔
A table of hardcover registrations per day around 500-700 with 60% email confirmed.

Full table text: 

Signups, last 14 days
618/day average · 61% confirmed · UTC
Day	Signups	
confirmed
unconfirmed
Mon Aug 24 today, partial	587	
344/587 59%
Sun Aug 23	746	
436/746 58%
Sat Aug 22	709	
394/709 56%
Fri Aug 21	613	
358/613 58%
Thu Aug 20	544	
340/544 63%
Wed Aug 19	573	
344/573 60%
Tue Aug 18	594	
373/594 63%
Mon Aug 17	635	
388/635 61%
Sun Aug 16	725	
447/725 62%
Sat Aug 15	640	
393/640 61%
Fri Aug 14	570	
346/570 61%
Thu Aug 13	598	
365/598 61%
Wed Aug 12	618	
425/618 69%
Tue Aug 11	499	
311/499 62%
021
Adam Fortuna @adamfortuna.com · 20/08/2026
The deploy had a few bumps 😅 - Wrong follower database ENV variable - Misconfigured caching - Deploy timeout too short to restart all servers - Too many connections to the API DB due to a high number of queued requests - Upgraded the Postgres DB + added PG Bouncer to prevent connection issues
010
Adam Fortuna @adamfortuna.com · 20/08/2026
Super excited about the API updates launched today on Hardcover: docs.hardcover.app/api/getting-... Just a few updates including: - Custom Rate Tiers (per user) - Personal Access Tokens with token-specific permissions, and expiration - (beta) OAuth support for client & server based apps!
docs.hardcover.app
Getting Started with the API
Get started with the Hardcover GraphQL API.
120
Adam Fortuna @adamfortuna.com · 15/08/2026
"Sexy cop" has really struggled since 2008.
Google trends for Sexy Cop, showing a decline by 80% since 2008.
000
Reposted by Adam Fortuna
Emelia @thisismissem.social · 14/08/2026
New rambling: The Internet was never real, on generative AI and missing the trees for the forest. standard-reader.app/a/did:plc:5w...
standard-reader.app
The Internet was never real · Emelia’s Ramblings
It's always been a curated version of the human experience, something designed to sell a certain vision or impression, for one's own benefit.
14911
Adam Fortuna @adamfortuna.com · 13/08/2026
Currently someone can join, and they'll have 3 days to confirm their email address. After that, they get locked out until they confirm it. This would simplify that process. However, if emails can't be delivered for some reason (ours or theirs), then they _never_ get in.
110
Adam Fortuna @adamfortuna.com · 13/08/2026
Hardcover has had a "quick registration, confirm their email address later" approach since we started. Now with 600+ new people everyday, our most common support request (by a lot) is incorrect email addresses. 😭 I think it might be time to require email confirmation to join.
140
Adam Fortuna @adamfortuna.com · 12/08/2026
Wow, you've been busy! That's exciting! 🥳 I imported OL's library using the CSV to Postgres importer, and I remember needing to do binary updates to parts of the files to make it work. Did you end up having to do anything to the initial files?
000
Adam Fortuna @adamfortuna.com · 11/08/2026
The Hardcover team has been using a super-basic GitHub + Claude integration with the ability to work on issues, create PRs and conduct code reviews. (coding & PR review are Claude skills in the repo). Working on V2 of this system now with a timeline, multiple agents, and cost estimates.
Issue #3609 timeline. Starts with my assigning it to @jules-hardcover. Then it's worked on by another bot, a PR is opened, another bot reviews it.
010
Adam Fortuna @adamfortuna.com · 06/08/2026
We're getting ready to launch Vibes later month on Hardcover! 🥳 They're available now in preview to supporters. I sat down yesterday with Adam to chat about how Vibes work behind the scenes and what's next for them. Warning: we say "vector" a lot. hardcover.app/live/65
hardcover.app
#65 – Vibes - Hardcover Live
020
Adam Fortuna @adamfortuna.com · 03/08/2026
A Mac Studio with 1.5 TB of memory? At current rates that would probably cost more than a car, but it could enable running some massive local models. 🤔 www.tomshardware.com/tech-industr...
static.klipy.com
Shut Up And Take My Money!
Alt: Shut Up And Take My Money! gif
000
Adam Fortuna @adamfortuna.com · 03/08/2026
The idea of a shared book database in the atmosphere is really exciting and could outlive any single project working in the book space. Worth getting involved in if you're creating anything in the book space.
020
Adam Fortuna @adamfortuna.com · 02/08/2026
Looking at this graph, now I suspect that the reason for all these downtimes was because we let multiple top-level GraphQL API requests count as a single request towards rate limit. That worked until people started sending 1,000+ calls in a single request. 😅
000
Adam Fortuna @adamfortuna.com · 02/08/2026
Hardcover hit 7k weekly active users this week - a new high! Some API improvements we made last month sped up the site a bunch, along with a number of server tweaks and site optimizations. The site has been faster with less downtime as a result. Only 1 slow response time incident in 3 weeks!
Active users a week graph starting at 0 in 2022 and up to 7k now in 2026.Uptimerobot screenshot of a graph with a bunch of downtimes and spikes, but leveling out to fewer downtime and faster load speed in the past month.
160
Adam Fortuna @adamfortuna.com · 01/08/2026
After meeting with a bunch of arborist, I finally felt safe (for the trees) to cut some roots in our basement. Each one I talked said "I've never seen something like this before". That's ~9 times people we work with have said that. The joys of owning an old house. 😅 Bucky for scale.
50lb Black dog on the grass with roots about 4x the size for the dog.
000
Adam Fortuna @adamfortuna.com · 01/08/2026
New blog post & personal updates on what I've been up to outside of work lately. A bit of a personal journal entry, but also a concept that's been helpful for me recently. The Personal Reset adamfortuna.com/reset
adamfortuna.com
The Personal Reset
How to use a personal reset to mix up your schedule and realign your goals.
020
Adam Fortuna @adamfortuna.com · 30/07/2026
Ohh this is really neat! How involved was adding support for this?
110
Adam Fortuna @adamfortuna.com · 30/07/2026
Ohh, neat idea! Will tune in to check it out.
010
Reposted by Adam Fortuna
Brittany Ellich @brittanyellich.com · 27/07/2026
Back to the Claude mines
4291
Adam Fortuna @adamfortuna.com · 28/07/2026
I read The Traveler (2026) recently and it stuck with me. About a man who starts skipping time, doubling every day - 1 day, 2, 4, etc. you can imagine how fast things get out of hand. 😅 I Who Have Never Known Men (1995) is another great one if you like Silo with a twist.
010
Adam Fortuna @adamfortuna.com · 28/07/2026
Great article about how fragile masculinity and the manosphere have impacted politics. Going from almost having the first woman president to this is, well, sad. www.theatlantic.com/ideas/2026/0...
Screenshot of article with text:

What kind of program has this internet-brain-rotted masculinity brought us? A public-health official who neglects fatal outbreaks of preventable diseases because he seems to believe that only the strong should survive. A Department of Defense, renamed the Department of War, that launches a needless war of choice in the Middle East. A government that props up the fossil-fuel industry (manly) while deliberately suppressing green alternatives (girly), leading to a catastrophic rise in energy prices when that war doesn’t go as planned. A president who imposed tariffs to bring back “manly jobs,” but only drove up inflation instead.
000
Adam Fortuna @adamfortuna.com · 24/07/2026
It’s Pioneer Day today, Utah’s campy holiday that’s a combination of Independence Day and Columbus Day. For non-LDS folks like myself, it’s also called Pie and Beer Day. Picked up 4 mini pies to celebrate. 🥧
020
Adam Fortuna @adamfortuna.com · 23/07/2026
I added the two main files that manage everything to a gist here. It's been super nice the last few days. The queue has been at 0 whenever I check it. gist.github.com/adamfortuna/...
gist.github.com
Coalescing Queue Example
Coalescing Queue Example. GitHub Gist: instantly share code, notes, and snippets.
000
Adam Fortuna @adamfortuna.com · 23/07/2026
It took a day to clear the queue after these updates! Processed some of the most jobs in a day too. 😅
Sidekiq job with a jump to 3m.
000
Adam Fortuna @adamfortuna.com · 21/07/2026
It also adds a job to process the queue. That job processes the top 2500 rows in the queue, then adds another job to continue if there's still more to do. The end result is the items are bulk processed quite fast, and with far fewer jobs.
100
Adam Fortuna @adamfortuna.com · 21/07/2026
The Coalescing Queue in our system was created by Ziv on the team (The Detonator on Discord) and has worked super well. Rather than adding jobs for each update, we add an ID to a Set for each update type ("data:queue:book_counters"). Use after_all_transactions_commit to add an ID to the set. 2/3
200
Adam Fortuna @adamfortuna.com · 21/07/2026
Hit a point yesterday where Hardcover's Sidekiq jobs were at 2.6m and growing. 📈 😱 They're now back at 0. What we did: 👉 Increase Kubernetes workers from 2 → 8 (they're CPU bound, so OK) 👉 Rewrite a jobs to use a Coalescing Queue design patter for counters, and cache columns 1/3
110
Adam Fortuna @adamfortuna.com · 18/07/2026
Hardcover's public API since day 1 has had no limits on the number of top-level queries to in GraphQL. That meant some people might send over 1000 mutations or 10,000 searches - towards a 60/s rate limit. Lowered this to 60 top-level requests/min over any number of requests and feels a lot safer 😅
010
Adam Fortuna @adamfortuna.com · 14/07/2026
Oof, that’s annoying. Similar thing happened to me getting a visa for Vietnam. They sent the confirmation that included all users visa for the day - and all of our SSNs in plaintext.
010
Adam Fortuna @adamfortuna.com · 13/07/2026
For existing social apps that weren't developed with atproto first, and where the user base mostly hasn't heard of it, do you know if any apps that have gradually moved in that direction in a way that keeps the existing user base informed?
140