Building CreatorModo — Intro

Hello.
Welcome back.

This is going to be the first episode of a technical series where I explain:

  • what I’m building,
  • why I’m building it,
  • how I’m building it,
  • and all the engineering decisions that come with it.

So first things first.

The Problem

Around 6 months ago, I started seeing people on Instagram asking viewers to comment some phrase or keyword to get a link in their DMs.

As an intelligent engineer, what did I do?

Nothing.

But after seeing it everywhere for months, curiosity peaked and I finally decided to build something that does exactly that.

Am I late?
Obviously.

But I still decided to build it because:

  1. I genuinely wanted to understand how this entire automation flow works.
  2. I apparently have nothing better to do personally.

Professionally? Sure. I work at a company that raised $1.5M USD.
But we’ll talk about that some other day.

Skipping the small talk.


What This Series Is About

This is going to be a 5–6 part series covering:

  • the architecture,
  • frontend,
  • backend,
  • auth/security,
  • infrastructure,
  • deployment,
  • scaling decisions,
  • and probably some mistakes I already regret.

The goal isn’t to make a sanitized tutorial.

I want to explain:

  • the actual engineering decisions,
  • why I made them,
  • what broke,
  • and what I would probably do differently now.

Quick Architecture Overview

We’ll go deep into each part later, but here’s the high-level overview.

1. Frontend

  • React 19 SPA
  • TypeScript
  • Vite for bundling
  • Tailwind 4 for styling
  • shadcn/ui components built on Radix primitives
  • React Router 7
  • httpOnly cookie auth talking to a FastAPI backend

Frontend is deployed on Vercel.


2. Backend

The backend is split into two services.

Automation Service (Main API)

Built with:

  • FastAPI
  • Async SQLAlchemy
  • Alembic for migrations
  • PostgreSQL
  • JWT auth via httpOnly cookies
  • Fernet encryption for Instagram tokens
  • Resend for email handling

Webhook Ingester

Also built with FastAPI.

This service:

  • receives Instagram webhook events,
  • publishes them to RabbitMQ using aio-pika,
  • and lets the worker processes consume jobs asynchronously.

The automation workers then process events and fire DMs through the Instagram Graph API.


3. Database

PostgreSQL.

The GOAT.
Kindaaa.

I’m also using RabbitMQ as the message broker between services so webhook ingestion and automation processing remain decoupled.

The idea is simple:

  • webhooks come in fast,
  • workers process at their own pace,
  • nothing gets dropped,
  • and the API doesn’t melt under load.

Alembic handles schema migrations so the database can evolve safely without manual SQL chaos.


Deployment

Backend infrastructure is deployed on Railway.
Frontend is deployed separately on Vercel.

Why separately?

Because deploying frontend apps on Railway is a bit of a pain sometimes, and honestly Vercel just does frontend hosting better.

Simple as that.


Other Obvious Stuff

  • Instagram Graph API for automations
  • Git + GitHub for version management
  • RabbitMQ for async workflows
  • FastAPI everywhere because I like my APIs fast and typed

What’s Next

This was just the introduction and architecture skim.

In Part 1, we’ll properly break down:

  • how the services communicate,
  • why the system is split this way,
  • queue design,
  • async processing,
  • and how everything flows end-to-end.

The product is still in beta because Meta approval takes forever.

But if you still want to try it, you can drop a request here:

CreatorModo Contact Page

More soon.

Comments

Popular posts from this blog

Shifting Expectations in the Software Job Market: A Mid-Level Engineer’s View

Hello world

People Are Actually Reading My Blogs?