What I Learned from Self-Hosting Fizzy

I recently had the experience of moving Fizzy to my personal server.

To cut to the chase, it was such a satisfying experience that I thought, “How often do you find a Rails open-source project this well-organized?”

How I Discovered Fizzy

Fizzy is a service that manages goals and tasks in very simple card units.

What’s impressive is its intentionally minimal UX instead of complex features.

  • Cloud (SaaS) version available

  • Source code publicly available (O’Saasy License)

    → Competing directly with the original author as a SaaS is prohibited, so it differs from traditional open source

  • Self-hosted version is free (for personal/internal company use)

  • Cloud version

    $20/month for unlimited when exceeding 1,000 cards (including creation/deletion)

I initially tried the cloud version lightly with about 30 cards, and I really liked this sense of “this is enough.”

That naturally led me to self-hosting.

A Repository Like a Rails Best Practice Textbook

As a service made by 37signals, Fizzy’s repository felt like a Rails operations guide in itself.

  • Based on Ruby on Rails

  • Kamal deployment guide provided

  • Docker execution method documented as well

Since I already had experience with Kamal deployment, following the guide allowed me to get it running on my server without major issues.

It made me think, “Ah, so this is why 37signals is the origin of Rails.”

Fizzy uses an email-based magic link login method. So the most important configuration during deployment was SMTP.

Since it was for personal use, I used Mailgun’s test sandbox account. The setup itself was very simple, but since the actual login email domain was different, there was an issue with emails going to spam.

It wasn’t a problem for now, but I plan to switch to a custom domain + proper sending address in the long run.

One Disappointment: No Import Feature

Up to this point, everything went smoothly. But there was one thing that was disappointing.

There’s no feature to import data exported from the cloud version into the self-hosted version.

Checking the GitHub Discussion, I found a comment saying it’s been in development since December 2025, and when I inquired about a month after that comment, I received a response that it’s still in development.

So I Built My Own Import Rake Task

So for personal use, I built my own rake task.

I converted the data exported from the cloud to match the self-hosted DB structure and successfully imported it. Using Claude Code to understand the specific data structure made implementation really fast.

You can see the code here: https://github.com/leegeng/fizzy/blob/main/lib/tasks/import.rake

Thanks to this, I could continue the workflow I had in the cloud, and I was convinced that moving to self-hosted was the right choice.

The Joy of Using Open Source

I wanted to contribute directly to Fizzy’s open source, but I haven’t found a suitable contribution point yet.

Still, through this cycle of actually using it, building missing parts myself, and fixing things as needed, I started to feel hopeful that someday I’ll naturally be able to contribute.

Future Work: Fizzy as a Foundation for Personal Productivity

After moving Fizzy to self-hosted, I started thinking about using this service not just as a “goal management tool” but as a foundational database for storing things to do.

Fizzy’s card model is more versatile than expected.

  • Simple goal/task structure

  • Clear state changes

  • Almost no unnecessary metadata

I felt it’s a pretty good format for storing what I do in the smallest units.

So from now on, I want to think of Fizzy as

“The minimum unit storage for everything I do”

and try changing only the presentation layer on top of it.

Plans to Implement Timestripe UI in My Own Way

There’s a service whose philosophy and UI I really love, but I can’t keep paying for due to the price.

It’s Timestripe.

The UX that organizes long-term goals on a time axis and naturally connects them to what needs to be done now is really impressive, but the cost has always been a concern for personal use.

So the next step I came up with is:

Use Fizzy as the backend (data storage) and build a Timestripe-style UI myself to use

Structurally:

  • Fizzy as the unchanging source of truth

  • UI as a presentation layer that can be changed anytime

With this approach, I plan to experiment with a time-axis-based UI tailored to my work style.

Conclusion

The experience of moving Fizzy to self-hosted wasn’t simply about “saving $20 a month,” but rather:

  • What a well-made Rails service looks like

  • What makes open source that considers operations different

  • How important a product philosophy of maintaining simplicity is

It was a time that reminded me of all these things once again.

It’s still at a personal experiment stage, but as I accumulate experiences of actually using and extending things like this, I cautiously hope that someday I’ll be able to contribute to open source more naturally.