MemPalace · Wiki
專案 / Project

project_subscribers_and_freebie_2026-04-25

檔名 project_subscribers_and_freebie_2026-04-25.md · 修改 2026-04-25 13:32

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)

  1. Resend free 3000/月 OK 到 ~700 trial 用戶;超過要付 $20/月
  2. _call_ai 走 claude CLI(subscription)首層,timeout 180s — trial >20 人要切 Claude API 或 Ollama
  3. HN 不一定貼用戶 keywords — 前 10 用戶體感 OK,再多要加 PTT/Reddit search
  4. DIGEST_FROM domain 必須在 Resend 完成 SPF/DKIM
  5. trial 過期沒自動 deactive — 不會再寄信但 db.active 仍為 1(無害)

接下來的人(誰先動 vampire 都要對齊)

  • 第一封 weekly digest:5/3 凌晨 5am(launchd 觸發)
  • 第一封 morning digest:用戶 verify 的隔天 7am
  • 兩個 server 走不同 port(8011 / 8012),可共存

← 回索引