Happy New Year 🥳

A short one today, just wanted to wish you a Happy New Year, and remind you to check your Yearly Brew. And, new since the feature was announced, you can now share it. Here’s mine.

There were many changes since the v4 release. Mainly bug fixes, infrastructure improvements (I switched to Ruby 3.3), exposing custom fields in the API, and the aforementioned Yearly Brew.

There’s now also a newsletter, as you probably know already. Some people said it went to spam, because some other people marked the email as such. 😅

I hoped the easy unsubscribe would be enough, but you can never predict how people are going to react to an email. Or, how email services will. To ensure you receive the next email, you should probably add my email to your contacts. This should keep it out of your spam folder. Since most of you liked the newsletter, and haven’t unsubscribed (yet), you can expect more of them in the future. Not many, but only when I deem something important enough.

Anyway, enjoy the rest of your day, and have a happy new year full of great coffee. 🥳

PS: In case you have some time on your hands, and/or want to know more about my year, feel free to check long form Yearly Review on my personal blog.


Visualizer v4

I’ve been working on this for a while. Several ideas that I’ve implemented have been in my TODO list for more than a year. It was a very busy year, so I kept postponing, and doing bit by bit here and there, but the progress was super slow. A couple of months ago I even deactivated my Instagram account, so I could have a bit more time to focus on this. And since mid-September, I was all in. The Pull Request is massive: 104 commits, 174 files and 4,140 lines changed. 🙈

So what’s new?

Logo and UI

As you’ve probably already noticed, Visualizer finally has a logo. 🥳

Visualizer logo

Another thing you’ve undoubtedly noticed is the change in color scheme and UI. I took inspiration from my favorite designer, but in general I just wanted the interface to feel lighter.

From a completely new menu, fancy overlaying notifications, improvements in responsive design, new heading fonts, to nicer error pages, and countless tiny fixes, there aren’t many lines of display code that weren’t touched.

I’m a software developer, so there are still many places where it screams designed by an engineer, and I do hope to tackle those in the future. And, if anyone out there wants to help out with UI/UX, my email is always open.

Infinite loading

A massive UX change: pagination is gone. Everywhere. In its place is continuous loading, which makes it so much faster to scroll to the thing you are looking for.

Infinite loading

Instant Filters

For sure my favorite feature of this update. I usually have several coffee bags open at the same time, and I also like to re-order coffees I’ve liked in the past. And I always keep a decaf in the fridge, because you never know when the espresso martini kind of evening shows up. And in all those cases I want to quickly find the last shots I made with a specific coffee, and which settings I used.

I first took a stab at this problem with Recent Grinder Settings, but I was never super happy about it. More often than not, the coffee I was looking for, was no longer on the list.

Then in October I took a deep dive into grouping shots by coffee, and that took a ton of time and work, and it looked great. But when I actually tried to use it, I was not happy at all. It was too cumbersome, and it didn’t much improve the speed of finding a coffee. Back to the drawing board.

Then one day it hit me: why not just make the search instant?

Instant Filters

Despite the name, Instant Filters have nothing to do with either instant or filter coffee. It’s all about filtering your own shots by any parameter you want instantly. And, of course, it comes with infinite loading as well. So regardless if you’re on your computer, phone, tablet, or however else you’re accessing Visualizer, finding the exact settings you used in the past is now just a couple of keystrokes away. I couldn’t be happier by how well this works in practice. 🥰

Like Recent Grinder Settings before, this feature is only available to Premium members. But, of course, you can still search including your own shots, and with the aforementioned infinite loading, that also got much faster and nicer.

Community

Decent People was a great thing when there were only tens / hundreds of us here. But since this community has grown so much, that page became nearly useless. A list of public people ordered alphabetically simply isn’t that useful anymore. I took a couple of stabs at reworking it, but in the end I decided to cut it. You don’t care about people’s names, you care about their shots. And since Search is such a vague term, and that page is all about shots from other people, that page got rebranded into Community.

Real-time updates

With the new UI, I made several changes in how I display shots. This allowed me to enable real-time updates. So if you create, delete, or even edit a shot, it’s immediately reflected in all of your browser windows/tabs. That also works with Airtable changes. As soon as they notify me about a change, it gets reflected in the shot list. ✨

Real-time shot sync

Performance improvements

There are also a bunch of small optimizations and improvements all over the codebase, with the most work done on speeding up the parsers, which drastically improved upload speeds. Importing Beanconqueror files, for example, is now 20-300x faster. And no, the second 0 after 3 isn’t a typo. 🚀

In closing

And now, I’d love to hear from you. What do you think about these changes? What do you like, what should be improved? Especially if something doesn’t work quite as expected, please let me know immediately!

Thank you for reading, and I hope you enjoy all these changes and improvements. ☕️


Free Premium Weekend 🥳

As you probably noticed, Visualizer has had a rough couple of days.

What happened?

Yesterday I was hit with the database going down unexpectedly. It took me about 2 hours to get everything up and running, and then I was just happy it all worked.

There were many issues, but one that reemerged and I wanted to address for a while, was running Redis inside the main app container.

I decided to tackle this issue today, and managed to cause even more downtime. Once I succeeded to get separate Redis instances running and remove them from the main image, Fly decided it wasn’t happy about something and just wouldn’t boot the app. Then Docker Hub went down as well, making deploys much harder since it impacted my CI/CD pipeline.

I managed to brute-force it back to life, by nothing other than repeating the same commands over and over again. And then it just started working. Computers, am I right?

After that I decided to go for a quick run to clear my mind, and when I came back I rebuild the entire Docker / Fly setup. With Docker Hub now back online, the deploy pipeline was smooth again, and the new setup feels much more stable1.

I’m very sorry for all the issues these ~3 hours of combined downtime have caused. This is not how I want this service to run.

A little thank you

To show my appreciation for your understanding and support, everyone will have free Premium this weekend.

Hopefully things will stabilize now. 🤞

P.S. If you’re not aware, you can always check if something is wrong with Visualizer on the Visualizer Status page.

  1. At least initially. Time will tell. 😬