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 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 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.
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.
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.
Built with
Frontend
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 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 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
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.