[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-92591":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":22,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},92591,"sneakread","SneakRead\u002Fsneakread","SneakRead","Read the web at your desk, disguised as VS Code \u002F Word \u002F Google Docs \u002F Excel \u002F Outlook. 100% client-side, MIT.","https:\u002F\u002Fsneakread.com",null,"TypeScript",62,8,51,1,0,11,43.96,"MIT License",false,"main",true,[24,25,26,27,28,29],"moyu","open-source","productivity","react","reader","typescript","2026-07-22 04:02:06","# SneakRead · 摸鱼\n\n**Read the web at your desk, disguised as the tool you already have open.**\n\n[![GitHub Repo stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FSneakRead\u002Fsneakread?style=flat&logo=github)](https:\u002F\u002Fgithub.com\u002FSneakRead\u002Fsneakread) [![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)](LICENSE) · [sneakread.com](https:\u002F\u002Fsneakread.com) · 100% client-side, no backend, no account · [中文](README.zh.md)\n\nPaste any public URL. SneakRead reads it through `r.jina.ai`, then renders it **full-screen as a real desktop app** — VS Code, Claude Code, Word, WPS, Google Docs, Notion, Slack, Lark\u002FFeishu, DingTalk, WeCom, Teams, Gmail, Excel, or Outlook — so reading looks like working. Brand: **SneakRead** globally, **摸鱼** in Chinese.\n\n![The BBC World Cup homepage, rendered as a Word document — live word count, real ribbon, real status bar](docs\u002Fscreenshots\u002Fen-word.jpg)\n\n\u003Csup>↑ The BBC World Cup homepage, as a `.docx`. The word count in the status bar is real.\u003C\u002Fsup>\n\nThe design goal is 以假乱真 (indistinguishable from the real thing), modelled on\n[remoteok.com\u002Fvscode](https:\u002F\u002Fremoteok.com\u002Fvscode) \u002F `\u002Fdocx` \u002F `\u002Fdocs`:\n\n- **One app fills the whole viewport** at `\u002F` — the landing *is* the reader, defaulting to the Word disguise. No wrapper — only the target app's own title bar (with the real brand logo), ribbon\u002Factivity bar, and status bar. (`\u002Fapp` is a legacy alias that redirects to `\u002F`.)\n- **Every control is hidden** behind the disguise's real **File menu** and a command palette (`⌘K` \u002F `⌘P`): open URLs, switch apps, language, refresh, fullscreen, panic.\n- **Boss key.** Press `Esc` (or lose window focus with Boss auto-hide on) to instantly flip to a plausible `Q3 Budget Review.xlsx`. `Esc` again restores.\n- **Continuous browsing.** Every skin has clickable links; clicking one loads it through the reader in the *current* disguise.\n- The browser tab title and favicon match the disguise, never the brand.\n\n## Landing & SEO\n\nThe marketing pages are static, prerendered, and localized into 10 languages,\nyet **themselves disguised** — the landing IS the reader's Word home (a\nGetting-Started document with a live URL box and the 15-skin dock; every other\ndisguise is one click away as a full-screen live preview):\n\n- `\u002F`, `\u002Fzh`, `\u002Fes`, `\u002Fhi`, `\u002Far`, `\u002Fpt`, `\u002Fru`, `\u002Fja`, `\u002Ffr`, `\u002Fde` — each static HTML with localized `\u003Ctitle>`\u002Fdescription, canonical, `hreflang` (+ `x-default`), Open Graph, and `FAQPage` JSON-LD. `sitemap.xml` + `robots.txt` included.\n- Features and FAQ are real, crawlable text rendered inside the disguise.\n- The `\u002Fapp` alias is `noindex`; opened documents live in the `#u=…` hash, never a crawlable path.\n\n## Getting around\n\n- **The File menu is real.** Every skin's `File` opens a working menu: Open URL, Home, Open as (each app), **Language**, Refresh, Fullscreen, Boss auto-hide, Panic, and \"What is Moyu?\".\n- **Command menu** (`⌘K` \u002F `⌘P`): the same actions for keyboard users; paste a URL to open it.\n- **In-app browsing.** Click any link inside a document and it loads through the reader in the *current* skin, so you browse article to article without ever leaving the disguise. `⌘\u002FCtrl`-click opens the real page in a new tab.\n- **First-run onboarding** explains the three controls, once, then never again.\n- **Localized** into the browser's language across the top 10 (en, zh, es, hi, ar, pt, ru, ja, fr, de); switchable from File ▸ Language. Disguise chrome stays in its native app language.\n\n## Skins\n\n| Skin | Looks like | Content shape |\n| --- | --- | --- |\n| Word | title bar, ribbon, ruler, paper on canvas, status bar | clean article |\n| VS Code | full workbench: activity bar, explorer, **real Monaco editor**, terminal, minimap | source markdown |\n| Claude Code | macOS terminal running the AI coding agent: tool calls, streamed answer, context meter | article as an agent reply |\n| Google Docs | doc top bar, menu, toolbar pill, page | clean article |\n| Notion | sidebar, List-view database, right peek panel with properties | article as a page |\n| Lark Docs \u002F 飞书文档 | breadcrumbs, outline rail, AI summary chip, share button, optional name watermark | clean doc |\n| Slack | aubergine rail, channel list, message stream, composer | article as a thread of messages |\n| Lark \u002F 飞书 | nav sidebar, chat list, group conversation with read receipts | article as group messages |\n| DingTalk \u002F 钉钉 | icon rail, chat list, group chat with 已读 receipts and DING | article as group messages |\n| WeCom \u002F 企业微信 | dark app rail, conversation list, group chat, workbench-style tools | article as group messages |\n| WPS 文字 | multi-tab strip, Chinese ribbon, A4 paper, member crown | clean article (Chinese chrome) |\n| Excel | ribbon, formula bar, real grid, sheet tabs | data table if present, else audit sheet |\n| Outlook | folders, message list, reading pane | article as an email |\n| Teams | purple rail, channel Posts tab, reply chain | article as a channel post |\n| Gmail | Material top bar, label sidebar, open conversation, smart replies | article as a newsletter |\n\nNew pages open as Word by default, and you can switch the disguise anytime from\nthe File menu, the command palette, or the hover-to-reveal switcher at the top of\nany article. Set **File ▸ Display name** and every disguise wears *your* name —\navatars, the Notion workspace, and a Feishu-style tiled watermark.\n\n### The same article, wearing different faces\n\n| | |\n| --- | --- |\n| ![Claude Code skin](docs\u002Fscreenshots\u002Fen-claude-code.jpg) **Claude Code** — the article arrives as an agent reply, tool calls and all | ![Notion skin](docs\u002Fscreenshots\u002Fen-notion.jpg) **Notion** — a page inside a database, properties included |\n| ![Slack skin](docs\u002Fscreenshots\u002Fen-slack.jpg) **Slack** — split into a believable run of messages | ![Gmail skin](docs\u002Fscreenshots\u002Fen-gmail.jpg) **Gmail** — a newsletter, smart replies included |\n| ![Teams skin](docs\u002Fscreenshots\u002Fen-teams.jpg) **Teams** — a channel post with replies | ![In-character loading](docs\u002Fscreenshots\u002Fen-loading.jpg) **Even loading stays in character** — a document skeleton, never a spinner |\n\n### The boss key\n\nPress `Esc` (or let auto-hide trigger on window blur) and the screen flips to a\nplausible quarterly budget — real formulas, a real chart, twelve months of cash\nflow. Press `Esc` again to resume reading.\n\n![The boss key: a believable Q3 budget spreadsheet with formulas and a chart](docs\u002Fscreenshots\u002Fen-boss-key.jpg)\n\n## Privacy, honestly\n\nNo backend, no account, no cookies of our own. What you read is fetched by your\nbrowser and stays in your browser (localStorage). The public site loads\nMicrosoft Clarity and Google Analytics for anonymous usage analytics — which\n*product* features are used (skins, boss key, samples), never the articles you\nread, never full URLs (hostnames and bucketed counts only), never anything you\ntype. Both load lazily after first paint and only on sneakread.com; block them\nfreely, nothing breaks. The self-hosted build sends nothing.\n\n## Stack\n\n- **Vite + React + TypeScript**, no backend — everything runs in the browser.\n- **Reader with front-end fallback**: Jina (`r.jinaai.cn` → `r.jina.ai`) → Firecrawl (keyless). Network-adaptive order, remembers the last-good provider, per-provider timeouts + cooldowns. No API key ever ships in the client.\n- **Real vendor assets** for pixel fidelity: [Monaco](https:\u002F\u002Fmicrosoft.github.io\u002Fmonaco-editor\u002F) (the actual VS Code editor, lazy-loaded) for the VS Code skin, [Codicons](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode-codicons), [Fluent UI icons](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Ffluentui-system-icons) for Office, [Material Symbols](https:\u002F\u002Ffonts.google.com\u002Ficons) for Docs, and self-hosted metric-compatible fonts (Inter\u002FCarlito\u002FRoboto\u002FCascadia Code).\n- React Markdown + GFM for rendered content; a modelled FY P&L (with formulas + chart) for the boss-key sheet.\n- Dependency-free i18n across 10 languages; SSG landing pages via a small prerender script.\n\n## Develop\n\n```bash\npnpm install\npnpm dev        # http:\u002F\u002Flocalhost:5173  (the landing IS the reader)\npnpm build      # static site into dist\u002F (client + prerendered landing pages)\n```\n\n## Contribute a skin\n\nSneakRead is built to be extended — **new disguises are the most welcome kind of\ncontribution.** A skin is a [`SkinDefinition`](src\u002Fskins\u002Ftypes.ts) (id, label, app\nname, accent, its own `Logo`) plus a React component that renders a\n`DocumentRecord` as that app. Each of the fifteen built-in disguises lives in its\nown [`src\u002Fskins\u002F\u003Cname>\u002F`](src\u002Fskins\u002F) folder — component, `style.css`, and logo\ntogether — and auto-registers via `import.meta.glob`; copy\n[`src\u002Fskins\u002F_template\u002F`](src\u002Fskins\u002F_template\u002F) to start. See\n**[CONTRIBUTING.md](CONTRIBUTING.md)** for the interface, the add-a-skin\nwalkthrough, and the 以假乱真 fidelity checklist.\n\n## Author\n\nBuilt by **刘小排 (Liu Xiaopai)** — an indie hacker shipping small, useful things.\n\n- 微信公众号（WeChat）: **刘小排r**\n- X \u002F Twitter: [@bourneliu66](https:\u002F\u002Ftwitter.com\u002Fbourneliu66)\n- Also by me: **[Raphael AI](https:\u002F\u002Fraphael.app)** — free AI image generation.\n\nIf SneakRead saved you from a boring meeting, a ⭐ on GitHub means a lot — genuinely\nopen-source apps like this are rare.\n\n## License\n\n[MIT](LICENSE) © 2026 SneakRead · 刘小排 (Liu Xiaopai)\n\n---\n\n中文说明见 **[README.zh.md](README.zh.md)**。\n","SneakRead 是一款前端运行的网页阅读伪装工具，将任意公开网页内容实时渲染为常见办公软件界面（如 Word、VS Code、Excel、Outlook、钉钉、飞书等），实现‘摸鱼’时视觉上与真实工作应用无异。核心功能包括全屏沉浸式伪装、真实状态栏与菜单交互、Esc 快捷键触发‘老板键’切换至预设工作文档、支持站内链接连续浏览，且全程离线运行、无后端依赖、不收集数据。适用于需在办公环境中隐蔽阅读网页内容的场景，如快速查阅资讯、技术文档或新闻，兼顾隐私性与可信外观。",2,"2026-07-09 02:30:25","CREATED_QUERY"]