Avatar of Pēteris Caune

Python Django PostgreSQL Bootstrap jQuery

Healthchecks.io is a SaaS cron monitoring service. I needed a tool to monitor my cron jobs. I was not happy with the existing options, so I wrote one. The initial goal was to get to a MVP state, and use it myself. The followup goals were to add functionality and polish the user interface, while keeping the UI and the under the hood stuff as simple and clean as possible.

Python and DJango were obvious choices as I was already familiar with them, and knew that many of Django's built-in features would come handy in this project: ORM, testing infrastructure, user authentication, templates, form handling.

On the UI side, instead of doing the trendy "React JS app talking to API endpoints" thing, I went with the traditional HTML forms, and full page reloads. I was aiming for the max simplicity. Paraphrasing Kevin from The Office, why waste time write lot JS when form submit do trick. The frontend does however use some JS, for example, to support live-updating dashboards.

The backend is also aiming for max simplicity, and I've tried to keep the number of components to the minimum. For example, a message broker or a key-value store could be handy, but so far I'm getting away with storing everything in the Postgres database.

The deployment and hosting setup is also rather primitive by today's standards. uWSGI runs the Django app, with a nginx reverse proxy in front. uWSGI and nginx are run as systemd services on bare metal servers. Traffic is proxied through Cloudflare Load Balancer, which allows for relatively easy rolling code upgrades. I use Fabric for automating server maintenance. I did use Ansible for a while but moved back to Fabric: my Ansible playbooks were slower, and I could not get used to mixing YAML and Jinja templating.

Healthchecks.io tech decisions in one word: KISS. Use boring tools that get the job done.

READ MORE
9 upvotes·1 comment·153.5K views
Alex Becker
Alex Becker
·
March 6th 2019 at 5:30PM

Here here! I use almost the same setup for my solo project uses almost exactly the same stack--although I went with a newer CSS framework called Bulma instead of Bootstrap (which was my go-to in the past), and I use gunicorn instead of uWSGI.

·
Reply

Django powers the server side, React powers client side. So this is not a "either / or" decision, they do different things and are not exchangeable. (analogy: "should I choose a diesel engine or an automatic transmission?" -- well, you likely need both!)

I've used Django a lot and can say it lets you be productive, and it has good security defaults – doesn't have many "footguns". If you already know Python, it would likely be a reasonable choice.

READ MORE
8 upvotes·11.5K views

Email hosting for the company email addresses: when I set this up 5 years ago, I cobbled together a Zoho+Gmail setup. My requirements at the time were:

  • must be cheap or free
  • must support a custom domain
  • I would like to read and write email in Gmail interface which I was already using for personal mail

Years went and things changed – most importantly, all privacy aspects are now significantly more important to me than they used to be. Late December 2020, I migrated to Fastmail, and tore down the previous setup. Some of the plus points for going with Fastmail:

  • their company values resonate with mine
  • they have an alright first-party mobile app
  • they support WebAuthn for 2FA
  • they have a reasonable pricing
READ MORE
7 upvotes·12.3K views
Recommends
on
DartDart

If you are interested in Flutter, learn it on your own time, parallel to the course. No matter what order you do them, eventually you will end up learning them all anyway ;-)

READ MORE
1 upvote·197.4K views
Shared insights
on
BraintreeBraintree

Braintree handles recurring credit card and Paypal payments for healthchecks.io. We liked the extensive developer documentation, the language-specific libraries and the friendly, timely communication from Braintree. Braintree

READ MORE
1 upvote·13.4K views
Shared insights
on
FabricFabric

We use Fabric for automating deployment and maintenance tasks: bootstrapping and updating application servers (using the "rolling update" pattern), pulling logs from the servers, running manage.py maintenance commands. Fabric

READ MORE
1 upvote·8.6K views
Shared insights
on
SentrySentry

Sentry has been an indispensable tool for finding out about application level errors. We also admire its UI for its design and attention to details. Sentry

READ MORE
1 upvote·394 views
Shared insights
on
GitHubGitHub

healthchecks.io is an open source project, and its source is available on GitHub. We use GitHub issues to track bugs and feature requests. We have received some substantial pull requests and are happy for that. GitHub

READ MORE
1 upvote·125 views
Shared insights
on
Sublime TextSublime Text

Armed with Anaconda plugin and Seti theme, Sublime Text is a great environment to work on Python projects. Sublime Text

READ MORE
1 upvote·110 views
Shared insights
on
NGINXNGINX

We use NGINX both as reverse HTTP proxy and also as a SMTP proxy, to handle incoming email.

We previously handled incoming email with Mandrill, and then later with AWS SES. Handling incoming email yourself is not that much more difficult and saves quite a bit on operational costs. nginx

READ MORE
1 upvote·101 views