The false equivalence
When designing a content publishing workflow, platforms get sorted into two buckets: automated (the system posts for you) and manual (you post yourself).
The manual bucket is often treated as "not worth automating." If you are going to post by hand anyway, why build generation pipelines for it?
This conflates two separate steps:
- Preparation — generating the content, copy, and assets for a platform
- Posting — actually publishing to that platform
Automation applies to both independently. A platform can have fully automated preparation and fully manual posting. These are not the same axis.
What manual actually means
Manual posting means: the system cannot publish to this platform automatically. Either the API does not exist, it is too expensive, it requires human judgment, or the platform simply does not support programmatic posting.
Manual posting does not mean:
- The content should be written by hand
- The assets should be created by hand
- The copy should be improvised at posting time
If you post to a platform manually three times a week, spending 20 minutes writing the post each time, the problem is not the posting — it is the preparation. The posting takes 30 seconds. The writing takes 20 minutes.
Automated preparation for manual platforms
Every platform in a manual workflow should still get automated content generation:
const PLATFORM_REQUIREMENTS = {
linkedin: {
deliveryMode: "manual_assisted", // you post, system prepares
requiredTextFields: ["body"], // generate this automatically
requiredAssets: [], // no assets needed
automationLevel: "prep_automated_publish_manual",
},
instagram: {
deliveryMode: "manual_assisted",
requiredTextFields: ["caption"], // generate automatically
requiredAssets: ["carousel"], // render automatically
automationLevel: "prep_automated_publish_manual",
},
pinterest: {
deliveryMode: "manual_assisted",
requiredTextFields: ["body", "title", "board"], // generate all three
requiredAssets: ["pin"], // render automatically
automationLevel: "prep_automated_publish_manual",
},
};
The manual_assisted mode means: generate and render everything automatically, then hand the prepared package to the user for posting.
The admin surface implication
For manual platforms, the admin surface should show:
- Whether the content is ready (text generated, assets rendered)
- The generated copy, ready to copy-paste
- A direct link to the platform's posting interface
- A "Mark as posted" button to track completion
LinkedIn — Ready to post
──────────────────────────────────────
Copy: "Here is your generated LinkedIn post..."
[Copy to clipboard] [Open LinkedIn →] [Mark as posted ✓]
The workflow becomes: open admin, copy the generated post, open the platform, paste, post, click "Mark as posted." Three minutes instead of twenty.
Why this matters for tracking
If manual platforms are excluded from the generation pipeline, their status is always "unknown." The system cannot tell you which platforms are ready to post and which are not, because it never generated their content.
With automated preparation for all platforms, the workflow state is complete:
Article: "My latest post"
├── devto ✓ Published
├── linkedin ✓ Ready — awaiting manual post
├── instagram ✓ Ready — carousel rendered, awaiting manual post
└── reddit ✗ Missing — text not yet generated
This is a usable operational view. The version without automated preparation for manual platforms looks like:
Article: "My latest post"
├── devto ✓ Published
├── linkedin — (no data)
├── instagram — (no data)
└── reddit — (no data)
No actionable signal. You have to remember what you posted manually and what you did not.
The rule
Automate preparation for every platform, regardless of delivery mode. Reserve the manual/auto distinction for the final posting step only.
Manual platforms are not second-class platforms. They are platforms where the last meter is walked by a human — but everything before that last meter should be as automated as any other platform in the workflow.