Handing over the reins of GeniePy

A few days ago, I finished the process of handing over the maintenance and further development of GeniePy to a new owner. I've worked on the project for around 3 years and after all this time, it was finally time to sell. In this blog post I'll briefly describe the process.

Starlette beginnings

I started building GeniePy sometime back in 2021. At that time I had a lot of SaaS business ideas but the first step towards building any of those was to build the basic SaaS functions first - user registration, login, payments, password resets, the list goes on.

So I built GeniePy mostly for myself. The idea of building and selling a SaaS boilerplate in Python wasn't entirely new. Indeed, a few SaaS boilerplates in Python already existed on the market. What was different was the technology stack. Every engineer has a slightly different taste in terms of tech stack, and mine at that time involved Starlette. So I wrote the first version of GeniePy on top of Starlette.

Over time, I realized that even though Starlette was (and continues to be) an excellent framework, it wasn't very well known in the startup world. FastAPI, which is an API framework built on top of Starlette, was (and is) extremely popular, but unfortunately Starlette wasn't. This was a problem. Making online sales is already pretty difficult. And if the product has an inherent quality that can potentially act as a blocker in making sales, that's not a very good situation to be in.

The rewrite in Reflex

Around mid 2022, the Python ecosystem saw the launch of a framework called Reflex. Reflex came with the promise that you could code your entire application (backend and frontend) in Python. All you had to do was stick to the data structures and primitives that Reflex offered. And at deployment time, your code would be compiled into a FastAPI backend and a Next.js frontend, all taken care of by Reflex. You could deploy the FastAPI server as you would deploy any other backend API. And the Next.js frontend could be deployed as a static site (or as any other Node application).

This sounded very exciting to me. After the realization that I would have to move away from Starlette, I was looking for other frameworks to rewrite the boilerplate in. Reflex seemed like an excellent fit. At that time I was between jobs, so I decided to just go for it. It took me about 2-3 weeks to finish the rewrite (in whatever time I had left over from job interviews). I was even able to find time to take part in the Reflex community. I joined their Discord, managed to submit a few PRs to the Reflex framework, and even helped them test out the beta for their hosting service. The Reflex community was very welcoming and friendly to this newcomer.

After the rewrite was complete, I launched the updated version. That launch felt very good. It brought a lot of new energy to the project. And it felt like the updated version would be very useful to Python developers looking to build and ship SaaS applications quickly. I wrote a few blog posts, posted the links to a few online water coolers, and managed to get some more attention to the project, some of which turned into customers.

Time

After the rewrite to Reflex and the overall positive response, I started to have users ask me for more features.

I managed to ship quite a few of those. But there were a few others which were excellent feature suggestions but a bit too heavy of a lift to be done within the spare time I actually had. At around the same time, a few changes happened in my personal life which resulted in me having even less time (and energy) available to devote to side projects. GeniePy was still active and I was shipping security updates, but new feature development had effectively paused.

This was the time that I realized that it might be time to move on. I had been working on the project for close to three years. If I wasn't able to find the time and energy to work on it, I wanted to find someone else who did.

So, I started looking for potential individuals (or companies) willing to take the project on and invest more time and resources into it.

Luckily, with the rise of the Indie Hacker movement, the process of selling businesses online has become a lot more convenient than it used to be. I posted the project on a few micro-SaaS acquisition marketplaces and received quite a few leads.

Buy // Sell Startups

A few weeks after posting the project on micro-SaaS marketplaces, I received an email through Buy // Sell Startups from someone interested in acquiring GeniePy. This was from Hannes Lehmann running the companies sistemica and devtech.pro.

We exchanged a few emails and had an initial chat on Google Hangouts where we first got to know each other, and then spoke about the project. We talked about the technology stack, the revenue GeniePy was making, the future development ideas I had, Hannes's plans for it, and so on.

The first call went really well. I had the feeling that Hannes really saw the potential in the project and was willing to invest the time and energy into improving it further.

After the initial chat, we scheduled a few more follow-up calls, where I did codebase walkthroughs, explained the different workflows I had set up to publish releases, basically everything that went behind the scenes. After those follow-up calls, we let everything settle in our brains for a few days, allowing both of us to process all that new information.

And after that delay, we both felt good about making the transfer. It generally felt like a very good mutual fit. I personally was very happy that the project could again get the time and energy it really deserved. We mutually decided upon June 1st as the date to transfer all the accounts from me to Hannes.

The transfer itself went quite smooth. Coincidentally, Hannes was (is) also based in Germany, which made the whole thing a lot more convenient because we were both familiar with conducting business in this country. Honestly, the longest part of the process was just the DNS delay as a result of moving from one provider to another.

Conclusion

Overall, I'm super happy about GeniePy having a new owner.

It's been only about a month and GeniePy has already been upgraded to support Reflex 5.0, which was something that the users had started asking for recently. The future plans documented by the new team also look very much aligned with what the user feedback over the last few months has been.

I think it's safe to say that the future for GeniePy looks quite bright.