All the Small Things

Nothing too exciting lately, I’ve been busy with adding exciting functionality to European Coffee Trip Business project. But still, looking at the changelog there’s quite a bit of code.

Bumped Ruby to 3.4.3, Postgres to 17.4, Highcharts to 12.2, and a bunch of other dependencies got refreshed.

There’s been a slight tweak to coffee management section of shot edit page. Before, when you had no coffee bags on a roaster, the roaster would not be shown in the list. Since the shot is linked to a coffee bag, there’s no point in showing the roaster that can not be linked to a shot. However that confused at least two users so now I will always list all roasters. And when you select a roaster without a coffee bag, you’ll get a short explanation with a link to create a new coffee bag. Hopefully this will make things clearer. 🤞

Many other UI polishes were released over the past month: shot comparison should be more readable with dotted lines instead of opacity change, shot list should not overflow anymore, the checkbox should no longer hide the text below, overly precise floats should be nicely rounded,… 💅

After the Sunday morning attacks I was also forced to add some more bot/script kiddie preventions in place. I didn’t want to add Home Barista like infuriating delays, but something had to be done. So the user sign up page now relies on Turnstile to do the checking. With this change existing users are not impacted, and new ones should be minimally. Unfortunately internet is a hostile place nowadays. 😔

If you celebrate Easter, enjoy the holiday! 🐣

In any case: I hope you pull some great shots this weekend! ☕


Spring Smooth Sailing

After the migration adventures and follow-up fixes, I’m happy to report that everything with Lemon Squeezy is now running smoothly! 🍋 Thank you to everyone who stayed patient during those initial hiccups - your understanding means the world to me. 🥰

I don’t think I say this nearly enough: I want to thank every single Visualizer user — your shots, shared links across Discord and forums, and general enthusiasm make this whole project worthwhile! A special, extra-deep thank you goes to all Premium users, past, present, and future. Your support is what keeps Visualizer growing, improving, and honestly, existing at all. You’re the reason I can dedicate so much of my free time to building this platform we all love. 💖

Welcome, Gaggiuino Users! 🎉

I’m thrilled to announce that Visualizer now has native support in Gaggiuino since v.6655d6d! A warm welcome to all new users coming from the Gaggiuino community.

There was a small hiccup with “Water Dispensed” being off by a factor of 10, which I’ve quickly fixed, including retroactively correcting existing shots. Since I don’t have a Gaggiuino myself, the initial parser was built based on sample files I found on GitHub. If you notice anything else that doesn’t look quite right, please don’t hesitate to let me know!

And to all Gaggiuino users: I’d love to hear your feedback and feature requests. What would make Visualizer even better for your workflow? And if you’re enjoying it, spread the word to your fellow enthusiasts! 🤝

Interface Improvements

I’ve unified the display of shots across all user and community pages, creating a more coherent and consistent experience throughout the site. This meant saying goodbye to the last of the .slim templates—a technical debt I’m thrilled to finally leave behind.

The recently introduced comparison selector has been improved too - now the page won’t jump around when you select a shot for comparison, keeping everything visually stable.

Behind the Scenes 🛠️

For the API users, I’ve added the updated_at field to both the index and shot show endpoints, which contains the timestamp (in seconds since Unix epoch) when a shot was last modified.

I’ve also fixed several Airtable syncing issues, making the entire process more stable - especially for roasters, coffee bags, and two-way syncing.

As always, there have been tons of tiny UI/UX improvements, performance enhancements, bugfixes, and dependency updates. For the technically curious, you can check out the full changelog since the last update.

Thanks again and enjoy the rest of the weekend! ☕


On Migration and Other Updates

Remember the migration I mentioned and then the sudden late night update? After three days of intense debugging and working directly with Lemon Squeezy’s lead developer (huge thanks! 🙏), I believe all issues have been resolved. While the relationship started rocky, I’m confident everything will be smoother from here on. 🤞

Lemon What? 🍋

The main difference you’ll notice is in your bank statements. Instead of seeing Visualizer, mr.si, or Miha Rekar, charges will now appear as Lemon Squeezy or LEMSQZY* STORE. This is because they’re acting as the merchant of record, handling all local taxes and regulations (you can read more about it on their website).

However, for any issues, refunds, or questions, please still contact me first at [email protected]. Nothing else is changing - I just needed help dealing with increasingly complex tax regulations, especially with the current political climate being about as predictable as a cat on espresso. 🎢

New Features

The biggest addition comes from Mark’s brilliant suggestion: you can now quickly compare shots by selecting them right from your shot list. Just click the checkbox in the top right corner of any shot, then click another shot, and boom - instant comparison!

I’ve also improved Airtable syncing by resolving tag syncing issue. Shot tags now sync both ways, and any changes to coffee bags on the Airtable side will now sync to Visualizer (previously it was one-way only).

There were also a bunch of small fixes like showing share buttons for Beanconqueror and profile download even when you’re logged out and the usual dependency updates. As always, you can find the complete details in the full changelog.

One Last Thing ❤️

If you notice any remaining issues from the migration (missing Premium status, double charges, etc.), please let me know immediately.

Thank you again for your patience and understanding during this transition! 🥰