Edge Add-ons + Firefox listings
Edge runs Chromium MV3 — should accept the same zip with minimal changes. Firefox needs browser.* namespace bridging via webextension-polyfill and SW differences testing.

Shane about 1 month ago
Edge Add-ons + Firefox listings
Edge runs Chromium MV3 — should accept the same zip with minimal changes. Firefox needs browser.* namespace bridging via webextension-polyfill and SW differences testing.

Shane about 1 month ago
Chrome Web Store listing
Currently Magpie ships as an unpacked extension via GitHub Releases. Goal: get it on the Chrome Web Store for one-click install. Blockers: need 5 screenshots (1280×800), promo image (440×280), description text in EN+ZH, justification for each permission, and the $5 one-time developer registration. Review takes 3-7 days.

Shane about 1 month ago
Chrome Web Store listing
Currently Magpie ships as an unpacked extension via GitHub Releases. Goal: get it on the Chrome Web Store for one-click install. Blockers: need 5 screenshots (1280×800), promo image (440×280), description text in EN+ZH, justification for each permission, and the $5 one-time developer registration. Review takes 3-7 days.

Shane about 1 month ago
PR mode — open a pull request instead of pushing directly
For users who want to review before merging into main: each save creates a new branch + opens a PR rather than push to main directly. Implementation: options gains a "direct push / open PR" toggle; git-data.ts gains createBranch + createPullRequest; pipeline branches by config.

Shane about 1 month ago
PR mode — open a pull request instead of pushing directly
For users who want to review before merging into main: each save creates a new branch + opens a PR rather than push to main directly. Implementation: options gains a "direct push / open PR" toggle; git-data.ts gains createBranch + createPullRequest; pipeline branches by config.

Shane about 1 month ago
Per-domain custom turndown rules
Some sites have unique HTML structures (callout boxes, code blocks with line-numbers, etc.) that need custom turndown rules to convert cleanly. Let users register rules per hostname in options. Implementation: siteRules: Record in settings; turndown picks up rules matching article.sourceUrl.

Shane about 1 month ago
Per-domain custom turndown rules
Some sites have unique HTML structures (callout boxes, code blocks with line-numbers, etc.) that need custom turndown rules to convert cleanly. Let users register rules per hostname in options. Implementation: siteRules: Record in settings; turndown picks up rules matching article.sourceUrl.

Shane about 1 month ago
Custom frontmatter fields
Let users define their own frontmatter schema in options (e.g. category, status: draft, custom enums). Currently the schema is hard-coded.

Shane about 1 month ago
Custom frontmatter fields
Let users define their own frontmatter schema in options (e.g. category, status: draft, custom enums). Currently the schema is hard-coded.

Shane about 1 month ago
Multi-page collation — combine related articles into one capture
Pick 3+ related articles across tabs and combine them into a single markdown file (with section headings per source) committed in one go. Useful for building "reading collections" or topic digests.

Shane about 1 month ago
Multi-page collation — combine related articles into one capture
Pick 3+ related articles across tabs and combine them into a single markdown file (with section headings per source) committed in one go. Useful for building "reading collections" or topic digests.

Shane about 1 month ago
KaTeX preview rendering in popup
Currently the popup preview shows raw $...$ math expressions. Render them visually for a better preview experience. Implementation: popup imports the katex library, applies it to preview textContent.

Shane about 1 month ago
KaTeX preview rendering in popup
Currently the popup preview shows raw $...$ math expressions. Render them visually for a better preview experience. Implementation: popup imports the katex library, applies it to preview textContent.

Shane about 1 month ago
Restricted-page fallback via offscreen document
chrome:// / extension:// / Web Store pages can't be content-script injected, so Magpie can't capture them. Workaround: have the SW fetch the page URL into an offscreen document and run Readability there. Implementation: new src/offscreen/, manifest gains "offscreen" permission. Chrome 109+.

Shane about 1 month ago
Restricted-page fallback via offscreen document
chrome:// / extension:// / Web Store pages can't be content-script injected, so Magpie can't capture them. Workaround: have the SW fetch the page URL into an offscreen document and run Readability there. Implementation: new src/offscreen/, manifest gains "offscreen" permission. Chrome 109+.

Shane about 1 month ago
Offline retry queue for failed saves
Network drop or GitHub timeout currently means the article is lost (only cached briefly in SW memory). Queue failed saves to chrome.storage and retry when network comes back. Trade-off: serializing image bytes to storage is heavy — may need to chunk or cap. Estimated medium effort.

Shane about 1 month ago
Offline retry queue for failed saves
Network drop or GitHub timeout currently means the article is lost (only cached briefly in SW memory). Queue failed saves to chrome.storage and retry when network comes back. Trade-off: serializing image bytes to storage is heavy — may need to chunk or cap. Estimated medium effort.

Shane about 1 month ago
Hot-link image handling — add Referer header to fetch
Some CDNs (WeChat, JianShu, etc.) reject image requests without a matching Referer header → image download fails with 403. Currently Magpie keeps the remote URL on failure; ideally we should retry with a forged Referer. Implementation: use chrome.declarativeNetRequest to dynamically add Referer: on image fetches. Retry once on 403.

Shane about 1 month ago
Hot-link image handling — add Referer header to fetch
Some CDNs (WeChat, JianShu, etc.) reject image requests without a matching Referer header → image download fails with 403. Currently Magpie keeps the remote URL on failure; ideally we should retry with a forged Referer. Implementation: use chrome.declarativeNetRequest to dynamically add Referer: on image fetches. Retry once on 403.

Shane about 1 month ago
Planned
Custom slug input — edit folder name before save
Add an editable input in popup showing the current slug (pre-filled with translation/pinyin result). Lets users override when the auto-generated slug isn't satisfying. Implementation: popup adds an input, SAVE_TO_GITHUB message gains customSlug?: string field.

Shane about 1 month ago
Planned
Custom slug input — edit folder name before save
Add an editable input in popup showing the current slug (pre-filled with translation/pinyin result). Lets users override when the auto-generated slug isn't satisfying. Implementation: popup adds an input, SAVE_TO_GITHUB message gains customSlug?: string field.

Shane about 1 month ago
Planned
Multi-repo support — pick destination repo when saving
Right now Magpie commits to a single configured repo. Many users want: tech articles → repo A, life notes → repo B. Pick at save time via dropdown. Implementation sketch: Settings becomes Settings[] + defaultRepoIndex Options page gains a repo list manager (add/edit/delete) Popup gains a repo dropdown next to Save button Optional: auto-route by URL hostname

Shane about 1 month ago
Planned
Multi-repo support — pick destination repo when saving
Right now Magpie commits to a single configured repo. Many users want: tech articles → repo A, life notes → repo B. Pick at save time via dropdown. Implementation sketch: Settings becomes Settings[] + defaultRepoIndex Options page gains a repo list manager (add/edit/delete) Popup gains a repo dropdown next to Save button Optional: auto-route by URL hostname

Shane about 1 month ago
Planned
History list — show recently saved articles in popup
Add a tab to popup showing the most recent 20 saved articles: slug + time + commit URL. Lets users quickly revisit what they captured. Implementation sketch: New src/lib/storage/history.ts with chrome.storage.local ring buffer (20 entries) Push { slug, title, url, commitSha, savedAt } after each successful save Popup gains a tab toggle, new pane renders the list

Shane about 1 month ago
Planned
History list — show recently saved articles in popup
Add a tab to popup showing the most recent 20 saved articles: slug + time + commit URL. Lets users quickly revisit what they captured. Implementation sketch: New src/lib/storage/history.ts with chrome.storage.local ring buffer (20 entries) Push { slug, title, url, commitSha, savedAt } after each successful save Popup gains a tab toggle, new pane renders the list

Shane about 1 month ago
Completed
Chinese title translation for English slug (Gemini Nano)
Uses Chrome's built-in Translator API (Gemini Nano, on-device, free, private). Three-tier fallback: Translator → pinyin → sanitize. Frontmatter title keeps the original; only the folder slug becomes English. Released in v0.3.

Shane about 1 month ago
Completed
Chinese title translation for English slug (Gemini Nano)
Uses Chrome's built-in Translator API (Gemini Nano, on-device, free, private). Three-tier fallback: Translator → pinyin → sanitize. Frontmatter title keeps the original; only the folder slug becomes English. Released in v0.3.

Shane about 1 month ago
Completed
Tag auto-suggestion from page metadata
Auto-extract tags from OpenGraph / JSON-LD / meta keywords / site-mapping rules. Editable chip UI in popup. Released in v0.2.

Shane about 1 month ago
Completed
Tag auto-suggestion from page metadata
Auto-extract tags from OpenGraph / JSON-LD / meta keywords / site-mapping rules. Editable chip UI in popup. Released in v0.2.

Shane about 1 month ago
Completed
Onboarding flow — 4-step welcome wizard on first install
Auto-opens after install: Welcome → Prepare GitHub repo + PAT → Configure + test connection → Done. Form re-uses settings + testConnection from options page. Released in v0.3.0.

Shane about 1 month ago
Completed
Onboarding flow — 4-step welcome wizard on first install
Auto-opens after install: Welcome → Prepare GitHub repo + PAT → Configure + test connection → Done. Form re-uses settings + testConnection from options page. Released in v0.3.0.

Shane about 1 month ago
Completed
Bilingual i18n (Chinese / English) with language switcher
Custom i18n implementation that lets users override Chrome's UI language pin. All UI strings have zh_CN + en variants. About 200+ keys. Released in v0.3.0.

Shane about 1 month ago
Completed
Bilingual i18n (Chinese / English) with language switcher
Custom i18n implementation that lets users override Chrome's UI language pin. All UI strings have zh_CN + en variants. About 200+ keys. Released in v0.3.0.

Shane about 1 month ago
Completed
Options page — sidebar layout with Settings / AI / Image Hosting / Guide / Feedback tabs
Sidebar navigation, hash routing (#/settings, #/ai, #/images, #/guide, #/feedback, #/about). 1000px fixed-width card layout. Click brand logo opens About page with project value proposition. Released in v0.5.0 and refined through v0.7.0.

Shane about 1 month ago
Completed
Options page — sidebar layout with Settings / AI / Image Hosting / Guide / Feedback tabs
Sidebar navigation, hash routing (#/settings, #/ai, #/images, #/guide, #/feedback, #/about). 1000px fixed-width card layout. Click brand logo opens About page with project value proposition. Released in v0.5.0 and refined through v0.7.0.

Shane about 1 month ago
Completed
Capture wizard — 3-step / 4-step adaptive flow
Popup wizard restructure: Extract → (AI Boost?) → Upload → Result. Dynamic step count based on whether AI Boost is enabled. AI step output flows back to extract-done for review before [Confirm save] / [Re-run AI]. Sticky action button at panel bottom stays visible when content scrolls. Confetti on commit success (3-color brand palette). Released across v0.4.0 and v0.6.0.

Shane about 1 month ago
Completed
Capture wizard — 3-step / 4-step adaptive flow
Popup wizard restructure: Extract → (AI Boost?) → Upload → Result. Dynamic step count based on whether AI Boost is enabled. AI step output flows back to extract-done for review before [Confirm save] / [Re-run AI]. Sticky action button at panel bottom stays visible when content scrolls. Confetti on commit success (3-color brand palette). Released across v0.4.0 and v0.6.0.

Shane about 1 month ago
Completed
Image Hosting — push images to your S3-compatible bucket
Push images to your own S3 / R2 / Aliyun OSS / Tencent COS / MinIO bucket instead of into the GitHub repo. Article repos stay text-only. Pure-TS AWS Signature V4 (Web Crypto API), no SDK Verified against AWS docs known-answer test Date-prefixed keys: pathPrefix/YYYY/MM/DD/sha8.ext Failed uploads silently fall back to GitHub repo Test Upload button to verify CORS + credentials Released in v0.7.0.

Shane about 1 month ago
Completed
Image Hosting — push images to your S3-compatible bucket
Push images to your own S3 / R2 / Aliyun OSS / Tencent COS / MinIO bucket instead of into the GitHub repo. Article repos stay text-only. Pure-TS AWS Signature V4 (Web Crypto API), no SDK Verified against AWS docs known-answer test Date-prefixed keys: pathPrefix/YYYY/MM/DD/sha8.ext Failed uploads silently fall back to GitHub repo Test Upload button to verify CORS + credentials Released in v0.7.0.

Shane about 1 month ago