Adam Fortuna
@adamfortuna
Full-stack product developer (Rails/React) in Salt Lake City, UT. I love enlivening experiences, visualizing data, and making playful websites. 📚 Founder @ 🎧 Developer @libro.fm ✍️ Blogger @
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!
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.
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...
It took a day to clear the queue after these updates! Processed some of the most jobs in a day too. 😅
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.
Reading @elevateutahpac.bsky.social s email about things to love about America and its spot on 👌
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. 🤞
Wow, Fable absolutely eats up credits. I've never before hit the limit in the last year using Claude Code.
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. 👀
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. 🖼️
Exciting to see these prototypes we created almost 2 years ago (!) finally coming together. We're saving all references in a join table used for Mentions and hydrating the review, but it can also be used for showing All Mentions. In Discussions, this should allow for "Show Mentions" too!
These notifications require a new kind of mentions feed. Inspired by BlueSky's this will be a separate "mention" feed whether you have notifications on or off. All of these are stored with just reference type + id in JSON Slate, and are hydrated at runtime.
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.
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. 📚
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.
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.
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 📉!
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.
Money - This section is a bit broad. It contains: - Spending by month, by category (pulled from Tiller) - Investments with values over time and asset allocation tiller.com is super-neat, and syncs to a Google Sheet this pulls from. Somewhat anonymized screenshots for some of these.
Daily Checkin - I've been tracking my happiness level (1-9) for a while. I added an X/Y graph to set my gut feel on two areas: Calm to Anxious Drained to Energized Tracking this alongside a happiness level has been fascinating. I've been having back pain and are also tracking that daily.
Theme - This one is just fun. I created a few themes. Sometimes I'll suggest a new theme with a link and it'll generate one. I really like the colors from Mario Brothers 2 (NES), and have a theme just for that. 😂
Learn - Building this out today. I drop a topic in here, and it'll generate a 5-level plan to become proficient in it with examples based on my projects and personal interests. I have a separate repo (called wired), that has a skill to create a new lesson with code samples running in Docker.
Recipes - The recipes section is pretty nifty. I can either drop a URL or a photo of a cookbook, and it'll generate a note in my Obsidian vault. I can set dates I made each recipe, and keep track of what I'm planning to make. These are all just stored in markdown files with frontmatter.
Goals: Fitness. I've been trying to focus a bit more on my health lately - namely getting more exercise and eating better. Seeing these helps keep it on my mind. Weight syncs from Withings scale → Apple Health → Exist.io → Rails Steps go Apple Health → Exist.io → Rails Exist has an awesome API.
Goal: Grow Hardcover to $10k/month. What get measured gets improved right? Since switching to part-time in my job, growing Hardcovers revenue is a high-priority for me. Seeing this daily is good motivation.
Goal: Read more books - This one is basic - it pulls in books from the Hardcover API and shows them. Same thing I'd see in my Hardcover goal, but nice to see on my personal homebase.