Open-Source Cold Email & Warmup Platform
Warmbly 是開源的冷郵件平台:溫暖您的收件箱、發送活動、並對每個回覆進行分流。可在我們的雲端運行或自行託管整個系統。
AI 翻譯
Social Daily Poster is the open-source alternative to Taplio: it writes your LinkedIn posts from the work you already did, on your own machine, for the price of the AI subscription you already pay for
翻譯準備中
行銷Python · PowerShellGitHub @dimamak上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Nobody has the time - or the will - to sit down and write a post every day. Social Daily Poster does it for you, from what you actually did that day - your Claude Code sessions, screenshots and messages at the end of the day, etc. Kind of open-source alternative to Taplio
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Nobody has the time, or the will, to sit down and write a post every day.
Social Daily Poster does it for you, from what you actually did that day.
Social Daily Poster is the open-source alternative to Taplio: it writes your
LinkedIn posts from the work you already did, on your own machine, for the
price of the AI subscription you already pay for.檢視完整 README ↗Nobody has the time, or the will, to sit down and write a post every day. Social Daily Poster does it for you, from what you actually did that day.
Social Daily Poster is the open-source alternative to Taplio: it writes your LinkedIn posts from the work you already did, on your own machine, for the price of the AI subscription you already pay for.
Every night, Social Daily Poster looks back at your day: your coding-agent sessions (Claude Code or Codex/ChatGPT), screenshots, and optionally your Telegram, Gmail, WhatsApp, and even a spoken debrief you record after a call. It picks the single best story and drafts a post. That draft lands in a private Telegram bot with Approve / Edit / Skip buttons. Approve also draws an illustration and shows it to you before anything is public. Nothing posts until a second tap.
Once that post is live on LinkedIn, Social Daily Poster can spin off the same story for X (a real rewrite, not a truncation) and Reddit (a prefilled link you submit yourself), each with its own approval step and its own on/off switch.
Runs on one laptop for one person, no server needed. That's how most people use it. It can also run on a shared server for a few people.
Fastest: hand it to a coding agent. If you already use a terminal-based agent (Claude Code, Codex, etc.), open it in an empty folder and give it this:
Clone https://github.com/dimamak/sdp and set it up locally for one person.
Before running the wizard, ask me which channels I want: Telegram and
LinkedIn are required, then check whether I also want Gmail, WhatsApp,
images, X, or Reddit, don't just leave them off by default. If I don't have
a LinkedIn Page, use https://www.linkedin.com/company/sdp-page/ as a
placeholder. Then walk me through the wizard with those answers.
The wizard is interactive by design: you'll still need to answer things yourself, like pasting a Telegram bot token or approving a LinkedIn login in your browser. But the agent can drive the whole install and relay each question to you as it comes up.
Or run it yourself (works on Windows, macOS, Linux):
git clone https://github.com/dimamak/sdp.git && cd sdp
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt # Windows: .venv\Scripts\pip
.venv/bin/python -m setup.wizard # mode? -> laptop (the default)
The wizard walks through: which sessions to harvest, your Telegram bot, and
(all optional) Gmail/WhatsApp/LinkedIn/images/X/Reddit. Every step is
re-runnable on its own, e.g. python -m setup.wizard --source linkedin.
When it's done:
python -m server.pipeline.run_nightly --dry-run # one harvest + digest, no posting
python -m server.bot.main # leave this running
That one process polls Telegram for your taps and schedules the nightly
draft itself: no cron, nothing else to install. python -m setup.wizard --doctor checks your setup any time.
Want a shared, always-on server for a few people instead of one laptop? See Server mode.
| Source | What it captures | Notes |
|---|---|---|
| Claude Code / Codex / ChatGPT sessions | Your coding-agent transcripts | Read locally; covers Claude Code, the Codex CLI, and the ChatGPT desktop app |
| Screenshots | Whatever you drop into a watched folder | Any OS |
| Telegram, Gmail, WhatsApp | Your own message/mail history | All optional, all off by default; WhatsApp capture is read-only |
| Call / office audio | Local speech-to-text on recordings you make, in whatever languages you actually speak | Off by default; recording and transcription both run on Windows, macOS and Linux |
| Screen activity | Which app and window was in the foreground, plus occasional screenshots — the non-coding half of the day | Off by default; not supported on Wayland (see Limitations) |
Every source is opt-in and walked through by the wizard. config.example.yaml
has the full field-by-field detail as inline comments.
w_member_social API. This is the core flow:
draft → approve → optional illustration → post. Creating the LinkedIn app
needs an associated LinkedIn Page; if you don't have one, use
linkedin.com/company/sdp-page,
a placeholder page for this project that anyone setting up their own
instance is welcome to use. It isn't tied to any real business and has
nothing to do with what actually gets posted.x.enabled): once a post is live on LinkedIn, the same
day's story gets a genuine X-length rewrite (LinkedIn drafts run
1,100–1,600 characters; X's default cap is 280), with its own
Approve/Rewrite/Skip step. Uses X's official API.reddit.enabled): Reddit closed off practical API
access for a project like this. Social Daily Poster hands you a prefilled
submit link and ready-to-paste title and body, and you review it and tap
Submit yourself. Nothing is ever posted by code.Skipping or failing a later step (X, Reddit) never touches a post already made on an earlier one. See Cost for what each channel actually costs to run.
radar.enabled, off by default)Discovery and draft-assist only — this never replies for you. A browser
extension you install and scroll x.com with (free) surfaces posts worth
replying to and, once you've told it enough about who to watch, an optional
budget-capped API poll (default cap $5/month) does the same for a short
watchlist. Either way, all you ever get is a drafted reply in Telegram —
Approve · Edit · Skip — that you paste in and send yourself. No code path
here calls X's post endpoint. See config.example.yaml's radar: block and
python -m setup.wizard --source radar to turn it on.
Approve doesn't publish right away. It first asks the same session that
wrote the post for an image brief, renders it, and sends it back with
Post with image · Regenerate · Post text-only · Cancel. Reply to steer it
("more abstract, no people") and each reply is a new take; regenerating never
touches LinkedIn, only the final tap does. Turn it off entirely with
image.enabled: false.
Every render is checked for broken text — a misspelled word, an invented
brand, a legible dashboard or slide — before it's shown to you. A flagged take
is silently re-rendered once (it never counts against your regeneration
budget, since you never saw it); if the retry is still bad, it's delivered
anyway with a warning in the caption rather than blocking the post. Configure
under image.text_check*.
By default, tapping Post with image / Post text-only sends it to LinkedIn
immediately. Set publish.window (e.g. "15:00-18:00") and it queues
instead, going out at the next eligible slot on its own — useful if you
approve first thing in the morning but don't want every post landing at the
same hour. Post now anyway on the queued message bypasses it for that one
post. publish.days caps which weekdays are eligible; /status lists what's
currently queued. Leave publish.window empty for the old immediate
behaviour.
For a tool that reads your coding transcripts, this is the part that matters most.
See CONTRIBUTING.md if you want the exact sandboxing mechanics behind the Claude vs. Codex backends.
| Item | Marginal cost |
|---|---|
| Drafting, image briefs, X/Reddit rewrites, session summaries | ~$0; runs through your existing Claude Code or ChatGPT/Codex subscription's CLI (an API key also works if you'd rather pay per-token) |
| LinkedIn publishing | $0 (official API) |
| Post illustrations (optional) | ~$0.13–0.24/render; image.enabled: false skips this entirely |
| X posting (optional) | Pay-per-use, no free tier; well under $1/month at one post a day |
| Reddit (optional) | $0; no API or account, just a link you submit yourself |
| X reply radar (optional) | Browser-extension lane is $0; the optional API polling lane is capped at radar.monthly_budget_usd (default $5/month, $0 disables it) |
At one post a day with images on, expect low-single-digit dollars a month.
For an always-on shared box instead of a laptop, with a separate laptop feeding it over SSH:
git clone https://github.com/dimamak/sdp.git && cd sdp
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python -m setup.wizard # mode? -> server
.venv/bin/python -m setup.wizard --doctor
Each additional person gets their own instance: separate config, secrets,
store, Telegram bot, and LinkedIn token, via
.venv/bin/python -m setup.wizard --instance alice. People can share one
LinkedIn or X App's credentials the same way a team shares any App: whoever
sets it up first pastes the client id/secret, everyone else just runs their
own login to get their own token (see the wizard's linkedin/x steps).
Full walkthrough (cron, systemd, Windows laptop push, CI auto-deploy) lives in docs/self-hosting/ci-deploy.md and the wizard's own prompts.
--user, launchd, or
a Task Scheduler logon task) so it comes back at login, and --doctor
fails if the bot hasn't checked in.? all day; an X11 session works. On macOS,
window titles additionally need Accessibility permission — without it you
get app names only.