Notipo didn't start as a product. It started as a Python script that saved me 10 minutes every time I published a blog post. Over the course of a year, that script grew into an n8n workflow, then a sprawling multi-workflow automation, and finally into the app you see today. This is the story of that evolution.
Phase 1: A Python Script for Featured Images
It started with a simple annoyance. Every blog post needed a featured image, and I was creating them manually in Canva. Same layout every time — background image, title text, category label. Twenty minutes of dragging text boxes around for something that should be automatic.
So I wrote a Python script using Pillow. It read titles and categories from a CSV file and generated 1200×628 PNG images. Run the script, get your images. Done.
Phase 2: Discovering n8n
I discovered n8n, the open-source workflow automation tool. I connected Airtable to n8n and turned my Python script into an API endpoint. Now the flow was: fill out an Airtable form, n8n picks it up, calls the Python API, and stores the generated image in MinIO.
This felt like magic. But it only solved the featured image problem.
Phase 3: The Full Notion-to-WordPress Workflow
The manual publishing process: write in Notion, copy content, paste into WordPress editor, fix code blocks, fix formatting, upload images one by one, create featured image, set SEO metadata, hit publish. Fifteen to twenty minutes of tedious work after the writing was done.
I decided to automate the entire thing in n8n. The workflow grew to handle:
- Markdown conversion — pulling from Notion's API, converting blocks to Gutenberg
- Code block transformation — wrapping in Prismatic blocks with language detection
- Image caching — Notion's image URLs expire after an hour, so every image needed downloading and re-uploading to WordPress
- Orphan cleanup — removing old images when removed from Notion
- Featured image generation — calling the Python API
- SEO metadata — setting Rank Math fields via REST API
- Status management — updating Notion after each operation
I ended up with 50+ nodes across multiple paths. Airtable sat at the center with five interconnected tables.
Where It Broke Down
The automation worked. But living with it revealed problems:
The execution log was useless — Polling every few minutes created pages of empty "success" runs. Finding the actual sync in the noise was painful.
Airtable was an expensive dependency — $24/month for a spreadsheet acting as a database. Every API call added latency.
The complexity was unmanageable — 50+ nodes, multiple paths, debugging meant clicking through node after node. Adding a feature meant touching nodes in multiple places.
n8n is an incredible tool for connecting APIs and building automations. But there's a complexity threshold where a visual workflow becomes harder to reason about than code. I had crossed it.
Rebuilding as an App
The new stack: Fastify backend with PostgreSQL (replacing Airtable), pg-boss job queue (replacing n8n's execution engine), and Next.js frontend. The Gutenberg block converter became a proper TypeScript module with tests. The image caching pipeline became a service with clear inputs and outputs.
Every pain point had a direct solution:
- Noisy logs → job queue only creates entries for actual work
- Airtable costs → PostgreSQL with Prisma, zero monthly cost
- Debugging → proper error handling, structured logging, stack traces
- Feature development → changing one switch statement, not rewiring workflow paths
What n8n Taught Me
I don't regret the n8n phase. Building the workflow forced me to understand every edge case of the Notion and WordPress APIs before writing application code. The workflow was a prototype that ran in production. By the time I wrote the app, I had a complete specification from months of real usage.
Lessons for Anyone Automating with n8n
- n8n is perfect for prototyping — validate an idea in hours instead of days
- Watch for the complexity cliff — if you dread opening the workflow editor, you've passed it
- Paid dependencies add up — evaluate whether a simple database would work
- Polling is a poor man's webhook — look for webhook-based triggers whenever possible
- The workflow is the spec — if you outgrow n8n, your workflow is the most detailed specification you could ask for
Try It Yourself
If you're writing in Notion and copy-pasting into WordPress — give Notipo a try. The free plan covers 5 posts per month. It took me a year of incremental automation to get here. You can set it up in 5 minutes.
Originally published at notipo.com/blog/from-n8n-to-app
Top comments (0)