Post Planner plans the coming week from your own results, not from a blank page. Plain code reads the export of your account and works out which formats, hooks and posting times performed on the numbers the export has (reach, saves, clicks, replies); a scout reads the pages and accounts you chose to watch; a writer drafts ideas; and a critic scores every idea against your numbers and your voice sheet before you see it. Each run starts from the last one, so the plan follows your results as they come in.
Usage
Put your account's analytics export (CSV) in posts/insights/, and the pages or accounts to watch in posts/sources.md, one per line.
Start Plan week and choose the channels.
Read the plan: every idea names the metric behind it. Edit or delete drafts before you use them.
What it produces
posts/<week>/plan.md: the ideas in order, each with the pattern from your numbers it follows and what it borrows from the sources
posts/<week>/<channel>.md: the drafts in order, with suggested times
posts/performance.csv: your posts with their format, hook, time and numbers, grown with every run
Configuration
Your voice sheet lives in the project and is kept when you add a channel.
postsPerWeek (default 3) per channel, and channels (default: the ones in your last plan).
Columns are matched automatically for Instagram, LinkedIn and X analytics exports; map any other layout in columns.yaml.
minPosts (default 30): with fewer posts in the export, the plan says so and leans on the sources.
Length limits come from each channel; drafts over the limit are flagged, not cut.
Notes
The statistics come from your export, computed by code; the model works from that table, not from a hunch.
It reads only the sources you list, and it schedules nothing: you post the drafts yourself, or hand them to your scheduler.
Hashtags are suggested only when your voice sheet lists the ones you allow.