The Matrimony of Airtable and Notion
An overview of how I turned Notion into a content editor for my dev portfolio with the help of Airtable and a few scripts.
I avoid paying for subscriptions at all costs (no pun intended).
I still cringe at the fact that I’m coughing up $20 a year to Google (i.e. less than $2 a month) because I ran out of storage on my 20+ year-old account. Until I muster up the energy for a proper digital spring cleaning, I’ll probably be paying them forever.
But Notion is an exception. They’re a company I’ll gladly give my money to. Their platform is simple enough for anyone to pick up, packed with bells and whistles if you want them, and honestly, it’s fun as hell to use.
When I set out to build my dev portfolio, I knew I wanted a static site. Something fast, lightweight, and easy to maintain. I also knew I’d want to indulge in the occasional blog post. But static sites don’t come with a CMS, and I needed a way to manage content without bloating the stack.
I wasn’t willing to settle for any other editor. And while Notion isn’t a headless CMS out of the box, the internet is full of generous tinkerers and free tools. With the right setup, I turned it into exactly what I needed.
I’m happy to report that I’m writing this post in Notion right now.
A Beautiful Matrimony
To make it work, I needed an intermediary. A go-between that could connect Notion to my static site.
I looked at Contentful. Their free tier is solid, and the localization features are impressive. But for what I needed, it felt like overkill. Like buying a high-end DSLR just to use it as a point-and-shoot.
That’s where Airtable comes in. Airtable is a spreadsheet-database hybrid that makes it easy to organize and manage structured content. In my setup, it acts as the database between my Notion docs and my site, housing all my content in simple, queryable tables.
Airtable was the simpler choice. I only needed one base with three tables:
- Blog Posts
- Portfolio Entries
- FAQ Just the parts of the site I actually plan to update every now and then.
Under the hood, my site is deployed to Netlify and runs on Astro.js and TypeScript. I use scripts to manage the content pipeline. Three Python scripts pull content from Notion and send it to Airtable. A final utility script, written in TypeScript, fetches that data via their API and builds it into the site.
Happily Ever After?
At first, I wanted to use an Airtable automation script to trigger a Netlify webhook. But running scripts requires a paid plan (no thanks lol).
So I turned to GitHub Actions instead. It ties everything together. I have a workflow that runs the scripts and rebuilds the site when I trigger it manually. Since I don’t update content often, there's no need to run it on a schedule. But if that ever changes, I can just update the YAML file with a cron job. Easy peasy.
So There You Have It
This was my scrappy little setup to keep Notion as my editor and use Airtable as my lightweight CMS. And best of all, it was #FREE99.