project_subscribers_and_freebie_2026-04-25
Subscribers + Freebie 兩專案完工
日期:2026-04-25 派任:蘇鳴拍板,阿樂執行,4/30 23:59 deadline 狀態:✅ 提前交付,當天下午 14:30 前完成 + 全綠測試通過
任務 1:AI Tools Compare · 訂閱 + weekly digest
位置:/Users/vampire/bluefin-ships/ai-tools-compare/subscribers/
| 檔案 | 用途 |
|---|---|
server.py |
FastAPI: /subscribe (JSON+form), /unsubscribe, /admin?k=, /healthz |
db.py |
SQLite: subscribers + digest_sends,dedupe by lower-case email |
digest_sender.py |
CLI: --dry-run / --send --top N,自寫小模板引擎 (zero-jinja) |
templates/digest.html |
阿榜口吻 weekly 模板,含 Affiliate disclosure |
embed.html |
訂閱表單 (含 JS fetch 攔截),要嵌到 site/render.html |
.env.example |
RESEND_API_KEY / ADMIN_TOKEN / BASE_URL / DIGEST_FROM |
launchd.plist.example |
每週日 5:00 跑 digest_sender.py --send |
posts 來源:先抓 posts/ 再 fallback ~/jarvis/cc-daemon/inbox/content_*.md
測試:
- db.add_subscriber dedupe + 退訂 + 重訂 路徑全綠
- uvicorn server:app + curl 四 endpoint 全部 200/401 正確
- digest_sender.py --dry-run --top 5 渲染 3453 字元、沒有未渲染 token
任務 2:Daemon SaaS · 7 天免費 trial + lead 收集
位置:/Users/vampire/bluefin-ships/daemon-saas/freebie/
| 檔案 | 用途 |
|---|---|
server.py |
FastAPI: /signup (JSON+form), /verify magic-link, /unsubscribe, /admin |
db.py |
SQLite: users + digest_runs,紀律加碼 (0篇→14天 / ≥5篇→7天) |
morning_runner.py |
每天 7:00 跑:from daemon import _call_ai, _fetch_hn_top 複用 cc-daemon 機制 |
email_templates/verify.html |
magic-link 啟動信,依 last_week_posts 換 greeting |
email_templates/morning_digest.html |
早安信、3 篇草稿 + opening_line + closing_note |
email_templates/day7_reminder.html |
trial 還剩 24h 推升級 |
.env.example |
+ PRICING_URL |
launchd.plist.example |
每天 07:00 跑 morning_runner |
核心複用:sys.path.insert(0, '~/jarvis/cc-daemon') → from daemon import _call_ai, _fetch_hn_top,沒重做 Quill prompt 機制,只是把 user 的 keywords + voice_samples + persona_ali.md 一起塞進 prompt 要求 LLM 輸出 3 篇 JSON。
測試(真跑 LLM):
- 種一個用戶 keywords=['咖啡','SCAA','精品咖啡']、voice 包含「曲線多 5 度、第一爆延後 12 秒」
- LLM 真的吐回呼應這個句子的草稿("結構化思考會毀掉一爆的 12 秒")
- closing_note:「別連發三天烘豆數據——客戶會以為你在記帳」← 完美阿莉口吻
- 0 forbidden words (vampire / 外送員 / 跑單 / 6 個 AI)
- 0 unrendered template tokens
共同設計
- 三個依賴:FastAPI、uvicorn、sqlite3(stdlib)。Resend / 模板都用 stdlib urllib + 自寫 mini-renderer
- 不引 jinja2、不引 sqlalchemy、不引 emails-lib —— spec 所謂「不要 over-engineer」
- 兩個都用
python-multipart已存在於系統(已pip install --break-system-packages一次) - BASE_URL 控制退訂連結 host,prod 別亂改
風險(已寫到各 README)
- Resend free 3000/月 OK 到 ~700 trial 用戶;超過要付 $20/月
_call_ai走 claude CLI(subscription)首層,timeout 180s — trial >20 人要切 Claude API 或 Ollama- HN 不一定貼用戶 keywords — 前 10 用戶體感 OK,再多要加 PTT/Reddit search
DIGEST_FROMdomain 必須在 Resend 完成 SPF/DKIM- trial 過期沒自動 deactive — 不會再寄信但 db.active 仍為 1(無害)
接下來的人(誰先動 vampire 都要對齊)
- 第一封 weekly digest:5/3 凌晨 5am(launchd 觸發)
- 第一封 morning digest:用戶 verify 的隔天 7am
- 兩個 server 走不同 port(8011 / 8012),可共存