A self-hosted content engine for LinkedIn. It scans creators you trust for inspiration, drafts posts in your voice (trained on your own past posts), plans your week, and hands you finished drafts in Google Docs. Nothing ever auto-posts - you finish and post everything yourself.
Built by Tom Hunt, founder & CEO of Fame (we start and grow B2B podcasts), as a "you could build this yourself now" experiment. Open-sourced so you can too.
The pitch: three years ago this was a $20-50k custom build or an expensive SaaS subscription. Now it's a weekend, some evenings, and an AI that writes in your voice.
This tool automates a specific content strategy. The full thinking - why it works, not just how - is laid out in this episode:
Watch/listen to that first. Everything below is just the machinery that executes it.
- 📅 Weekly planner - a 3-week board with a per-day content cadence (repost / case study / rotating pillars), plus an idea bank you triage and draft from.
- 💡 Daily feeder - each morning it scans a list of creators you choose, surfaces their best recent posts into an Inspiration feed, and auto-writes one "draft of the day" from the strongest.
- ✍️ A writer trained on you - drafts key off your voice guide and a corpus of your own real posts, so they sound like you, not ChatGPT.
- 👥 Editable creator list - add or pause the creators the scan watches, from the dashboard.
- 🧩 Chrome extension - save any LinkedIn post to your bank (with the real permalink) and add any profile to your daily scan, straight from LinkedIn.
- 📄 Google Docs output - every draft lands in its own Google Doc to edit; a Copy for LinkedIn button copies the stored text, and a Pull edits button syncs your Doc edits back so Copy matches them.
- 📷 Suggest a photo - matches a post to a shot from your photo library.
- 🖥️ Terminal UI - a dark, monospace, hacker-console theme. Don't like it? It's plain CSS at the top of
dashboard/index.html- restyle away.
The whole thing is model-free at rest (a static dashboard + a tiny local server + JSON files). The AI parts - drafting, scanning, captioning - run in Claude Code.
Feeder (Claude Code, daily) ── scans your creators ──▶ Inspiration feed + idea bank
│
You (dashboard) ── slot / add notes / click "Draft" ─────────┤
▼
Writer (Claude Code) ── drafts in your voice ──▶ Google Doc + bank
│
You ── Copy for LinkedIn ──▶ paste into LinkedIn ──▶ post / schedule (natively)
dashboard/- the web dashboard (static HTML/JS).serve.py- a tiny local server: serves the dashboard and persists changes to the JSON files.data/- your content:ideas.json(the bank),creators.json(who the scan watches),inspiration.json,photos.json.prompts/- the jobs you run in Claude Code:feeder.md(daily scan),draft.md(turn "Draft"-clicked ideas into posts),weekly-draft.md(batch-draft the week).voice-guide.md,voice-examples.md- how the writer sounds (this is the bit you make your own).chrome-extension/- the LinkedIn helper (load unpacked; needs the local server running).
Requirements:
- Python 3 - runs the dashboard (no other dependencies).
- Claude Code - runs the AI parts (drafting, scanning, captioning).
- A browser tool for Claude - Claude in Chrome or a Playwright MCP, signed into LinkedIn - needed only for the daily scanner (LinkedIn blocks plain fetching).
- (Optional) a Google Drive connector in Claude Code - only if you want drafts written into Google Docs + the photo-suggest feature. The planner and writer work fine without it.
- Clone this repo.
- Run the dashboard:
Open http://localhost:8000/dashboard/.
python3 serve.py
- Make it yours: edit
voice-guide.md(how your posts sound) anddata/creators.json(who to scan). Drop a few of your best past posts intovoice-examples.md. - The AI parts: open the folder in Claude Code and run the prompts in
prompts/(feeder.mdto scan,draft.mdto draft,weekly-draft.mdfor a weekly batch) - by hand or on a schedule. See Run the scanner & drafter below for exactly how. Drafting uses thelinkedin-writeragent, which reads your voice guide + examples. - Chrome extension (optional):
chrome://extensions→ enable Developer mode → Load unpacked → selectchrome-extension/. It saves posts/creators by calling your local server, so it only works whilepython3 serve.pyis running.
The Google Docs and Google Drive photo features assume you're driving them through Claude Code with a Google Drive connector. They're optional - the core planner + writer work without them.
The dashboard is static; the "AI parts" are just prompts you run in Claude Code with the repo folder open. Three jobs, each a file in prompts/:
| Job | What it does | How to run |
|---|---|---|
Scanner (prompts/feeder.md) |
Scans your creators + keywords, drops 5-8 fresh ideas into the bank each day | Needs a browser tool (Claude in Chrome / Playwright) signed into LinkedIn |
Drafter (prompts/draft.md) |
Turns the ideas you clicked Draft on into finished posts in your voice | Runs any time; no browser needed |
Weekly (prompts/weekly-draft.md) |
Batch-drafts the whole coming week in one go | Runs any time |
Two ways to run each:
-
By hand - open the repo in Claude Code and say "run the feeder prompt" (or paste the file's contents). Do this whenever you like.
-
On a schedule (hands-off) - ask Claude Code to set it up as a scheduled task, e.g.:
"Create a scheduled task that runs
prompts/feeder.mdevery weekday at 8am."Claude Code runs it automatically on that cadence and writes the results into
data/- reload the dashboard to see them. (A daily feeder + a drafter every ~15 min is a good starting cadence.)
First run, end to end: run the scanner → open the dashboard and triage the new ideas (slot them to days, add notes) → click Draft on the ones you want → run the drafter → reload → finish each draft and post it yourself.
Everything configurable lives in one clearly-marked CONFIG block at the top of the <script> in dashboard/index.html (search for CONFIG - THIS is the bit to make your own). No build step - edit, save, reload. In there you can change:
- Post types (pillars) - the
PILLARSobject. Add, remove, or rename them; give each a colour (any hex like"#e11d48") and a one-line description. - Weekly cadence -
FIXED_DAYpins a day to one pillar (e.g. Monday = Repost); any day not pinned rotates throughROTATE_POOL, a different pillar each week. - Which days you plan -
DAYS(add"Sat"/"Sun"if you post weekends). - How many weeks show -
WEEKS_SHOWN. - The status lifecycle -
STATUSES(idea → drafted → posted, or whatever fits you).
If you rename or add pillars, also update
pillars.mdand the files inprompts/- those are what the AI writer/feeder read, so they need to know your categories too. (The dashboard is the visual source of truth; those files are the AI's copy.)
This is the part that matters. Out of the box the voice guide is a template. To get drafts that sound like you:
- Rewrite
voice-guide.mdin your own terms - your hooks, your enemies, your rules. - Paste 15-20 of your best real posts into
voice-examples.md(with a line on why each works). The writer pattern-matches against these.
Garbage in, garbage out - a thin voice guide gives thin drafts. Ten minutes here is the highest-leverage thing you'll do.
- Nothing auto-posts. The tool drafts; you decide, edit, and post. That guardrail is deliberate.
- Substance over vanity. It optimises for posts you'd actually want to publish, not engagement bait.
- Yours to break. It's a starting point, not a product. Fork it, rip bits out, rebuild it.
Tom Hunt - founder & CEO of Fame, the B2B podcast agency. If this is useful, come say hi on LinkedIn.
MIT - see LICENSE. Do what you like with it.
