Case Study

Social Media Manager

In Progress

Post photos and videos to YouTube, Instagram, Facebook and Twitter/X in one click — with scheduling.

Stack
Python · FastAPI · SQLAlchemy · React · Vite · TanStack Query · Tailwind CSS
My Role
TBD
Live
TBD
Repo
TBD
Social Media Manager dashboard with connected accounts, platforms and recent posts
The built-in Reel Creator tab inside Social Media Manager

Overview

Social Media Manager posts photos and videos to YouTube, Instagram, Facebook, and Twitter/X from one dashboard, in one click, with optional scheduling.

Problem

Posting the same piece of content to multiple platforms means repeating the upload, caption, and scheduling work per platform — and each platform's API has its own quirks, auth flow, and media constraints.

Solution

A single dashboard backed by one platform-integration interface: every platform implements the same AbstractPlatform contract, so posting logic, scheduling, and token management are shared, and platform-specific behavior stays isolated to that platform's own service file.

Key Features

  • Multi-platform publishing — YouTube, Instagram, Facebook, Twitter/X
  • Optional post scheduling
  • AI-generated captions and hashtags directly from the uploaded photo or video (video is sampled into frames and sent to a vision-capable model) — pluggable across Gemini, OpenAI, and Anthropic
  • A built-in motivational Reel script generator — the same category of tool as the standalone Content Creator product
  • OAuth tokens encrypted at rest per connected account
  • An extensible platform pattern: adding a new platform is one new service file plus a one-line registration — no other files change

Architecture

FastAPI backend: routers for accounts, posts, and the reel creator; SQLAlchemy models (Account, Post) over SQLite. A services/ layer holds one class per platform (YouTube, Instagram, Facebook, Twitter), each implementing a shared AbstractPlatform interface and registered via a @register_platform decorator — the rest of the app never branches on platform name directly. A background scheduler runs queued posts at their scheduled time. The frontend is React + Vite (Dashboard, CreatePost, Accounts, History pages), talking to the API through TanStack Query.

Technology

Python, FastAPI, SQLAlchemy, SQLite, APScheduler, OpenCV (video frame sampling for the AI caption feature), React 19, Vite, TanStack Query, Tailwind CSS.

Development Approach

Built using an AI-assisted development workflow (AIDLC) — Claude Code, Kiro and Amazon Q accelerate implementation, while architecture, decisions and quality remain owned by the developer.

Challenges

Every platform's API has different constraints — Twitter/X's free tier doesn't support media uploads via API at all, and Instagram only works with a Business or Creator account linked to a Facebook Page. The AbstractPlatform boundary exists specifically so those differences stay contained to one file each, instead of leaking into the rest of the app.

Decisions & Trade-offs

An extensible per-platform service pattern was chosen over one monolithic posting function — more upfront structure, in exchange for adding a fifth platform later without touching the existing four. The AI caption feature was built provider-agnostic (Gemini/OpenAI/Anthropic) rather than tied to one vendor, for the same reason.

Lessons Learned

TBD.