- Notes on Solopreneurship Engineering
- Posts
- Issue #42: A whole week of coding š„
Issue #42: A whole week of coding š„
So many things in the hoven for HeyEcho, I'm excited on how easy will be to plan and generate blog posts!
I dedicated the whole week to improving HeyEcho.
I know, I know, what youāre thinking.
āBut what about distribution? What about customer acquisition?ā š¤¦
A few weeks ago I shared how I use HeyEcho myself and how painful it still feels. How can I sell something that feels painful to me when I use it? I basically redefined the MLP (Minimum Lovable Product) version.
Table of Contents
A fun purely technical change
Since I started my solopreneur journey, Iāve relied on Render. It is super easy to set up, it has ādeploy on mergeā, and has a very straightforward in-house IAC. However, when it comes to infrastructure, Iām a bit of a control freak. š
I always want/need to understand whatās going on and why. I know, it has a cost. But if you have a decent knowledge and experience of cloud environments and system architecture I think it is worth it. Itās also something that I personally enjoy dealing with. š
Starting this week HeyEcho now runs on Kubernetes on DigitalOcean! š
I have previous experience with Terraform, which I didnāt love, so this time, I decided to try Pulumi, which has been very fun to use. Iām not going to explain in depth the pros and cons of the two, but as a personal preference, given that Pulumi is about writing a Python program (it also supports JS and Go), it feels more friendly compared to Terraformās HCL. You can also rely on old but gold programming concepts like reusability, abstractions, etc.
As an example, I defined a microservice class for each part of HeyEcho, the website, the web app, and the API and each class has its own DNS configuration, Deployment, Service, Secrets, etc.
I also love this Pulumi graph visualization.

Pulumi graph visualization of the infra resources of HeyEcho
Again, itās not the best thing to do from a business growth perspective. Letās say that I took a break by working on this. š
However, I feel more free and in control now! š
Relying on k8s also allowed me to ship a feature, more on this later, really fast by relying on k8s Jobs.
Despite Render being a great product, I also faced a few things that I didnāt like:
when a service is deployed it can take A LOT of time before it gets attached to the load balancer, and you can confirm it from the deployment logs. Sometimes it even times out and you need to retrigger it. They perform a port scanning to understand where your service is listening, and they have specific documentation on how to indicate the listening port to avoid this, but tbh it never worked for me. š With k8s itās way easier and I can also properly set up the startup probe and everything is ready to fly! š
DB migrations: maybe itās a skill issue, but on Render, Iāve also never been able to set up to run a command before starting the application. So every time I have a DB migration I need to check the deployment log, wait for it to finish, SSH into the instance, and run the migration script. š With k8s itās easily doable with init containers! š
scaling the number of replicas: on Render to scale the number of replicas you need to pay for the āProfesionalā plan. Basically on top of the resources, just to even scale the number of replicas manually to a fixed number you need to pay for 19$/month. Again, super easy to do in k8s. š
To be fair the transition was not painless because I didnāt know Pulumi, and I had some issues with DB connections dropping, etc.. But everything works now! š„³
Whatās new in HeyEcho?
Letās move to the changes from a product perspective! As I mentioned, Iām addressing what makes it painful for me to use HeyEcho.
Async generation
Finally! š„³

Async generation CTA
Now itās possible to generate blog posts in the background and the content library will show the status.

Pending blog post
As I anticipated this is the feature that has been very easy to implement thanks to k8s. Initially, I was considering more complex solutions for handling the async jobs like Celery, or Airflow. In the end, Iām just submitting a k8s job using the same Docker image of the API and running a specific script. Easy! š š¤
Blog post excerpt
This is another thing that was taking some back and forth between HeyEcho and ChatGPT when generating blog posts.
Once I have a blog post generated by HeyEcho Iād need an excerpt to use when listing the previews of the blog post. Iām talking about the text that you usually see below the hero image in blog posts listing pages.
Now HeyEcho provides that as well. š

Blog post excerpt
With this change, I also redesigned the blog post library.

Redesigned blog post library
Whatās cooking now?
If you remember, the other very painful point I have is thinking and planning the topics to write about.
And thatās what Iām currently working on! And Iām super excited about this! š¤©
I thought a lot about how to implement this. I did some research on how content could be organized, etc. I donāt wanna spoil too much, but there will be a āContent Hubā section that will help not only simply provide topic ideas but will help implement a more structured content marketing strategy by creating hierarchical topic ideas.
Anyway, I started today and Iām confident that in a few days, it will be ready, so youāll just need to wait for next week's issue.
Conclusion
So many exciting changes! Once the Content Hub is done Iāll be more confident to resume selling and marketing more aggressively. šŖ
On top of that, Iāll be able to dogfood more easily!
Reply