0%
Aymen
Back to Works
WebShipped2026

PostPlan

Social media planning and publishing tool — multi-brand calendars, approval workflows and scheduled publishing to eight networks.

My Role
Full Stack Developer
Timeline
Oct 2025 — Jul 2026
Status
Shipped
PostPlan
Overview

PostPlan is a Planable-class SaaS where marketing teams plan social content, collect sign-off, and publish. Each brand gets its own calendar; drafts move through an approval workflow involving teammates and clients before being scheduled out to eight networks — Facebook and Instagram through Graph API v25, X through its v2 API, LinkedIn, and more.

Under the hood it is a Fastify server structured around clean architecture, running against its own PostgreSQL database with JWT authentication — a stack the product moved to after leaving Supabase. Stripe handles subscriptions across Free, $29, $79, and $199 tiers, with the number of connected brands as the lever that moves customers between plans.

The Challenge

The problem to solve

Publishing one post to eight networks means dealing with eight different APIs — Graph API v25 for Facebook and Instagram, X's v2 API, LinkedIn's, and the rest — each with its own auth flow, payload shape, and failure modes. On top of that sits an operational constraint: nothing may go live before the team and the client have approved it. And the original Supabase backend tied data, auth, and hosting to a third party, when the product needed to own them itself.

The Solution

How it was built

The server was rebuilt as a Fastify application with clean-architecture layering: the planning, approval, and publishing use cases sit behind thin HTTP adapters, and each social network is integrated against its official API — Graph API v25, X v2, LinkedIn, and the others. Data moved into a self-managed PostgreSQL database and authentication onto JWTs, completing the migration off Supabase.

Approval workflows gate the pipeline: a post only reaches the scheduler once the required team and client sign-offs are in. Monetization runs on Stripe with Free, $29, $79, and $199 tiers, where the count of connected brands is the metric that moves an account to the next plan.

Key Features

What it does

🗓️

Multi-Brand Calendars

Every connected brand has its own planning calendar, keeping different clients' content streams cleanly separated.

✅

Approval Workflows

Drafts route through team and client sign-off before they can be scheduled — nothing goes live unreviewed.

📤

Eight-Network Publishing

Direct integrations with Facebook and Instagram (Graph API v25), X (v2), LinkedIn, and more publish each post through the platform's official API.

⏰

Scheduled Publishing

Approved posts are queued and pushed out at their planned time across the connected networks.

💳

Brand-Based Billing

Stripe subscriptions across Free, $29, $79, and $199 tiers, with the number of connected brands as the pricing lever between plans.

🔐

Self-Owned Auth and Data

JWT authentication and a dedicated PostgreSQL database replaced Supabase, putting identity and data fully under the product's control.

Technologies Used

Built with

Frontend

Next.js

Next.js powers the web client — file-based routing and per-route code-splitting keep a multi-view dashboard (calendars, approvals, billing) manageable in a single React codebase.

TypeScript

TypeScript spans client and server, which mattered most during the Supabase-to-Fastify migration and when modeling eight networks' distinct payload shapes — the compiler catches contract drift before the APIs do.

Backend

Fastify

Fastify is the API layer of the clean-architecture server: a low-overhead Node framework whose plugin and schema-validation model keeps HTTP routes as thin adapters over the planning, approval, and publishing use cases.

Data

PostgreSQL

Since moving off Supabase the product owns its data in PostgreSQL, where relational integrity ties brands, posts, approvals, and subscriptions together with real foreign keys and transactions.