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
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 · 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
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
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 · 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
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 · 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
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
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 · 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
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
Reposted by Adam Fortuna
Brittany Ellich @brittanyellich.com · 27/07/2026
Back to the Claude mines
4291
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 · 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 · 09/07/2026
Started listening to The Count of Monte Cristo, which has been on my list for a while. I loved the movie and the anime (Gankutsuou: The Count of Monte Cristo) from the same source. Watching France in the World Cup today too, and now I have an accidental theme. 🇫🇷 hardcover.app/books/the-co...
hardcover.app
The Count of Monte Cristo - Hardcover
After fourteen years of wrongful imprisonment, merchant sailor Edmond Dantès escapes his grim island fortress. With the promises of youth erased and his betrothed now married to someone else, Dantès l...
010
Adam Fortuna @adamfortuna.com · 08/07/2026
My talk for UtahJS was accepted! This is the first one I've given in the age of AI, and it's completely changing how I'm creating and teaching topics. What someone needs to "know" to create something using LLMs is so completely different than it was even a year ago.
Partial screenshot with title "Teaching Example: D3.js Axis". with an axis shown and a <svg viewbox example with draggable handles under some of the numbers.
030
Adam Fortuna @adamfortuna.com · 07/07/2026
Happy Reckless Ben Part 3 day for all who celebrate.
000
Adam Fortuna @adamfortuna.com · 04/07/2026
Reading @elevateutahpac.bsky.social s email about things to love about America and its spot on 👌
Email screenshot with text:

So here are a few reasons I still believe in this country, even when it is testing me personally.

Hot dogs exist
People are still welcoming to strangers, despite what our government seems determined to prove.
Air conditioning
The World Cup (even though we’re the first host to bomb a country that’s participating in it while it’s happening)
Hollywood still has it. Going to see a movie in a theater remains one of the best things in the world.
Tex-Mex. Read this Japanese fan’s take on being in America for the World Cup (bottomless chips and salsa slap)
Going to Target
Portion sizes
A road trip or driving coast to coast, seeing the vastness of our country
However far apart our politics get, most people still want roughly the same things for their kids
There are still people trying to make it better despite everything
The list could be much longer, and honestly, I would love to hear what is keeping you hopeful right now.
010
Adam Fortuna @adamfortuna.com · 04/07/2026
First time ever grilling ribs today! Calcifer, our new Ninja FlexFlame grill, has a very useful app. Able to see the temperate of the grill and the meat, and have some custom timers. Doing one rack as maple bourbon, one as Carolina bbq. Let’s see how it goes. 🤞
Screenshot of ninja iPhone app set to 250 degrees f, with pork ribs set to 203, currently at 116.
030
Adam Fortuna @adamfortuna.com · 02/07/2026
Wow, Fable absolutely eats up credits. I've never before hit the limit in the last year using Claude Code.
Claude use at max
210
Adam Fortuna @adamfortuna.com · 01/07/2026
I picked up work on Hardcover Groups today, which are a combination of Meetup Events, Facebook Groups and Reddit Subreddits. Fable 5 picked the perfect day to come back. Now to see how much use I can get before it's taken away again.
100
Adam Fortuna @adamfortuna.com · 01/07/2026
Published and emailed out (to 88k people 😱) this months Hardcover Report for July 2026! Biggest updates: - Similar Books - Filter Lists - Reading Journal / Calendar Updates - API Planning hardcover.app/blog/hardcov... Would've gone out earlier, but I thought June had 31 days. 😅
hardcover.app
Hardcover Report for July 2026 - Hardcover Blog
New similar books pages, filter lists, new review editor, dashboard updates and more.
020
Adam Fortuna @adamfortuna.com · 01/07/2026
Working on something on Hardcover that I’ve wanted for a while: Filter Lists. Think BlueSky’s moderation lists and labels, but for books and authors. Add to your own block list, create a public, private or following only list, or subscribe to someone’s else’s. Choose to hide or label them. 👀
Screenshot of Hardcover with books highlighted red with a label to indicate a filter list. Ability to hide/show them anyways.
241
Reposted by Adam Fortuna
Jason Cohen @asmartbear.com · 01/07/2026
ICYMI: Fresh new article dropped: A high-impact feature, defined concretely: Either (1) regularly used by at least 51% of customers, or (2) named in the top three reasons at least 15% of customers chose or stayed with you. High bar, but the only thing that matters.
longform.asmartbear.com
Lost confidence
RICE and other confidence-based frameworks are mostly noise. Here’s how to make decisions without pretending to know the unknowable.
031
Reposted by Adam Fortuna
Outspoken™️ @out5p0ken.bsky.social · 26/06/2026
On March 26, 2026, during a debate on violence against women in Germany’s Bundestag, left-wing MP Kathrin Gebel was repeatedly interrupted by AfD MP Martin Reichardt. She responded: “Mr. Reichardt, the clitoris has 3,000 nerve endings, and you’re still more sensitive. That’s quite an achievement.”
17974432603
Adam Fortuna @adamfortuna.com · 24/06/2026
The free little library on my block knows me too well.
Designing data intwnsive applications book in my hand
0100
Adam Fortuna @adamfortuna.com · 22/06/2026
One of my favorite AI hallucinations is how if you ask some models to generate a version of the Mona Lisa (ex: "Mona Lisa in Van Gogh's Starry Night style"), the person genreated might have two heads. ...because so much of the training data is people taking selfies with The Mona Lisa. 🖼️
Framed generated image of "Mona Lisa in Van Gogh style", with two mona lisa heads and stary night style sky.
041
Adam Fortuna @adamfortuna.com · 19/06/2026
Made it home safe yesterday after 12 days on the road, 10 states (6 new to both of us!), 9 different beds, and zero car or dog problems 🥳 Listened to a lot of What Went Wrong (movie podcast) and Eva zu Beck's new book The Wilder Way on the road. hardcover.app/books/the-wi...
hardcover.app
Adam's Review of The Wilder Way by Eva zu Beck - Hardcover
Read Adam's review of The Wilder Way by Eva zu Beck on Hardcover
130
Adam Fortuna @adamfortuna.com · 10/06/2026
One guess where I’m at.
Wood chipper
000
Adam Fortuna @adamfortuna.com · 04/06/2026
I've been rebuilding the Hardcover Editor to use Plate.js ( platejs.org ) and it's been really neat! As part of this, we're also adding references to other entities in the system (books, authors, users, lists, etc). Lists can be Private or Follows only, which means they need to show up differently.
Review with links to other entities (book, list, etc) with one of them not shown.
140
Adam Fortuna @adamfortuna.com · 02/06/2026
Updated Hardcover's network diagram for the new Rust Search Proxy. About 20% of our API traffic passes through it. If I knew how Rust worked I'd be very excited about this. Claude Code built it and it seems to work super well, despite looking alien to me. 😅 Only 1 API req/s hits the main app. 📚
An architecture diagram of how Hardcover runs. Everything lives on Digital Ocean, with most of it inside a Kubernetes cluster.
A visitor hits a load balancer, which sends them either to the main Ruby on Rails app at hardcover.app or to the Rails API proxy at api.hardcover.app. The API proxy talks to two Hasura instances — one read-only, one read/write — that sit in front of our Postgres databases. There are four of those: a primary, a follower, a dedicated cache database, and a separate one for analytics. Redis is in there too, and a Sidekiq process chews through background jobs.
Search runs through Typesense, with a little Rust search proxy in front of it. Images get resized by Imaginary at img.hardcover.app, and there's a separate service that generates the OpenGraph screenshots you see when a link gets shared. Plausible handles our analytics, and a Digital Ocean Space hosts Rails assets.
Down in the Cloudflare layer: CDNs for images and static JS/CSS, plus an R2 bucket that mirrors our Google Cloud Storage (where book covers, avatars, and CSV imports/exports live). Off to the side, a headless WordPress site, and Loops handles transactional and newsletter email.Chart showing requests per second for API queries (42 req/s), mutations (1/s) and search (10/s).
020
Adam Fortuna @adamfortuna.com · 01/06/2026
Yesterday I went down the rabbit hole that is the Bricks and Minifigs theft controversy. It's WILD, and unexpectedly brings things back to corrupt Utah law enforcement and the LDS Chuch (American Fork). I never thought I'd be so invested in justice for Lego theft. www.youtube.com/watch?v=wscQ...
youtube.com
I tracked down the thief who stole $200,000 of LEGO
YouTube video by Reckless Ben
032
Adam Fortuna @adamfortuna.com · 26/05/2026
We're getting close to a major milestone for @hardcover.app - 100k users! 👏 Launched: 2021 2022: 200 2023: 1,300 2024: 5,000 2025: 23,000 2026: 59,500 On pace to hit over 200,000 by 2027. 🫨 We're already starting to shift focus from acquisition to focusing on retention & engagement.
Text showing "99k users"
3180
Adam Fortuna @adamfortuna.com · 25/05/2026
Finally got Conductor working for Hardcover! 11 services are in a shared docker-compose file, with 4 more in a conductor one that starts up on new ports per workspace. Much easier to test multiple things locally & merge. Next step: switch the test database per worktree to avoid conflicts.
Screenshot of the Conductor app with 4 active workspaces showing one per issue. Showing 4 ports per workspace.
010
Adam Fortuna @adamfortuna.com · 23/05/2026
Finished 2 infrastructure updates to Hardcover in 2 days! 🥳 1. Auto-rotate our client-side TypeSense keys to prevent bad actors from hitting search directly 2. Convert the API Search (45-70% of total traffic) from hitting Rails to a lightweight Rust service internal to K8s Rails traffic 📉!
Grafana chart with search-proxy hitting 40-65 requests from 0. And Hardcover Rails changing from 400-800 req to around 200.Chart of Search Request percentage to the Rails site over time.
150
Adam Fortuna @adamfortuna.com · 21/05/2026
New use of AI that was handy this week is a custom Claude Skill that’s helped: /grafana 2h Will connect to Grafana’s MCP server for Hardcover that collects all logs for that timeframe, analyze them and generate biggest points of improvement. Runs in a growing context, written to md.
Response time chart spiking may 16 and resolving may 21.
120
Adam Fortuna @adamfortuna.com · 19/05/2026
The 5 statuses of books: Want to Read Currently Reading Read Stopped / Did not finish Cookbook
041