Product

Why we built a planning calendar (and what it actually changes)

Most social schedulers stop at "queue + posting times." That misses the layer above — ideas, content categories, campaigns — where most empty-queue problems actually live. Here's what we added, what's gated, and what we deliberately didn't build.

Feedloop teamJune 15, 20268 min read

Until last week, Feedloop's scheduling layer was the same shape as every other social media scheduler: a queue with drag-to-reorder, a posting-times grid, and a read-only calendar view. That covers the last mile — when does this post go out — and skips the mile before it.

The mile before it is where most empty-queue Fridays actually start. Not in the scheduler. In the planning layer that schedulers don't have.

The pattern we kept seeing

A user signs up, connects their accounts, sets a posting-times grid (Mon/Wed/Fri 9am), schedules out two weeks of content, and feels great. Two weeks pass. The queue empties. Friday rolls around and there's nothing scheduled. The user opens the queue, sees the empty state, types "I need to write a post" in their head, closes the tab, doesn't come back until Sunday.

The instinct is to call this a discipline problem. It isn't. It's a tooling problem. The scheduler tells you "your queue is empty" on the day it runs out — which is the worst possible moment to find out. By then there's no time to think, only time to scramble.

A planning layer surfaces the gap a week or two earlier, when you still have the slack to fill it without writing a post under pressure. That's the value. Everything else is just UI shape on top of it.

What "planning" actually means

We landed on three primitives after spending a lot of time looking at how Notion, Asana, Buffer, Hootsuite, Later, and CoSchedule talk about content planning. Each of them models some of these; none of them model all three together with the scheduler attached. Specifically:

  1. Ideas — dated drafts that aren't committed to a publish time yet. You can drop a one-line idea on Thursday with just a title, refine the body the day before, then promote to the queue. The calendar shows it's coming, even though the publisher won't touch it until you say so.
  2. Content categories — recurring themes you post about ("Education", "Customer story", "Product update"). Color-coded. One per post. Lets you see at a glance whether your last two weeks were balanced or you accidentally posted four product updates in a row.
  3. Campaigns — time-bounded content arcs with a start, end, and optional lead/trail prep windows. A launch week. A Black Friday push. A conference moment. Posts inside the window auto-inherit the campaign tag, and a recap rolls up performance per platform when the window closes.

These three are the smallest set we could find that produces the planning behavior we wanted without bolting on a second tool. None of them are revolutionary in isolation — agencies have been using whiteboards with categories for decades, and campaign planning predates social media. The leverage comes from having all three live inside the calendar where the posts actually ship, so the data flows through to reporting without a spreadsheet step.

What surprised us during the build

A few specifics worth flagging:

Ideas and drafts ended up being the same thing. We initially modeled "idea" as a separate row status, parallel to "draft". After two days we realized this was just a poor man's tag — a draft with a target date IS an idea; a draft without one IS a backlog item. We merged them. One status, one table, one mental model. The distinction a user sees is purely "do you know when you want to post this yet?".

Campaigns absorbed the "event" primitive for free. The same backend table that holds system holidays (with anomaly-suppression metadata for stats) was already shaped right to hold user campaigns. We added a kind discriminator and got campaigns + anomaly suppression in one stroke. A 40% engagement spike during your launch week shouldn't fire an alert — the spike is the point — and the existing anomaly engine already knew how to look up the event_calendar table on every check. So campaign-aware anomaly suppression came along for free.

Multi-channel ideas are one input, N rows. When you drop an idea for three channels, the backend creates three sibling rows that share content, title, target date, category, and campaign — but point at different social accounts. They can be edited independently after, and they can be promoted to the queue with per-channel staggered timing (Twitter at 9am, LinkedIn at 11am, Instagram at noon). The UI groups siblings back into one calendar pill with a "×3" badge so the calendar doesn't look like three duplicate cards in a row.

What's free, what's gated

The calendar feature itself is universal. Every tier — Free, Starter, Pro — gets the full Month + Agenda views, ideas, drag-and-drop scheduling, multi-channel idea fan-out, the day drawer, and CSV bulk import. Locking the calendar entirely behind a paywall would have been hostile — competitors give this for free and we'd look bad by comparison.

What's gated is scale and reporting:

  • Free: 3 content categories, 2 campaigns
  • Starter ($9/mo): 5 categories, 5 campaigns
  • Pro ($29/mo): Unlimited categories and campaigns, plus the new Streams stats tab — per-category engagement rate, per-campaign recap with platform breakdown, drill-down into any campaign's post list with individual metrics

The reasoning: 3 categories is enough for a solo creator. By the time you're running 10+ categories across multiple brands, you're an agency or a marketer with real budget, and Pro pays for itself in the time you save not building campaign recaps in a spreadsheet.

What we deliberately didn't build

Three things came up during planning that we cut, for the same reason: they would have added surface area without enough value-per-pixel to justify it.

Week view is hidden in v1. It exists in the codebase but the toggle is off — Month + Agenda cover ~90% of use. Adding more view modes turns the calendar into a control-panel choice menu before you've seen any of your data. We initially also shipped a Kanban view; testing showed it duplicated the calendar without earning its surface, so we removed it.

Personal events / out-of-office markers. The schema supports them. We cut the UI for v1 because anyone serious about marking PTO already has a real calendar app for that, and adding it created a manager page where the user has to decide "campaign or personal event?" on every create — a choice they shouldn't have to make in our tool. Maybe later.

An AI-suggested category for new posts. We have an MCP server. Claude / Cursor / ChatGPT could absolutely read a post's text and infer the right category. But inferring beats asking only when the inference is correct ~95% of the time, and we couldn't reach that bar without training-pair work that wasn't the priority. So the human picks. The MCP tools still let an AI assistant set the category if you ask it to.

How to actually use it

The 30-second loop we landed on:

  1. Open the Plan page. See the next two weeks.
  2. Spot a gap (Wednesday is empty). Click +. Drop a one-line idea: "Customer story: how Jamie cut planning to 30 minutes". Pick a category. Save.
  3. Tomorrow morning, open the idea, flesh out the body, click Schedule, pick a time. Done.
  4. Sunday evening, you get one digest email summarizing what shipped that week and where the gaps are next week.

What this replaces, for most users: a Notion doc nobody opens, a Google Sheet you fill in once and abandon, a Trello board you only look at on Mondays. The calendar fills the gap those documents tried to fill but couldn't because they didn't connect to the scheduler that actually ships posts.

The thing we're watching for

The bet is that visibility into upcoming gaps is the load-bearing feature, not category color-coding or campaign recap stats. Those are nice; the gap-surfacing notification ("you have 5 unplanned days this week, your queue is projected to dry by Friday") is the thing that should change behavior. We'll know in a month or two whether users who get the weekly digest fill more days the following week than users who don't. If they do, the planning layer is doing its job. If they don't, it's just prettier UI on the same problem.

Either way, it's a more honest answer than "use a spreadsheet".

Want to try it? The Plan page is at /dashboard/plan for any logged-in user, or you can sign up free. The Streams stats tab is on /dashboard/stats (Pro tier). The full pricing breakdown is on the pricing page.

Try Feedloop free

Connect an RSS feed, a blog, or any social account. Auto-post to 13 networks on your schedule. Free forever plan, no card.