DEV Community

Jorge
Jorge

Posted on

I built an open source social media tool for agencies with FastAPI + React + Supabase — here's how

Hello everyone 👋
I'm Jorge, a developer from Spain, and over the past few months I built Orkly — an open source social media management tool built specifically for agencies and community managers.
Here's why I built it, how it works, and the tech behind it.

The problem

If you've ever managed social media for more than one client, you know the pain. You're juggling different brand voices, different platforms, different content styles — and most tools aren't built for that.
The existing solutions like Hootsuite or Buffer are either too expensive for small agencies or too focused on solo creators. Hootsuite charges per social account, which means if you're managing 10 clients with 3 accounts each, you're paying hundreds every month just to exist.
I wanted to create something different. A tool that puts client management first — where each client has their own identity, their own brand voice, and the AI model understands that.

What Orkly does

Orkly is built around three core ideas, with the feedback of a friend of mine that guided me through the sector's requirements, NaVa Studio:

1. One dashboard for all your clients

Every client lives in a single place. You can see at a glance which ones have a brand voice configured and which ones don't. No more switching between tools or spreadsheets.

2. AI content generation in 3 styles

Paste your draft, hit improve, and instantly get 3 AI-powered versions — professional, casual, and viral. Each one is generated in parallel using GPT-4o-mini, so it's fast and cost-efficient.

3. Brand kit per client

Each client has their own tone of voice and custom prompt. The AI uses this automatically every time you generate content for them — so Roast & Co always sounds like a specialty coffee shop, and LegalNext always sounds like a modern law firm.

Clients dashboard

AI Editor with 3 variations

File storage

The tech stack

Here's what I used and why:

Backend: FastAPI + Pydantic v2 + Cloudflare R2

FastAPI is just the right balance of simplicity and performance for an API like this. Pydantic v2 makes data validation clean and fast. I also generate the 3 content variations in parallel using async calls to OpenAI, which keeps response times low. For the file storage I used Cloudflare R2, it is like handling with files in S3 but provided by Cloudlfare, also in there I could manage DNS config for email registrations. I used a layered-architecture for this project so each module has single responsabilities and easy-to-read code.

Frontend: React 18 + Vite + Tailwind CSS v4

Vite 8 made the dev experience really smooth. Tailwind v4 was a big upgrade — the new CSS-first config is much cleaner. React kept things simple and predictable.

Database + Auth: Supabase

Supabase gave me PostgreSQL, Google OAuth, and Row Level Security out of the box. The RLS policies mean each user can only access their own clients and generations — no custom auth middleware needed.

AI: OpenAI GPT-4o-mini

GPT-4o-mini hits the sweet spot between quality and cost for this use case. The prompts are structured to always respect the client's brand voice when generating content.

Deploy: Google Cloud Run + Cloudflare Workers

The backend runs on Cloud Run — fully managed, scales to zero when idle. The frontend is deployed as a Cloudflare Worker, which means global edge distribution with basically zero config.

The hardest part to build

Honestly, at the beginning was the rate limiting. I wanted to limit free generations per IP per day, but also handle the case where Supabase is temporarily unavailable. The solution was an in-memory fallback — if Supabase is down, the rate limiter switches to a local dictionary automatically. It's not a perfect solution, but it works reliably in production while I focus on higher priority features. One of them was the Cloudflare R2 configuration, I needed to learn how to use presigned urls as it is as working with S3 (boto3) and integrate that workflow inside my app, communicating frontend and backend securely.
The other tricky part was making Google OAuth work seamlessly across local development and production with different redirect URLs. Supabase Auth handles most of it, but the environment configuration took longer than expected.

What's coming next

Orkly is just getting started. Here's what's on the roadmap:

📅 Post scheduling — schedule content for a specific date and time
📱 Instagram publishing via Meta Graph API
💼 LinkedIn and Twitter/X publishing
📊 Per-client analytics
💳 Stripe plans — Free, Solo, Pro and Agency
💾 File storage
🤖 Web scraping for logos and client brand identity
And much more features...

The goal is to build the tool I always wished existed for agencies — where client management is the core, not an afterthought.

Try it and give me feedback

Orkly is live at orkly.app and fully open source on GitHub -> Orkly open source repository.
I'm launching on Product Hunt this Wednesday — would love your support if you find it useful or you see projection in it! You can follow the launch here: Orkly on Product Hunt.
Would love to hear from anyone who manages social media for multiple clients — what's the most painful part of your workflow? Drop a comment below, it helps a lot to keep developing useful features 👇

Top comments (0)