This is my actual stack, been using Enferno for years, ReadyKit is just the SaaS layer on top. No straying, more like cleaning up what I already run in production.
Stack choices: Flask for its elegant simplicity without hidden conventions, Vue with Vuetify over CDN to skip build-tool pain (massive productivity and time win btw), PostgreSQL because boring is reliable, Redis (optional) for sessions and caching, and Celery when background jobs are needed (optional too)
Python is having a moment right now, between the AI ecosystem, Astral tooling and a huge talent pool. I think calling it the worst choice is a stretch :)
The real question is not raw speed. It's how fast you ship, how many users you need before performance matters and whether you actually own your stack. Most modern solutions push you toward third party auth. This gives you full self hosted auth out of the box.
For sure it depends on the requirement/use cases, but I think most performance issues have nothing to do with the framework. It's usually N+1 queries, missing indexes or no caching etc... Fix those first.
People chase FastAPI for speed, but if your bottleneck is the database or any network bound work, using async vs sync framework barely matters. Premature optimization is real.
Flask handles production traffic perfectly fine. And by the time it doesn't, you will know exactly where the real bottleneck is.
Ha, good catch. That is an old deployment script that could use some love.
I'll work on a modern quick deploy option for ReadyKit. I have an Ansible playbook that handles single server deployments, the monolith old school approach I still prefer. It just needs a bit of cleanup before it's shareable.
Open to feature requests too. If one click deploys to Fly.io, Railway or similar would help, I can add that. Let me know what would be useful.
Honestly, open source changed my life. I've built my own products on this stack. https://mixedcrm.com for example runs on Enferno, along with many several other projects of different sizes. It's been my go to foundation for years.
After taking so much from the ecosystem, giving back just felt right. And value has a way of coming back, whether through contributions, feedback, connections or simply knowing the code is being battle tested by more than just me :)
Thanks, that means a lot coming from someone who has clearly evaluated many of these stacks.
A few notes:
Celery is completely optional, it's there if you need background jobs, but the core app runs fine without it. Same with Redis, it falls back to filesystem sessions in development. The idea is to add complexity only when you actually need it.
And that is the beauty of open source. If you don't like Celery, swap it for RQ, Dramatiq or whatever fits your workflow. It's your code.
The stack is opinionated, but the opinion is simple, pick boring, battle tested tools and stay lean. No webpack, no heavy build chains, no node_modules black hole. Vue and Vuetify load from CDN in development and that is perfectly fine. It ships products just as well.
Django is fantastic, and if you're productive there, there is no reason to switch. But if you ever want something lighter where you wire up only what you need, give it a try.
Thanks for the kind words and thoughtful suggestions!
On the repos, they're intentionally separate projects. Enferno stays as a minimal Flask framework with fewer dependencies, ideal for anyone who wants a clean starting point. ReadyKit builds on top of Enferno with SaaS-specific features like workspaces, Stripe billing, and team collaboration. I plan to maintain both:
* Enferno: lean framework for general Flask projects
* ReadyKit: batteries-included SaaS template
This gives users the freedom to choose the level of complexity they need.
On the redirect, good point. I'll set that up so enferno.io links don't cause confusion.
On dark mode, fair feedback. I can add a dark mode toggle and will work on that.
But is it really vibe coding if you’re carefully building step by step and checking everything along the way? I feel like the kind of vibe coding people usually mean is more about blindly iterating until things work and patching bugs as they pop up—where you eventually get an app that runs, but it’s so messy that even a senior dev would struggle to audit or fully understand it.
The truth is I don't check everything along the way! That's part of my high scale, I can now work on a dozen projects instead of a couple because I'm freed up from having to read all of the code. A huge shift in mindset for sure, but it's been working great.