Changelog

What has shipped in ContentWorkflow.

One person builds this, so releases are frequent and specific. Every entry below is something you can go and use — newest first. For what the product does today, read the feature overview or the documentation.

August 2026

Billing, storage and the public site.

New accent colour, and a site that explains the product

The app had outgrown a one-page landing site that said almost nothing about what it does. It now has pages you can actually read before paying.

  • The brand accent moved from teal to indigo. Dark mode picked up the change too: surfaces carry a trace of the brand hue instead of being flat neutral grey, so cards and popovers separate from the background without extra borders.
  • New marketing pages covering the whole feature set, publishing in detail, Instagram automation, and who the app is built for.
  • Product documentation at /docs and this changelog.
  • A sitemap and robots.txt so the public pages are actually indexable, plus site analytics.

Subscriptions, and signup open to anyone

Until now the only way in was an email allowlist. Sign-in with Google is open to everyone and the subscription is the gate.

  • $29/month or $290/year, USD. One plan with every feature, no free tier and no trial. Cancel any time and keep access to the end of the period you already paid for.
  • Signing in with Google creates your user and workspace immediately; the app then asks for a subscription before letting you into the workspace.
  • A billing page that opens the Stripe customer portal — change the card, download invoices, switch between monthly and annual, or cancel. Card details go straight to Stripe and never reach our servers.
  • Subscription state is only ever written from a signature-verified Stripe webhook, and each event id is recorded before anything is applied, so a redelivered event can't double-charge or double-apply.

Every file lives in object storage

Uploads used to be able to land on a local disk depending on configuration. That's gone.

  • All uploads go from your browser straight to Cloudflare R2 over a presigned URL, so a 400 MB export never passes through the app server and can't hit a request size limit.
  • Playback and downloads use short-lived presigned links, which means no file is publicly guessable.
  • The local-disk driver was removed entirely — one storage path in every environment, so a file can no longer exist in one place and not another.

Followers-only automation rules

“Comment a keyword and I'll DM you the link” works better when it only rewards people who followed.

  • Comment and DM rules can now require the person to be a follower before the rule fires.
  • On a comment rule the check gates the public reply as well, so the thread never promises a DM that isn't going to arrive.
  • When someone is skipped, the run history says why — including the case where Instagram simply won't tell us whether they follow.

July 2026

The month the app was built, from the first schema to Instagram automation running in production.

Storyboards, and an inbox that behaves like Instagram

The DM inbox shipped the day before and immediately needed to match what people expect from the real app.

  • Storyboards on the content page — a drawing canvas for planning shots, saved with the video it belongs to.
  • Replies render the quoted original message above the bubble, and story replies are labelled as such.
  • Emoji reactions appear on the bubble, kept current by the reaction webhook and by history sync.
  • Instagram closes the reply window 24 hours after someone's last message; the inbox now disables the reply box when the window has passed instead of letting you send into a void.
  • Reels and images sent in DMs render properly rather than arriving empty.
  • The dashboard header shows the client and project you currently have selected.

Instagram DM and comment automation

Keyword rules that reply to comments and DMs on Instagram accounts you connect yourself, plus the inbox to read what comes back.

  • Comment rules: reply publicly, send a private DM, or both, when a comment contains or exactly matches your keywords. Rules can be scoped to one post or run account-wide.
  • DM rules: auto-reply when an incoming message matches a keyword.
  • A first-comment rule that drops your chosen comment on a post seconds after this app publishes it.
  • A unified DM inbox with live message delivery, plus a bell notification and a chime for every new inbound DM.
  • Instagram delivers webhooks more than once; each rule firing is claimed in the database before any call to Instagram, so nobody gets replied to twice.

TikTok posting, done the way TikTok asks

TikTok requires the person posting to make certain choices actively rather than inheriting a default.

  • Privacy level, comment, duet and stitch toggles, and commercial content disclosure are explicit fields on the TikTok row. The privacy options offered are read live from that account, so you can't pick something the account isn't allowed to post.
  • Send-to-drafts is a first-class mode: the upload lands in your TikTok inbox as a draft and you finish it in TikTok's own editor. Nothing goes public.
  • New posts are attributed to a project automatically instead of landing unfiled.

Sign-in page, follower stats, workspace polish

The week the app stopped looking like a prototype.

  • A proper sign-in page, plus pricing, terms, privacy and a cookie consent banner.
  • Followers gained is tracked per account and shows up in analytics.
  • A default account selector, so publishing knows which connected account a video belongs to without asking every time.
  • Publishing is blocked with a clear message when no account is connected, rather than queueing a job that can only fail.

Now called ContentWorkflow

The working title was “Video CRM”. It was never a CRM.

  • Renamed to ContentWorkflow, on contentworkflow.co.
  • The root URL became a public landing page and the app moved behind /app, with a stable alias so existing bookmarks and installed app shortcuts kept working.
  • One header and footer shared across the public pages.

Mobile layout, rebuilt content page, and importing old posts

Ideas arrive on a phone and so does most reviewing, so the mobile layout stopped being a shrunken desktop.

  • A mobile layout modelled on Instagram and TikTok: bottom tab bar, search and filters in sheets, seamless system bars.
  • The content page was rebuilt around three tabs — overview, review, publishing — with the details block on one line and files as a drag-and-drop target when empty.
  • Link existing posts: content you published before you signed up can be attached platform by platform, picked from the account's recent uploads instead of pasting URLs. Linked posts count as published and sync analytics like everything else.
  • An “Other account?” toggle for when the same video went out on more than one account.
  • Faster tab switching via a client router cache and cached layout queries.

Supabase Auth, and markdown descriptions

Authentication moved onto Supabase, which is where the database and realtime already lived.

  • Google sign-in on Supabase Auth, with session checks verified locally instead of a round-trip on every request.
  • Content descriptions and notes take markdown, with a live preview beside the editor.
  • A video uploaded from the overview tab now lands in the review tab as a version, rather than sitting as a loose file.
  • A tighter, more compact layout across every page.

Real publishing, ideas inbox, and R2

The point where the app started doing things outside its own database.

  • Live uploads to YouTube, TikTok and Instagram over each platform's official API, run as background jobs with per-step retries.
  • A scheduler that claims due posts on a schedule and publishes them, with a publish history log per video.
  • Inspiration: a Pinterest-style idea inbox, and an Android share target so sharing a link or clip from any app saves it without opening ContentWorkflow.
  • Uploads moved to Cloudflare R2 via presigned URLs.
  • Clients, projects, social accounts and automations moved into settings; the calendar became a dashboard view rather than a separate page.
  • Content type collapsed from separate TikTok / Reel / Short values into one SHORTFORM type, because it's the same vertical video wherever it goes.

First build

The whole skeleton, from the schema to the command palette.

  • Workspace, client, project and content records with the nine-stage pipeline behind them.
  • Kanban board with drag and drop, a calendar, and a media library across every client and project.
  • The review system: video versions, timestamped comments, resolve and unresolve.
  • Publishing and analytics as background jobs.
  • Realtime sync so a change on one device shows up on another without a refresh.
  • Global ⌘K search, keyboard shortcuts, a notifications centre and the settings pages.

Start using it.

One plan, every feature above included — the publishing pipeline and Instagram automation are not separate tiers.

$29/month or $290/year, USD. No free tier and no trial — cancel any time and keep access to the end of the period.

Changelog: Every Release, Newest First · ContentWorkflow