Wow, just as I had given up on Strapi, the solution appears. All that was needed was just setting the Heroku config to production.
I would usually be jumping for joy at this point, but I didn't today. And no, this is hardly is the saving grace for me to go back to using Strapi. In fact it again demonstrates the reasons I'm dropping it for my paid products (but I don't mind tinkering with it for side hobby projects) -
- It depended on one Strapi engineer's goodwill to answer your question in a forum, with no certainty that he will ever do so, because the free community version of Strapi doesn't come with dedicated support. Lottery-based support based on a very small pool of experts—community volunteers or Strapi ones—simply wouldn't work for me as a noob.
- It was such a small error in their docs about assuming Heroku will set Node.js environment to production, and that tiny detail made a whole bunch of developers on Stack Overflow run in circles around the conflict between SQLite in local environment versus PostgresQL in production environment. The weird thing is that Heroku had explicitly mentioned that the default setting is production, but yet, not quite for Strapi. Too new, not quite as stable for noobs like me yet.
So yeah. Through this I also learned new things around not the act of coding itself but ways to think about and decide on technologies to use as a developer. More importantly, I learned my current best answer to that age old question that everyone starting to learn programming will invariably ask:
"What programming language/framework should I learn?"
So here's my answer, for other fellow newbies:
Choose something that your friends are using, friends whom you know will help you, friends who are making the kind of products that you want to make. There's nothing wrong in trying to emulate them a bit when starting off. That's how we learn as babies and it continues to be a common way to learn professionally (just ask any artist or designer). I got lots of inspiration from some folks in the maker community, and seeing the products they make that I want to make myself, made me motivated to learn what tech they use. That's why I first started with HTML, CSS and PHP basics (@levelsio's no framework, no bs approach), then got into Ruby on Rails (ala the entrepreneurial steadfastness of @yongfook), then Vue and Nuxt (influenced by @dannypostmaa's shipping pace and quality). I got inspired by these guys and then slowly made friends whom you can lean on for help. Going with these tech help sustain me on my journey, continue to stay inspired, and persevere through challenging coding times.
Choose something that doesn't promise (just) to get you there fast, but something that will get you there and beyond. As with Strapi, I was lured by the 'fast' bait, but with it came a lot of other trade-offs downstream which I only realised much later, after much sunk costs. But how do you know if you're a noob? Yep you don't. So you pay for lessons like this with your time. But once bitten, twice shy. At least now I know, next time someone/something comes along that hard-sells you the bs that it's "Fast! Easy! Cheap!", be very careful. Caveat here is that if you don't mind changing course, you can of course start with what's fast first, then switch out for something else later that suits your use case. I often feel that way with nocode too - it gets a MVP to market fast, yes, but invariably I will hit some wall later, which makes me wonder if I should have started with something more stable instead. Do I really want to have to rewrite everything, everytime? There's a beauty to being able to use one tool (language/framework) all the way, progressively. And fast is often a function of competency, not necessarily language/framework. Once you stick to it and get good enough, you can ship fast even if you don't use frameworks or libraries.
So there you go. My best answer at the moment to that famous noob question "What programming language should I learn?" I'll probably cringe when I reread this months or years later. I would expect to cringe, because that would mean I had grown since. And this post would have served its purpose then.