TL;DR;

In this post I show how I built a serverless CMS/Blog system based entirely on free and modern PaaS services such as Airtable, Glitch (formerly Gomix, Hyperdev) & Surge.sh.

The end result is:

You can visit it at: http://caring-eggs.surge.sh/

And check out the source code:

Ok, tell me more…

Lately I’ve been thinking how server code is becoming less and less relevant each day, and how everything you needed to code back in the day is now offered as a cloud service at your disposal, such as:

Authentication/authorization (Auth0, Twilio), asset hosting (AWS S3), database (Firebase, Airtable), AI (google prediction API), payment processing (Stripe), etc…

The remaining parts of your app, the ones that make you “unique”, can be written in isolated & scalable modules in any language and/or framework of choice, which nowadays can be also easily deployed. Such easy-to-deploy, lego-like blocks of functionality can be achieved with modern services such as AWS Lambda, Zeit Now or, what concerns us today, Glitch.

Since I’ve been messing around with these ideas for a while, I decided to see how doable it really was by making a PoC:

A Markdown Blog system, à la Canvas or Medium, with Airtable as Database/CMS

PaaS Architecture

Disclaimer: I chose services I’m interested in and/or using at the moment, altough the stack can be flexible at every level:

Database/CMS

Alternatives: Fieldbook (see my related post) , Firebase Realtime, etc…

Node.js Proxy/Auth Backend

Alternatives: Heroku, Zeit Now, Parse, Aerobatic, AWS Lambda, etc…

Ember.js SPA Frontend

Alternatives: Zeit Now, Aerobatic, Firebase Hosting, Pagefront, AWS S3, Github Pages, etc…

Designing the Database Structure

Posts table

Authors table

Comments table

Crafting a nice client with Ember.js

I won’t enter into much details here, but I prototyped a blog app with Ember.js, using my own ember-airtable data adapter addon. If you like to learn more make sure to check out my post about it.

I chose Ember.js since it’s the framework we’re currently using at work (Nimbo X), but you can use whatever framework/library you like, say React, Angular, Vue, etc…