DEV Community

Hirvesh Munogee
Hirvesh Munogee

Posted on • Originally published at hirve.sh

Weekly Indie Log #17

Image

Hello again! Another edition of the Weekly Indie Log! This week I am going to be talking about progress with Stomod, review the roadmap, future plans and diving into mobile apps again.

Stomod

With Stomod, things are chugging along nicely with the newsletter feature launched (in beta) I am further refining the feature and working on integrating it into the paid plans. I managed to integrate newsletter analytics into the platform and now I am working on integrating this into the paid plan. The idea probably would be to provide unlimited subscribers + a numbers of “sends” per plan - e.g. 5000 sends per month on Pro, 10,000 per month on Pro Plus.

I am still working on the economics of this and hope to wrap this up by the end of the week.

Newsletter Analytics

The goal with Stomod is to make everything trackable around. To achieve that, I need to have metrics implemented for every facet of the content distribution.

For blog posts, some months back, I implemented web analytics which tracking a plethora of metrics for your blog posts in a privacy friendly way.

For newsletter analytics, these are the following metrics being tracked:

  • Sends : How many emails were sent for a particular blog post/campaign publication

  • Delivered : How many emails out of those sent were delivered successfully to subscribers inbox

  • Opens : How many emails out of those delivered were opened by subscribers

  • Open Rate % : The open rate of all the emails sent and delivered

  • Clicks : How many links were clicked as part of the emails sent

  • Click Rate % : Click percentage of the links

  • Unsubscribed : How many subscribers unsubscribed due to the campaign/blog post publication

  • Reported Spam : How many subscribers reported the email as spam

  • Bounced : How many subscribers email bounced

With the above metrics in place, it is very easy to see which type of content is being consumed best by your newsletter subscribers and which ones are driving negative actions (unsubscribes/spam reports).

Post Previews

Previewing posts before publishing
Previewing posts before publishing

Another feature which I delivered as part of the newsletter implementation is previews. When publish a blog post, I could iterate on the post to make it look nicely formatted and Stomod would update it every time I changed the post.

With newsletters into the equation, it became a priority to implement previews as users would want to check how the post looks on the blog/email before sending it out.

How does it Work?

For this implementation I wracked my brain on how to implement this and came up with this solution:

Every time Stomod syncs a post, it does a diff of the existing post and the new post. If there are changes, it generate a preview “token” which it stores in the database.

When a user view a post still in draft on the dashboard, Stomod append the preview token to the post URL and Stomod, if it detect the preview token, will render the page even if it not published, otherwise it throws a 404.

Previewing Posts as Email Newsletters

Previewing the posts as newsletter is another ball-game altogether as Stomod needs to render the blog post as email then render the email as HTML. However, with the custom email renderer I built, it was dead easy and users can easily preview as email within Stomod too!

Previewing blog post as email newsletter
Previewing blog post as email newsletter

Moving Sync to pg-boss

Image

For those of you who follow me on X and have read my previous weekly indie logs, you would know how much I love pg-boss!

pg-boss is a job queue built in Node.js on top of PostgreSQL in order to provide background processing and reliable asynchronous execution to Node.js applications.

Previous Stomod’s Notion sync mechanism was based on a Next.js API route which was triggered every minute by a Google Cloud Scheduler task.

While it was working correctly, there was some caveat to how the previous implementation worked which caused some issues.

If the sync was not completed during the one minute it was allocated to run, Google Cloud Scheduler would trigger another sync process irrespective of the previous one still running and this would cause some race conditions.

With the move to pg-boss, I can explicitly define that the sync job needs to run once every minute and if it does not complete within a minute, not to trigger a new one until two minutes have elapsed and if the previous job is still running to kill it and trigger a new one afresh.

This makes the sync more reliable and doesn’t cause race conditions and internalized all my infra dependencies to only my VPS server 🥳

Marketing & SEO

On the marketing and SEO side, I have decided to up the game with SEO and working on getting more content out for SEO purposes. I will also be integrating more tools into Stomod to be able to track how your content is doing on the SEO front.

One of the top items on my list is to integrate Google Search Console data into Stomod’s dashboard so that you can have visibility into what pages are indexed v/s not and get notifications when they get indexed as well.

Product Hunt Launch

I am also finally planning to launch Stomod on Product Hunt. I will probably launch it before the 19th of August and will be compiling a list of tips on how to launch on PH and try to follow those as closely as I can. You can subscribe to my newsletter for a look at that list below.

Mobile App

Finally, I have decided to delve into the mobile app business yet again (after my initial failed foray with OutLater - my social media scheduling app). I am thinking of working on a wide audience app like a habit tracker (I use Habitify daily, but with my subscription up, I want to dive into developing one of my own).

I will work on this on weekend likely and post about it on X and see if it gains any traction. This will be an exercise in getting back into the fray of using Expo and building more app in the future.

That’s it from me - catch me on x.com/hirvesh

Top comments (0)