v0.1.0 · 2026-09-16
Initial public launch — the basics that ship.
First version
- Chrome extension MV3 — popup + content script + service worker
- 5 platforms: Substack, Beehiiv, Ghost, Medium, LinkedIn
- Server-side scheduled publishing (Chrome doesn't need to stay open)
- UTM-tagged short links with per-platform analytics
- Free / Solo $29 / Team $79 / Agency $199 tiers
- Magic-link sign-in (no passwords)
- Pancake Checkout integration (3.9% + $0.50, Alipay/银行卡提现)
- Landing page + dashboard + docs + privacy/terms
v0.3.0 · 2026-09-17
Editorial composer + draft sync + real Substack publish path.
v0.3 — Vibecoding round 3
- 720px editorial composer with serif Iowan title + Inter body + JetBrains Mono counters
- Auto-save drafts every 1.5s → both local + cloud (synced across devices)
- Command palette (⌘+K) with spring animations, arrow navigation, fuzzy search
- 14-day analytics timeline with gap-filled bars
- Per-platform word-count rings (color-coded optimal/under/over)
- Cloud-sync indicator (idle → syncing → synced/offline)
- Real Substack publish path: extension opens /publish → content script fills + clicks Publish → reports URL back
- Public platform metadata endpoints (no auth) for the landing page
- Drafts API: GET/POST/DELETE/promote → campaign
- Encrypted Substack session storage (AES-256-GCM) for cross-device sync
- Full design-token system with dark mode + reduced-motion
v0.4.0 · 2026-09-17
Vibecoding round 4 — Workers AI + Beehiiv OAuth + Pancake Checkout.
v0.4 — Workers AI + payments
- 5 Cloudflare Workers AI endpoints: rewrite / translate / headline / summary / polish (free tier, 10K neurons/day)
- Beehiiv OAuth flow (full PKCE) — publish to Beehiiv without manual copy-paste
- Pancake 收款 (3.9% + $0.50, Alipay / 银行卡提现) — Pro $29 / Team $79 / Agency $199
- Pricing UI with 3 tiers + monthly/yearly toggle
- 5 bug fixes: cron iteration / D1 INSERT OR IGNORE / platform chip uncheck / etc.
v0.5.0 · 2026-09-17
Vibecoding round 5 — Subject scorer + Auto-tagger + Best-time predictor.
v0.5 — Smart AI ribbon
- 3 new AI chips in the popup ribbon: Score ⚡ (1-10 headline score + alt), Tags (auto-generate 3-5 tags), Best Time (predicts best day+hour per platform)
- Rewrite endpoint deduped 5× redundant track events to 1
- Free / Pro tier gating via tier field on every AI call (5/day free)
- Optional Cloudflare bindings (Analytics Engine / Vectorize / R2) graceful-degrade — activates when CF Dashboard enable
- Extension v0.5.0 packaged — popup.html <60 LOC chip ribbon
- Worker v3dce4b45 deployed — 3 new endpoints + Wave 5 routes mounted
v0.6.0 · 2026-09-17
Vibecoding round 6 — Extension superpowers + AI chain + Template library + i18n zh-CN.
v0.6 — Capability boundary push
- Extension:
chrome.contextMenus — 右键任意网页文本 → "Send to WriteMode draft" / "Improve with AI" / "Summarize page"
- Extension:
chrome.commands — 3 个全局快捷键 (⌘+Shift+Y 打开 · ⌘+Shift+S 发送 · ⌘+Shift+I 改写)
- Extension:
chrome.omnibox — 地址栏输入 "wm" 触发快速写作
- Extension:
chrome.alarms — 30 分钟检查过期草稿 (>7 天未编辑) 自动提醒
- Extension: AI background fetch — 关闭 popup 后 AI 调用继续运行,完成时桌面通知
- Worker: AI chain 端点
POST /v1/ai/chain — 多步串行 (rewrite → score → translate → polish → summary)
- Worker: Template library
GET /v1/templates — 5 套验证过的 newsletter 模板 (launch / weekly / promo / editorial / curated)
- Worker: Zod 验证中间件 — 通用 schema 验证
- Worker: KV sliding-window 限流 — magic-link / checkout 路径
- Worker: Webhook 幂等性 + DLQ 队列 — Pancake 5xx 自动重试 5 次
- Landing: i18n zh-CN (/zh/) — 完整中文版落地页 + Schema.org localized
- Landing: JSON-LD structured data — SoftwareApplication + Organization + FAQPage
- Landing: og:image:alt / apple-itunes-app / msapplication-TileColor 等 Lighthouse 95+ 元素
- Worker v89e5f495 · Pages 2ad8e264 (待重部署) · Extension v0.6.0 (~14KB)
v0.7.0 · 2026-09-17 (Wave 7 shipped)
Side panel + DevTools + UTM injection + DO rate limit + daily report.
Wave 7 — Chrome 114+ surface area
- Side Panel (Chrome 114+): full-height 4-tab layout — Compose / Queue / Reach / History. Click extension icon → opens side panel instead of popup.
- chrome.devtools.panels: "WriteMode" tab in DevTools shows last 50 AI/API calls with timing + status + token estimate.
- declarativeNetRequest: auto-injects utm_source=writemode&utm_medium=extension on outbound newsletter-platform links (Substack / Beehiiv / Ghost / Medium / LinkedIn).
- chrome.history + chrome.topSites: side panel "History" tab shows last 7 days of newsletter destinations + top 8 sites for quick draft prefill.
- Durable Object atomic rate limiter: checkout 5/min + AI chain 20/min per user, single-writer guarantee via DO storage (replaces KV sliding-window for hot paths).
- Daily report (cron @ 8am UTC): yesterday's publishes / reach / top post → Resend email to all users who published in last 7 days.
- PWA manifest: install WriteMode as standalone app from /manifest.json — service worker + icons + theme color.
- Worker v89e5f495+1 · Extension v0.7.0 (~53KB) — details below
v0.8.0 · 2026-09-17 (Wave 8 shipped)
Premium brand + offscreen AI + Vectorize auto-index + AI streaming + dynamic OG + cross-device sync.
Wave 8 — Capability boundary push 2
- Premium brand assets: new logo mark (rounded square + 3 signal bars + amber dot), broadcast hero illustration (5 platforms on signal arcs), PWA icons 192/512 (PIL LANCZOS upscale from new 1024 master).
- chrome.offscreen document — AI rewrite calls survive popup close. Commands ⌘+Shift+I now use offscreen worker that owns the fetch lifetime.
- Auto-index on publish: cron dispatch path auto-calls
autoIndexCampaign for every published post → Vectorize. Semantic "have I written something like this" works out-of-the-box for all users.
- Vectorize semantic search 3 endpoints:
POST /v1/vectorize/index/:id, POST /v1/vectorize/similar, POST /v1/vectorize/similar/to/:id. Fallback to keyword search when VECTORIZE binding absent.
- AI streaming:
POST /v1/ai/rewrite-stream returns text/event-stream with data: {"delta":"..."} chunks. Used by side panel for typewriter effect + cancellation.
- Dynamic OG image:
GET /v1/og/svg/:campaignId generates per-post SVG card with title + excerpt + platform dots + tags. No Browser Rendering required.
- Brand OG SVG:
GET /v1/og/brand.svg — static landing brand card (gradient + wordmark + 5 platform dots).
- chrome.storage.sync: API key + URL auto-sync across all signed-in Chrome browsers. Quota-safe (8KB/item).
- Auto-detect compose pages: chrome.tabs.onUpdated injects floating "↑ WriteMode" button on Substack/Beehiiv/Ghost/Medium compose URLs — click to send current draft to side panel.
- Landing brand showcase: new
#brand section with the new hero image + 12 capability pills (chrome.sidePanel / devtools / declarativeNetRequest / offscreen / storage.sync / Durable Objects / Workers AI streaming / Vectorize / Resend / Zod / Webhook DLQ / 5 publishers).
- Worker v549ca8dc · Pages pending · Extension v0.8.0 — view showcase
v0.25.0 · 2026-09-17 (Wave 25 shipped)
Server intelligence: 7 endpoint families + 4 new D1 tables + 1 experiment.
Wave 25 — Server intelligence
- RFM cohorts (
/v1/cohorts): segment subscribers into 6 lifecycle buckets (champions/loyal/new/at-risk/dormant/lost) using Recency×Frequency×Monetary scoring. D1 schema 22→26 tables.
- A/B subject testing (
/v1/ab-tests): framework for split-testing subject lines, deterministic bucket assignment, results aggregation.
- DNSBL reputation scan (
/v1/reputation): 8-zone check (Spamhaus ZEN / Spamcop / Barracuda / SORBS / etc.), weighted score 0-100, recommended warmup.
- Reply-by-email (
/v1/replies): inbound mail → Resend webhook → D1 storage, threaded by In-Reply-To header.
- Email warmup advisor (
/v1/warmup): tracks sending volume + bounce rate, recommends ramp schedule.
- Comments + AI moderation (
/v1/comments + /comments public submit): per-campaign thread with toxic-comment classifier via Workers AI.
- AI editorial calendar (
/v1/calendar): suggest 30-day posting schedule based on audience activity heatmap.
- Worker v32 e48fc78e · Extension v0.25.0 (88.4 KB)
v0.26.0 · 2026-09-17 (Wave 26 — landing page demos + extension redesign)
High-aesthetic Tools tab redesign + glass morphism + SVG icons + sparklines + cohort viz + brand preview + 4 new public demo endpoints + MCP 13 tools + OpenAPI 0.26.
Wave 26 — Vibecoding surface area
- 4 new public demo endpoints:
POST /v1/demo/classify-cohort (RFM scoring), POST /v1/demo/check-reputation (DNSBL scan), POST /v1/demo/spam-check (9-rule spam trigger detector), GET /v1/demo/landing-stats (live platform counts). All on landing page, no auth, IP rate-limited.
- Side panel Tools tab redesign: glass morphism, mesh gradient backdrop, 18 new SVG icons (custom-drawn), sparkline mini-charts in History tab, cohort viz in Queue tab, brand preview modal.
- MCP server (
/v1/mcp): 13 tools for AI agents (search, dispatch, draft, cohort, reputation, calendar, score-subject, spam-check, etc.). OpenAPI 0.26 with 11 new tags + 33 new paths.
- Landing page "Try it live" section: 5 inline demo widgets (4 forms + live counts), all calling real endpoints. Replaces single-modal demo overlay.
- Worker v36 c004da22 · Extension v0.26.0 — try the demos
v0.28.0 · 2026-09-18 (Wave 30 shipped)
Chrome Built-in AI test page + PWA service worker + manifest shortcut.
Test Chrome AI + PWA
/test page — probes all 6 window.ai APIs (Rewriter, Summarizer, Writer, Translator, Language Model, Language Detector) with live demo widgets for rewrite / summarize / headline / translate
- Lets users verify Chrome 131+ Built-in AI (Gemini Nano) is ready on their machine in 10 seconds — no install required, doubles as marketing demo
- PWA service worker (
/sw.js) — cache-first for static assets, network-first for HTML, installable as standalone app via manifest.json
- New manifest shortcut "Test Chrome AI" pointing to
/test
- Homepage nav links to
/test (amber, "⚡ Test AI") + hero CTA "🧪 Test Chrome AI"
- zh landing: nav link "⚡ AI 测速" →
/test
v0.28.2 · 2026-09-18 (Wave 31–52)
Production-grade polish pass — i18n unification, half-baked scan, SEO fix, final audit.
v0.28.2 — Production polish (Waves 31–52)
- Full i18n unification: shared
lib/i18n.ts dictionary with 140 keys × 2 locales (en + zh-CN); popup + sidepanel + options all wire data-i18n attributes via setupLangToggle(); "中文" toggle in topbar flips the entire UI instantly, persisted in localStorage.
- No half-baked: removed 7
alert() calls in content script — replaced with inline wmToast() helper (3.5s fade). Removed all onclick= inline handlers in landing. Deleted fake JSON-LD aggregateRating (4.8/127) + Organization.sameAs (fake Twitter/GitHub). Footer Twitter now SOON badge, GitHub BETA badge — no broken social links.
- Pricing section: options page gained missing
#pricing section (4 cards × features + 14-day refund) — was a dead nav link before.
- SEO canonical fix: all
canonical / og:url / JSON-LD url / sitemap.xml / robots.txt (29 places total) now point to live deployment writemode-web.pages.dev instead of NXDOMAIN writemode.cc — social share previews no longer 404.
- Version sync: version constant in
package.json + manifest.json + landing topbar + footer + JSON-LD softwareVersion + zip filename all driven from a single source of truth.
- Worker: 52 routes · 9 bindings (D1 + KV + 2 DO + AI + 4 ENV) · 1307 KiB / 245 KiB gzipped · 0 errors ·
ENVIRONMENT=production disables /v1/auth/dev-login.
- Extension: MV3 · 9 JS bundles · 125 KB zip · 20 permissions · 13 host_permissions · side_panel + commands + omnibox.
- Landing: 11 production URLs return 200 —
/ · /zh/ · /test · /writemode-extension-v0.28.2.zip · /auth/signin · /auth/exchange · /changelog · /docs · /privacy · /terms · /sitemap.xml.
v0.28.3 · 2026-09-19 (Wave 53–74)
Magic-link auth flow closes the loop — extension can finally receive API keys from web sign-in.
v0.28.3 — Magic-link auth bridge (Waves 53–74)
- Magic-link auth bridge (Wave 73): new content script
src/content/writemode-auth-bridge.ts listens on *://writemode-web.pages.dev/auth/*, reads API key from localStorage after /auth/exchange lands, forwards to chrome.storage.local via chrome.runtime.sendMessage, then clears the page storage. Manifest bumped to v0.28.3 with the matching content_scripts + host_permissions entries — extension can finally sign in without manual copy-paste.
- Sign-in dev mode visible (Wave 74):
/auth/signin now consumes the data.devLink field returned by Worker dev mode — renders <a target="_blank">Open it</a> when RESEND_API_KEY is unset, so testers no longer wait for a phantom email. Production path still shows "Magic link sent. Check your inbox (also spam folder)."
- Sweep gate clean (Wave 72):
sweep_static.py template-literal detector rewritten from line-bound regex to a 3000-char window scan covering innerHTML / outerHTML / createElement / insertAdjacentHTML / .className = / className + / setAttribute. False-positive count dropped from 39 → 0 — safe to run as release gate.
- Worker email pipeline (Wave 70):
email.ts now returns Promise<EmailResult> with ok/errorCode/errorMessage/messageId; default RESEND_FROM switched to onboarding@resend.dev (avoids NXDOMAIN writemode.cc); RESEND_FROM env var overrides for production. Dev mode still returns devLink even on Resend failure so the Wave 74 UI can show it.
- Landing: 11 production URLs return 200 — same as v0.28.2.
/auth/signin now surfaces the dev mode Open it link inline; /auth/exchange unchanged.
- Extension: MV3 · 10 JS bundles (added
writemode-auth-bridge) · 132,724-byte zip · 21 permissions · 14 host_permissions.
v0.28.4 · 2026-09-19 (hotfix)
Worker CORS wildcard bugfix — mobile Chrome can finally reach the magic-link endpoint from any preview-deployment URL.
v0.28.4 — CORS preview-subdomain hotfix (Wave 75)
- CORS preview subdomain hotfix: Hono's
cors() middleware matches origin strings via Array.prototype.includes() (exact equality), so 'https://*.writemode-web.pages.dev' in the allow-list was rejecting every Cloudflare Pages preview-deployment subdomain (baaeb13a.writemode-web.pages.dev, 3a91f4bc.writemode-web.pages.dev, …). Mobile Chrome testers saw 6 consecutive red Network error: Failed to fetch attempts. Switched origin to a function that regex-matches ^https://[a-z0-9-]+\.writemode-web\.pages\.dev$ plus the production root writemode-web.pages.dev, localhost dev ports, and chrome-extension://<id>. Extension v0.28.3 zip unchanged — only the Worker script was redeployed (version 7f3fc982-775d-4ccb-9406-9bc247bb463d).
v0.29.0 · 2026-10-15 (planned)
Agency mode — drafts sync, cloud storage, dashboard timeline.
Agency mode
- Multi-client dashboard with white-label branding
- Approvals workflow (draft → review → approve → publish)
- Client-scoped analytics
- CSV export of all campaigns per client