May 16, 2018

Show IH: Posthook - Webhook Scheduling API

Hello Indie Hackers!

A few months ago I decided to quit my job and focus full-time on Posthook is an API Service that developers can use to implement features that require work to be done at specific times in the future (think reminders, delayed welcome emails, etc.).

I got the idea after fruitlessly searching for a service like this for a feature I was working on and only finding questions on Stack Overflow of other developers looking for the same thing. I’m excited to say it’s at a point where I’m ready to share Posthook to a broader audience.

Any feedback is greatly appreciated :). There is a free, no credit card plan available that I hope will help with small projects.



  1. 2

    What made you decide to quit your FT job before Posthook was able to replace your FT income? Just curious.

    1. 1

      Great question, my original plan was to only leave my job when it could replace 50% of my income as that would have meant there was some good traction there. But I just felt like I wasn't making enough progress while only working on it nights when I got home tired from work and weekends when I had other obligations. So I did the math and decided I was comfortable enough savings-wise to dedicate myself completely to Posthook for at least a few months and if it doesn't work out, I figured it wouldn't be too difficult to find another software engineering job in NYC. It also helped that I really believe there is a need for a service like this as I myself would have paid for it on multiple occasions.

  2. 2

    Nice work! I work on a product that heavily relies on scheduling and performing tasks to the minute.

    I am curious what your tech stack is and how you plan to scale up? What about your tick function, is it making calls to the db?

    1. 1

      Thanks :)

      I have a handful of services written in Go in charge of handling the different parts of a Hook's lifecycle. They are deployed to Google Kubernetes Engine and use Cloud Pub/Sub for queuing tasks up for processing. To scale I only need to increase the size of the cluster and the number of pods allocated for each service. I plan on setting this all up to autoscale.

      One of the services is in charge of queuing up Hooks for fulfillment and does call out to the DB (postgres) to get upcoming Hooks ahead of time. If it comes to it, I can horizontally scale this DB by sharding Hooks by their 'postAt' value.

  3. 2

    Carlos, congrats! As a semi-professional web developer, I can totally see value in this. A couple of questions:

    1. This is basically Cronjobs-as-a-Service?

    2. Are tasks added to a queue of some sort? Are they re-tried a number of times?

    3. Upon failure, an email is nice.. but the option to call another webhook (POST ../custom/endpoint/error.php) would be a nice addition. That way my app's users could be notified in app and I'd be able to integrate slack/trello/jira, etc.

    1. 1

      Thanks Steve!

      1.) It solves some of the same problems cron jobs solve but in a different way. I like to think of it like the difference between a pull-based vs a push-based approach, cron jobs being pull and Posthook being push. Cron jobs are also not the easiest thing to deal with especially when you want them to be highly available since you then have to find ways for them to coordinate jobs.

      2.) Yes they are added to different queues depending on what stage of the cycle they're in (ingestion vs outgoing). At the moment they are only retried once 5 seconds after the first failure and it is possible they are retried more times if their status wasn't able to be updated successfully. The idea is that I can guarantee at least two consecutive tries before they are marked as failed.

      3.) I have plans to add other notification options like Slack, Webhooks, and Pager Duty. Though I need to figure out if another webhook really is useful because if a customer's site is down for example, their failure webhook will probably also fail.

  4. 1

    Great work Carlos!

  5. 1

    This comment was deleted 7 months ago.