Back to Work

Crosspine – Publish Once, Everywhere

A multi-tenant social publishing workspace. One draft, fitted to each network's rules, approved by your team, and published on schedule to twelve platforms from a single calendar.

Next.js 16TypeScriptPrismaPostgreSQLBullMQStripe

Live Project

View site →

Year

2026

Role

Design & Development

Crosspine – Publish Once, Everywhere hero
01

Problem Statement

  • A dozen tabs: posting the same thing everywhere means logging into every network in turn and pasting the same text by hand.
  • Rules you find out about too late: character limits, media counts, aspect ratios, and video lengths differ per network, and most only complain after you publish.
  • No room for a team: a scheduling queue on its own has no notion of who drafts, who approves, and what is allowed to go out unreviewed.
  • Publishing quietly fails: expired tokens, rate limits, and platform outages turn a scheduled post into silence unless something is watching and retrying.
Exploration phase
02

Goals & Objectives

  • Put every network behind one adapter interface, so adding a platform never means touching the scheduler.
  • Validate a post against each network's real constraints before it can be scheduled, not after it fails.
  • Make workspaces, roles, and approval first-class rather than bolted onto a single-user tool.
  • Encrypt channel tokens at rest and scope every query to one workspace at a single enforced choke point.
Solution implementation
03

The Solution

  • A composer with per-channel overrides and live constraint validation, backed by twelve platform adapters.
  • A calendar with drag to reschedule, and a media pipeline that probes uploads and builds thumbnails, renditions, and alt text.
  • A background worker with idempotent job ids, automatic retries for what is retryable, and normalised platform errors for what is not.
  • An approval workflow for team members, analytics gathered on a schedule, and an AI assistant for drafting and rewriting captions.
System architecture
04

Results

Crosspine is live at crosspine.io. A post goes out once and lands on every network it was written for, shaped correctly for each. A team member drafts, an admin approves, and the queue publishes on schedule without anyone watching it. Failures retry on their own and surface the platform's real error instead of a generic one. Connected accounts, media, scheduling, and analytics live in one workspace, and supporting another network means writing one adapter against an interface that already exists.

Hi there, I'm an AI assistant.

Ask me anything about Nicolas Laforet.