{"repo": "chilfish/anontweet", "files": {"README.md": {"4073bd2b841cdb87e54849a0f7e77a445fa5b6e1": {"t": 1785747238.7068646, "n": 5178, "h": "d6e40046ef732d66", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 构建的现代化全栈应用程序,旨在提供极致的推文与 Instagram 帖子匿名浏览体验。本项目集成了 **Google Gemini / DeepSeek AI** 双提供商翻译功能,支持推文卡片与 IG 帖子导出(截图 + Markdown)。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **AI & Automation**:\n - [Google Gemini API](https://ai.google.dev/) + [DeepSeek API](https://platform.deepseek.com/) (双提供商翻译引擎)\n - [Vercel AI SDK](https://sdk.vercel.ai/docs) (Stream & State Management)\n- **Data Sources**:\n - Twitter/X Private API (via bundled `rettiwt-api`)\n - Instagram (via `@chilfish/gallery-dl-instagram` SDK)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [shadcn/ui](https://ui.shadcn.com/) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL / Neon Serverless (Optional, for caching)\n - [SWR](https://swr.vercel.app/) (Data Fetching)\n - [Zustand](https://zustand-demo.pmnd.rs/) (Client-side global state)\n- **Export & Media**:\n - [modern-screenshot](https://www.npmjs.com/package/modern-screenshot) (Screenshot export)\n - [xlsx](https://www.npmjs.com/package/xlsx) (Dictionary import/export)\n - [html-to-image](https://www.npmjs.com/package/html-to-image) (Alternative screenshot backend)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone https://github.com/Chilfish/anonTweet.git\ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照以下配置设置关键变量。\n\n> **注意**: AI 翻译功能依赖于 Google Gemini 或 DeepSeek API,截图功能依赖于正确的 HOSTNAME 配置。\n\n```env\nENVIRONMENT=\"development\" # development | production\nHOSTNAME=\"http://localhost:9080\" # ⚠️ 截图服务回调地址,生产环境请填写实际域名\n\n# ⚠️ 必需。用于服务端获取推文数据流。\n# 若不配置,将受到严格的 Rate Limit 限制。\n# 支持配置多个 Key(用英文逗号分隔)以实现轮询 + 故障转移。\nTWEET_KEYS=\"your_twitter_auth_token_1,your_twitter_auth_token_2\"\n\n# 🆕 Instagram 解析 — 必需。从浏览器 DevTools 复制 cookies JSON\nINS_COOKIES='{\"sessionid\":\"...\",\"csrftoken\":\"...\"}'\n\n# 启用 AI 翻译功能\nENABLE_AI_TRANSLATION=\"true\"\n# Google Gemini API Key\nGEMINI_API_KEY=\"AIzaSy...\"\n# 模型选择(默认 gemini-3-flash-preview)\nGEMINI_MODEL=\"models/gemini-3-flash-preview\"\n\n# DeepSeek(可选,双提供商切换)\n# DEEPSEEK_API_KEY=\"sk-...\"\n# DEEPSEEK_MODEL=\"deepseek-v4-flash\"\n\n# 启用本地文件缓存(Node/Bun 环境)\nENABLE_LOCAL_CACHE=\"true\"\n\n# 如果不配置 DB_URL,系统将直接调用 API 而不使用持久化缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\"\n\n# 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n```\n\n#### 🔑 关于 TWEET_KEYS 的获取\n\n本项目使用 Rettiwt-API 进行数据抓取。为获取完整访问权限并降低风控概率,需注入 Twitter 用户凭证。支持配置多个账号凭证以应对高频请求时的 Rate Limit 问题。\n\n**操作步骤:**\n\n1. 安装浏览器扩展:\n - **Chrome/Chromium**: [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)\n - **Firefox**: [Rettiwt Auth Helper](https://addons.mozilla.org/en-US/firefox/addon/rettiwt-auth-helper)\n2. 建议使用浏览器的**无痕/隐私模式**登录 Twitter/X 账号。\n3. 登录后打开扩展,点击 `Get Key` / `Get API Key` 并复制生成的字符串。\n4. 将该字符串填入 `.env` 的 `TWEET_KEYS` 字段(多个 Key 用逗号分隔)。\n\n> **⚠️ Security Note**: 该 Key 本质上是账号 Cookies 的 Base64 编码,拥有完全账户权限,安全等级等同于你的账号+密码。请勿泄露。\n> **⚠️ Session Keep-alive**: 获取 Key 后,**请勿手动点击登出 (Log out)**,否则服务端 Session 将失效。直接关闭浏览器窗口即可。\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel Serverless 环境进行了适配。\n\n1. 在 Vercel 项目设置中,务必添加环境变量 `VERCEL=\"true\"` 以激活 React Router 的适配器逻辑。\n2. 配置 `GEMINI_API_KEY` 以启用线上的翻译服务。\n3. 确保 `HOSTNAME` 设置为生产环境域名,否则推文截图功能将无法正确回调渲染。\n\n## 🚧 Features\n\n| 功能 | Twitter | Instagram |\n| ----------------- | ------------------------------------------- | --------------------------- |\n| 匿名浏览 | ✅ 推文 + 评论 + 引用 | ✅ Post / Reel / Story |\n| AI 翻译 | ✅ Google Gemini + DeepSeek,实体占位符保护 | ✅ 纯文本翻译,中日检测 |\n| 手动翻译编辑器 | ✅ 实体级编辑(三态:手动/AI/原文) | ✅ `IGTranslateDialog` 弹窗 |\n| 双语对照 | ✅ 三模式(双语/原文/仅译文) | ✅ 同上 |\n| 截图导出 | ✅ PNG/JPEG | ✅ 同上 |\n| Markdown/文本复制 | ✅ | ✅ |\n| 媒体下载 | ✅ | ✅ 图片 + 视频直链 |\n| DB 缓存 | ✅ `tweet` + `tweet_entities` 表 | ✅ `ig_post` 表 |\n| 纯文本路由 | ✅ `/plain/:id` | ✅ `/plain-ins/:id` |\n\n### External Libraries\n\n项目包含部分定制的第三方库核心,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 经深度修改以适配 Tailwind v4,增加了 AI 翻译实体渲染支持。\n- **`rettiwt-api`**: 针对 Twitter GraphQL 接口逆向适配,支持多 Key 轮询(429/401/403 自动故障转移)。\n\n### Storybook\n\n```bash\nbun run storybook # 启动在 http://localhost:6006\n```\n\n14 个 IG 组件用例 + Twitter 推文渲染用例。\n"}, "28a071ced463a0f7aac611f4da60a7b51df3dae5": {"t": 1785771608.620306, "n": 5178, "h": "d6e40046ef732d66", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 构建的现代化全栈应用程序,旨在提供极致的推文与 Instagram 帖子匿名浏览体验。本项目集成了 **Google Gemini / DeepSeek AI** 双提供商翻译功能,支持推文卡片与 IG 帖子导出(截图 + Markdown)。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **AI & Automation**:\n - [Google Gemini API](https://ai.google.dev/) + [DeepSeek API](https://platform.deepseek.com/) (双提供商翻译引擎)\n - [Vercel AI SDK](https://sdk.vercel.ai/docs) (Stream & State Management)\n- **Data Sources**:\n - Twitter/X Private API (via bundled `rettiwt-api`)\n - Instagram (via `@chilfish/gallery-dl-instagram` SDK)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [shadcn/ui](https://ui.shadcn.com/) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL / Neon Serverless (Optional, for caching)\n - [SWR](https://swr.vercel.app/) (Data Fetching)\n - [Zustand](https://zustand-demo.pmnd.rs/) (Client-side global state)\n- **Export & Media**:\n - [modern-screenshot](https://www.npmjs.com/package/modern-screenshot) (Screenshot export)\n - [xlsx](https://www.npmjs.com/package/xlsx) (Dictionary import/export)\n - [html-to-image](https://www.npmjs.com/package/html-to-image) (Alternative screenshot backend)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone https://github.com/Chilfish/anonTweet.git\ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照以下配置设置关键变量。\n\n> **注意**: AI 翻译功能依赖于 Google Gemini 或 DeepSeek API,截图功能依赖于正确的 HOSTNAME 配置。\n\n```env\nENVIRONMENT=\"development\" # development | production\nHOSTNAME=\"http://localhost:9080\" # ⚠️ 截图服务回调地址,生产环境请填写实际域名\n\n# ⚠️ 必需。用于服务端获取推文数据流。\n# 若不配置,将受到严格的 Rate Limit 限制。\n# 支持配置多个 Key(用英文逗号分隔)以实现轮询 + 故障转移。\nTWEET_KEYS=\"your_twitter_auth_token_1,your_twitter_auth_token_2\"\n\n# 🆕 Instagram 解析 — 必需。从浏览器 DevTools 复制 cookies JSON\nINS_COOKIES='{\"sessionid\":\"...\",\"csrftoken\":\"...\"}'\n\n# 启用 AI 翻译功能\nENABLE_AI_TRANSLATION=\"true\"\n# Google Gemini API Key\nGEMINI_API_KEY=\"AIzaSy...\"\n# 模型选择(默认 gemini-3-flash-preview)\nGEMINI_MODEL=\"models/gemini-3-flash-preview\"\n\n# DeepSeek(可选,双提供商切换)\n# DEEPSEEK_API_KEY=\"sk-...\"\n# DEEPSEEK_MODEL=\"deepseek-v4-flash\"\n\n# 启用本地文件缓存(Node/Bun 环境)\nENABLE_LOCAL_CACHE=\"true\"\n\n# 如果不配置 DB_URL,系统将直接调用 API 而不使用持久化缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\"\n\n# 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n```\n\n#### 🔑 关于 TWEET_KEYS 的获取\n\n本项目使用 Rettiwt-API 进行数据抓取。为获取完整访问权限并降低风控概率,需注入 Twitter 用户凭证。支持配置多个账号凭证以应对高频请求时的 Rate Limit 问题。\n\n**操作步骤:**\n\n1. 安装浏览器扩展:\n - **Chrome/Chromium**: [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)\n - **Firefox**: [Rettiwt Auth Helper](https://addons.mozilla.org/en-US/firefox/addon/rettiwt-auth-helper)\n2. 建议使用浏览器的**无痕/隐私模式**登录 Twitter/X 账号。\n3. 登录后打开扩展,点击 `Get Key` / `Get API Key` 并复制生成的字符串。\n4. 将该字符串填入 `.env` 的 `TWEET_KEYS` 字段(多个 Key 用逗号分隔)。\n\n> **⚠️ Security Note**: 该 Key 本质上是账号 Cookies 的 Base64 编码,拥有完全账户权限,安全等级等同于你的账号+密码。请勿泄露。\n> **⚠️ Session Keep-alive**: 获取 Key 后,**请勿手动点击登出 (Log out)**,否则服务端 Session 将失效。直接关闭浏览器窗口即可。\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel Serverless 环境进行了适配。\n\n1. 在 Vercel 项目设置中,务必添加环境变量 `VERCEL=\"true\"` 以激活 React Router 的适配器逻辑。\n2. 配置 `GEMINI_API_KEY` 以启用线上的翻译服务。\n3. 确保 `HOSTNAME` 设置为生产环境域名,否则推文截图功能将无法正确回调渲染。\n\n## 🚧 Features\n\n| 功能 | Twitter | Instagram |\n| ----------------- | ------------------------------------------- | --------------------------- |\n| 匿名浏览 | ✅ 推文 + 评论 + 引用 | ✅ Post / Reel / Story |\n| AI 翻译 | ✅ Google Gemini + DeepSeek,实体占位符保护 | ✅ 纯文本翻译,中日检测 |\n| 手动翻译编辑器 | ✅ 实体级编辑(三态:手动/AI/原文) | ✅ `IGTranslateDialog` 弹窗 |\n| 双语对照 | ✅ 三模式(双语/原文/仅译文) | ✅ 同上 |\n| 截图导出 | ✅ PNG/JPEG | ✅ 同上 |\n| Markdown/文本复制 | ✅ | ✅ |\n| 媒体下载 | ✅ | ✅ 图片 + 视频直链 |\n| DB 缓存 | ✅ `tweet` + `tweet_entities` 表 | ✅ `ig_post` 表 |\n| 纯文本路由 | ✅ `/plain/:id` | ✅ `/plain-ins/:id` |\n\n### External Libraries\n\n项目包含部分定制的第三方库核心,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 经深度修改以适配 Tailwind v4,增加了 AI 翻译实体渲染支持。\n- **`rettiwt-api`**: 针对 Twitter GraphQL 接口逆向适配,支持多 Key 轮询(429/401/403 自动故障转移)。\n\n### Storybook\n\n```bash\nbun run storybook # 启动在 http://localhost:6006\n```\n\n14 个 IG 组件用例 + Twitter 推文渲染用例。\n"}, "9926698a75c10820826a47041d287527b0289acf": {"t": 1785771609.8584602, "n": 3355, "h": "0a3b43cb2ec3eb14", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 构建的现代化全栈应用程序,旨在提供极致的推文匿名浏览体验。本项目集成了 **Google Gemini AI** 实现的翻译功能,支持推文的卡片导出。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **AI & Automation**:\n - [Google Gemini API](https://ai.google.dev/) (Translation Engine)\n - [Vercel AI SDK](https://sdk.vercel.ai/docs) (Stream & State Management)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Optional, for caching)\n - [SWR](https://swr.vercel.app/) (Data Fetching)\n - Zustand (Client-side global state)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone https://github.com/Chilfish/anonTweet.git\ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照以下配置设置关键变量。\n\n> **注意**: AI 翻译功能依赖于 Google Gemini API,截图功能依赖于正确的 HOSTNAME 配置。\n\n```env\nENVIRONMENT=\"development\" # development | production\nHOSTNAME=\"http://localhost:9080\" # ⚠️ 截图服务回调地址,生产环境请填写实际域名\n\n# ⚠️ 必需。用于服务端逆向获取推文数据流。\n# 若不配置,将受到严格的 Rate Limit 限制。\n# 支持配置多个 Key(用英文逗号分隔)以实现轮询负载均衡。\nTWEET_KEYS=\"your_twitter_auth_token_1,your_twitter_auth_token_2\"\n\n# 启用 AI 翻译功能\nENABLE_AI_TRANSLATION=\"true\"\n# Google Gemini API Key\nGEMINI_API_KEY=\"AIzaSy...\"\n# 模型选择 (支持 gemini-2.0-flash-exp, gemini-1.5-pro 等)\nGEMINI_MODEL=\"models/gemini-2.0-flash-exp\"\n\n# 如果不配置 DB_URL,系统将直接调用 API 而不使用持久化缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\"\n\n# 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n```\n\n#### 🔑 关于 TWEET_KEYS 的获取\n\n本项目使用 Rettiwt-API 进行数据抓取。为获取完整访问权限并降低风控概率,需注入 Twitter 用户凭证。支持配置多个账号凭证以应对高频请求时的 Rate Limit 问题。\n\n**操作步骤:**\n\n1. 安装浏览器扩展:\n - **Chrome/Chromium**: [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)\n - **Firefox**: [Rettiwt Auth Helper](https://addons.mozilla.org/en-US/firefox/addon/rettiwt-auth-helper)\n2. 建议使用浏览器的**无痕/隐私模式**登录 Twitter/X 账号。\n3. 登录后打开扩展,点击 `Get Key` / `Get API Key` 并复制生成的字符串。\n4. 将该字符串填入 `.env` 的 `TWEET_KEYS` 字段(多个 Key 用逗号分隔)。\n\n> **⚠️ Security Note**: 该 Key 本质上是账号 Cookies 的 Base64 编码,拥有完全账户权限,安全等级等同于你的账号+密码。请勿泄露。\n> **⚠️ Session Keep-alive**: 获取 Key 后,**请勿手动点击登出 (Log out)**,否则服务端 Session 将失效。直接关闭浏览器窗口即可。\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel Serverless 环境进行了适配。\n\n1. 在 Vercel 项目设置中,务必添加环境变量 `VERCEL=\"true\"` 以激活 React Router 的适配器逻辑。\n2. 配置 `GEMINI_API_KEY` 以启用线上的翻译服务。\n3. 确保 `HOSTNAME` 设置为生产环境域名,否则推文截图功能将无法正确回调渲染。\n\n## 🚧 Development Status\n\n### External Libraries Refactoring\n\n项目包含部分定制的第三方库核心,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 经深度修改以适配 Tailwind v4,并增加了对 AI 翻译实体(Auto Translation Entities)的渲染支持。\n- **`rettiwt-api`**: 针对最新的 Twitter GraphQL 接口进行了逆向工程适配,增强了数据获取的稳定性。\n"}, "8fa4a361df046f80126904616a4196f2fd5e9634": {"t": 1785771611.064637, "n": 3359, "h": "6e3f296a42dfd1f1", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 构建的现代化全栈应用程序,旨在提供极致的推文匿名浏览体验。本项目集成了 **Google Gemini AI** 实现的翻译功能,支持推文的卡片导出。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **AI & Automation**:\n - [Google Gemini API](https://ai.google.dev/) (Translation Engine)\n - [Vercel AI SDK](https://sdk.vercel.ai/docs) (Stream & State Management)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Optional, for caching)\n - [SWR](https://swr.vercel.app/) (Data Fetching)\n - Zustand (Client-side global state)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone https://github.com/Chilfish/anonTweet.git\ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照以下配置设置关键变量。\n\n> **注意**: AI 翻译功能依赖于 Google Gemini API,截图功能依赖于正确的 HOSTNAME 配置。\n\n```env\nENVIRONMENT=\"development\" # development | production\nHOSTNAME=\"http://localhost:9080\" # ⚠️ 截图服务回调地址,生产环境请填写实际域名\n\n# ⚠️ 必需。用于服务端逆向获取推文数据流。\n# 若不配置,将受到严格的 Rate Limit 限制。\n# 支持配置多个 Key(用英文逗号分隔)以实现轮询负载均衡。\nTWEET_KEYS=\"your_twitter_auth_token_1,your_twitter_auth_token_2\"\n\n# 启用 AI 翻译功能\nENABLE_AI_TRANSLATION=\"true\"\n# Google Gemini API Key\nGEMINI_API_KEY=\"AIzaSy...\"\n# 模型选择 (支持 gemini-2.0-flash-exp, gemini-1.5-pro 等)\nGEMINI_MODEL=\"models/gemini-2.0-flash-exp\"\n\n# 如果不配置 DB_URL,系统将直接调用 API 而不使用持久化缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\"\n\n# 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n```\n\n#### 🔑 关于 TWEET_KEYS 的获取\n\n本项目使用 Rettiwt-API 进行数据抓取。为获取完整访问权限并降低风控概率,需注入 Twitter 用户凭证。支持配置多个账号凭证以应对高频请求时的 Rate Limit 问题。\n\n**操作步骤:**\n\n1. 安装浏览器扩展:\n - **Chrome/Chromium**: [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)\n - **Firefox**: [Rettiwt Auth Helper](https://addons.mozilla.org/en-US/firefox/addon/rettiwt-auth-helper)\n2. 建议使用浏览器的**无痕/隐私模式**登录 Twitter/X 账号。\n3. 登录后打开扩展,点击 `Get Key` / `Get API Key` 并复制生成的字符串。\n4. 将该字符串填入 `.env` 的 `TWEET_KEYS` 字段(多个 Key 用逗号分隔)。\n\n> **⚠️ Security Note**: 该 Key 本质上是账号 Cookies 的 Base64 编码,拥有完全账户权限,安全等级等同于你的账号+密码。请勿泄露。\n> **⚠️ Session Keep-alive**: 获取 Key 后,**请勿手动点击登出 (Log out)**,否则服务端 Session 将失效。直接关闭浏览器窗口即可。\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel Serverless 环境进行了深度适配。\n\n1. 在 Vercel 项目设置中,务必添加环境变量 `VERCEL=\"true\"` 以激活 React Router 的适配器逻辑。\n2. 配置 `GEMINI_API_KEY` 以启用线上的翻译服务。\n3. 确保 `HOSTNAME` 设置为生产环境域名,否则推文截图功能将无法正确回调渲染。\n\n## 🚧 Development Status\n\n### External Libraries Refactoring\n\n项目包含部分深度定制的第三方库核心,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 经深度修改以适配 Tailwind v4,并增加了对 AI 翻译实体(Auto Translation Entities)的渲染支持。\n- **`rettiwt-api`**: 针对最新的 Twitter GraphQL 接口进行了逆向工程适配,增强了数据获取的稳定性。\n"}, "a1efd987933be1d6dfd2211ecfd31840f6847dd5": {"t": 1785771612.652823, "n": 3430, "h": "77a289ee54c262dd", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 构建的现代化全栈应用程序,旨在提供极致的推文匿名浏览体验。本项目集成了 **Google Gemini AI** 实现的翻译功能,支持推文的卡片导出。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **AI & Automation**:\n - [Google Gemini API](https://ai.google.dev/) (Translation Engine)\n - [Vercel AI SDK](https://sdk.vercel.ai/docs) (Stream & State Management)\n - [Puppeteer](https://pptr.dev/) (Server-side Screenshot Generation)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Optional, for caching)\n - [SWR](https://swr.vercel.app/) (Data Fetching)\n - Zustand (Client-side global state)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone https://github.com/Chilfish/anonTweet.git\ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照以下配置设置关键变量。\n\n> **注意**: AI 翻译功能依赖于 Google Gemini API,截图功能依赖于正确的 HOSTNAME 配置。\n\n```env\nENVIRONMENT=\"development\" # development | production\nHOSTNAME=\"http://localhost:9080\" # ⚠️ 截图服务回调地址,生产环境请填写实际域名\n\n# ⚠️ 必需。用于服务端逆向获取推文数据流。\n# 若不配置,将受到严格的 Rate Limit 限制。\n# 支持配置多个 Key(用英文逗号分隔)以实现轮询负载均衡。\nTWEET_KEYS=\"your_twitter_auth_token_1,your_twitter_auth_token_2\"\n\n# 启用 AI 翻译功能\nENABLE_AI_TRANSLATION=\"true\"\n# Google Gemini API Key\nGEMINI_API_KEY=\"AIzaSy...\"\n# 模型选择 (支持 gemini-2.0-flash-exp, gemini-1.5-pro 等)\nGEMINI_MODEL=\"models/gemini-2.0-flash-exp\"\n\n# 如果不配置 DB_URL,系统将直接调用 API 而不使用持久化缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\"\n\n# 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n```\n\n#### 🔑 关于 TWEET_KEYS 的获取\n\n本项目使用 Rettiwt-API 进行数据抓取。为获取完整访问权限并降低风控概率,需注入 Twitter 用户凭证。支持配置多个账号凭证以应对高频请求时的 Rate Limit 问题。\n\n**操作步骤:**\n\n1. 安装浏览器扩展:\n - **Chrome/Chromium**: [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)\n - **Firefox**: [Rettiwt Auth Helper](https://addons.mozilla.org/en-US/firefox/addon/rettiwt-auth-helper)\n2. 建议使用浏览器的**无痕/隐私模式**登录 Twitter/X 账号。\n3. 登录后打开扩展,点击 `Get Key` / `Get API Key` 并复制生成的字符串。\n4. 将该字符串填入 `.env` 的 `TWEET_KEYS` 字段(多个 Key 用逗号分隔)。\n\n> **⚠️ Security Note**: 该 Key 本质上是账号 Cookies 的 Base64 编码,拥有完全账户权限,安全等级等同于你的账号+密码。请勿泄露。\n> **⚠️ Session Keep-alive**: 获取 Key 后,**请勿手动点击登出 (Log out)**,否则服务端 Session 将失效。直接关闭浏览器窗口即可。\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel Serverless 环境进行了深度适配。\n\n1. 在 Vercel 项目设置中,务必添加环境变量 `VERCEL=\"true\"` 以激活 React Router 的适配器逻辑。\n2. 配置 `GEMINI_API_KEY` 以启用线上的翻译服务。\n3. 确保 `HOSTNAME` 设置为生产环境域名,否则推文截图功能将无法正确回调渲染。\n\n## 🚧 Development Status\n\n### External Libraries Refactoring\n\n项目包含部分深度定制的第三方库核心,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 经深度修改以适配 Tailwind v4,并增加了对 AI 翻译实体(Auto Translation Entities)的渲染支持。\n- **`rettiwt-api`**: 针对最新的 Twitter GraphQL 接口进行了逆向工程适配,增强了数据获取的稳定性。\n"}, "a5ff7fc1993d7ad1aa161fd1238b4b3d30ac71c7": {"t": 1785771613.8328085, "n": 3319, "h": "95ab8a0a6a6ae65d", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 构建的现代化全栈应用程序,旨在提供极致的推文匿名浏览体验。本项目集成了 **Google Gemini AI** 实现的翻译功能,支持推文的卡片导出。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **AI & Automation**:\n - [Google Gemini API](https://ai.google.dev/) (Translation Engine)\n - [Vercel AI SDK](https://sdk.vercel.ai/docs) (Stream & State Management)\n - [Puppeteer](https://pptr.dev/) (Server-side Screenshot Generation)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Optional, for caching)\n - [SWR](https://swr.vercel.app/) (Data Fetching)\n - Zustand (Client-side global state)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone https://github.com/Chilfish/anonTweet.git\ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照以下配置设置关键变量。\n\n> **注意**: AI 翻译功能依赖于 Google Gemini API,截图功能依赖于正确的 HOSTNAME 配置。\n\n```env\nENVIRONMENT=\"development\" # development | production\nHOSTNAME=\"http://localhost:9080\" # ⚠️ 截图服务回调地址,生产环境请填写实际域名\n\n# ⚠️ 必需。用于服务端逆向获取推文数据流。\n# 若不配置,将受到严格的 Rate Limit 限制。\nTWEET_KEY=\"your_twitter_auth_token\"\n\n# 启用 AI 翻译功能\nENABLE_AI_TRANSLATION=\"true\"\n# Google Gemini API Key\nGEMINI_API_KEY=\"AIzaSy...\"\n# 模型选择 (支持 gemini-2.0-flash-exp, gemini-1.5-pro 等)\nGEMINI_MODEL=\"models/gemini-2.0-flash-exp\"\n\n# 如果不配置 DB_URL,系统将直接调用 API 而不使用持久化缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\"\n\n# 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n```\n\n#### 🔑 关于 TWEET_KEY 的获取\n\n本项目使用 Rettiwt-API 进行数据抓取。为获取完整访问权限并降低风控概率,需注入 Twitter 用户凭证。\n\n**操作步骤:**\n\n1. 安装浏览器扩展:\n - **Chrome/Chromium**: [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)\n - **Firefox**: [Rettiwt Auth Helper](https://addons.mozilla.org/en-US/firefox/addon/rettiwt-auth-helper)\n2. 建议使用浏览器的**无痕/隐私模式**登录 Twitter/X 账号。\n3. 登录后打开扩展,点击 `Get Key` / `Get API Key` 并复制生成的字符串。\n4. 将该字符串填入 `.env` 的 `TWEET_KEY` 字段。\n\n> **⚠️ Security Note**: 该 Key 本质上是账号 Cookies 的 Base64 编码,拥有完全账户权限,安全等级等同于你的账号+密码。请勿泄露。\n> **⚠️ Session Keep-alive**: 获取 Key 后,**请勿手动点击登出 (Log out)**,否则服务端 Session 将失效。直接关闭浏览器窗口即可。\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel Serverless 环境进行了深度适配。\n\n1. 在 Vercel 项目设置中,务必添加环境变量 `VERCEL=\"true\"` 以激活 React Router 的适配器逻辑。\n2. 配置 `GEMINI_API_KEY` 以启用线上的翻译服务。\n3. 确保 `HOSTNAME` 设置为生产环境域名,否则推文截图功能将无法正确回调渲染。\n\n## 🚧 Development Status\n\n### External Libraries Refactoring\n\n项目包含部分深度定制的第三方库核心,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 经深度修改以适配 Tailwind v4,并增加了对 AI 翻译实体(Auto Translation Entities)的渲染支持。\n- **`rettiwt-api`**: 针对最新的 Twitter GraphQL 接口进行了逆向工程适配,增强了数据获取的稳定性。\n"}, "aa0f78ee4ba04230bc90ca3a981178c08905999e": {"t": 1785771615.0278583, "n": 2149, "h": "124d9ef8b743f10a", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 的全栈应用程序,旨在提供推文的匿名查看、在线翻译编辑、持久化缓存以及卡片式图片导出功能。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Optional, for caching)\n - Zustand (Client-side global state)\n - React Router Loaders/Actions (Server-side data flow)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone \ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照 `example.env` 配置以下关键变量:\n\n```env\n# Database (Optional)\n# ⚠️ 数据库不再是必须的。如果不配置 DB_URL,系统将直接调用 API 而不使用缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\" # 默认为 false,如果有数据库请设为 true\n\n# Deployment Environment\n# ⚠️ 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n\n# Twitter Integration (Critical)\n# ⚠️ 必需。这是用于服务器端抓取推文的 Guest/Auth Token。\n# 如果不配置,极易触发 Twitter 的 429 限制。\nTWEET_KEY=\"your_twitter_auth_token\"\n```\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。如果不使用数据库,请跳过此步骤。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel 进行了适配。在 Vercel 仪表盘配置项目时,请务必添加以下环境变量以启用正确的构建预设:\n\n- **`VERCEL`**: `true`\n\n如果没有设置此变量,React Router 适配器可能无法正确加载,导致 Serverless Function 运行失败。\n\n项目结构详见 [项目架构文档](./docs/project_architecture.md)\n\n## 🚧 Development Status\n\n### External Libraries\n\n项目包含部分 fork 并修改的第三方库,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 基于 Vercel 的同名库修改,以适配自定义的 UI 渲染需求和样式(Tailwind v4)。\n- **`rettiwt-api`**: 基于 Rettiwt-API 修改,用于在服务端逆向获取 Twitter 数据流。\n"}, "07adcdf56d6b825d5e2174316f86a93acc012800": {"t": 1785771616.48724, "n": 2979, "h": "8fff0e0b16da1127", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 的全栈应用程序,旨在提供推文的匿名查看、在线翻译编辑、持久化缓存以及卡片式图片导出功能。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Optional, for caching)\n - Zustand (Client-side global state)\n - React Router Loaders/Actions (Server-side data flow)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone \ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照 `example.env` 配置以下关键变量:\n\n```env\n# Database (Optional)\n# ⚠️ 数据库不再是必须的。如果不配置 DB_URL,系统将直接调用 API 而不使用缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\" # 默认为 false,如果有数据库请设为 true\n\n# Deployment Environment\n# ⚠️ 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n\n# Twitter Integration (Critical)\n# ⚠️ 必需。这是用于服务器端抓取推文的 Guest/Auth Token。\n# 如果不配置,极易触发 Twitter 的 429 限制。\nTWEET_KEY=\"your_twitter_auth_token\"\n\n# S3 Storage (For image assets),暂时可不设置\nS3_ENDPOINT=\"https://...\"\nS3_ACCESS_KEY_ID=\"...\"\nS3_SECRET_ACCESS_KEY=\"...\"\nS3_BUCKET_NAME=\"...\"\nS3_PUBLIC_URL=\"...\"\n```\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。如果不使用数据库,请跳过此步骤。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel 进行了适配。在 Vercel 仪表盘配置项目时,请务必添加以下环境变量以启用正确的构建预设:\n\n- **`VERCEL`**: `true`\n\n如果没有设置此变量,React Router 适配器可能无法正确加载,导致 Serverless Function 运行失败。\n\n## 📂 Project Structure\n\n核心路由逻辑位于 `app/routes.ts`,采用了 React Router v7 的配置式路由定义。\n\n| 路径模式 | 文件位置 | 说明 |\n| :------------------- | :---------------------------- | :----------------------------------------------------------------- |\n| `/tweets/:id` | `app/routes/tweet.tsx` | **核心业务页**。推文详情、翻译编辑器、图片导出功能。 |\n| `/api/tweet/get/:id` | `app/routes/api/tweet/get.ts` | **Loader API**。获取推文数据(优先读库,无缓存则调用第三方 API)。 |\n| `/api/tweet/set` | `app/routes/api/tweet/set.ts` | **Action API**。保存/更新推文的翻译内容到数据库。 |\n\n> **Note**: `app/components` 目录下包含大量业务组件,如 `tweet/` (推文渲染) 和 `translation/` (翻译编辑器)。\n\n## 🚧 Development Status\n\n### External Libraries\n\n项目包含部分 fork 并修改的第三方库,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 基于 Vercel 的同名库修改,以适配自定义的 UI 渲染需求和样式(Tailwind v4)。\n- **`rettiwt-api`**: 基于 Rettiwt-API 修改,用于在服务端逆向获取 Twitter 数据流。\n"}, "22a856e28e941d2b27b3bb168bc65cdec1526230": {"t": 1785771617.9801545, "n": 3480, "h": "bde164f5e9d10a55", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 的全栈应用程序,旨在提供推文的匿名查看、在线翻译编辑、持久化缓存以及卡片式图片导出功能。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Optional, for caching)\n - Zustand (Client-side global state)\n - React Router Loaders/Actions (Server-side data flow)\n- **Utilities**:\n - `better-auth` (Authentication infrastructure)\n - `modern-screenshot` (Dom to image generation)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone \ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照 `example.env` 配置以下关键变量:\n\n```env\n# Database (Optional)\n# ⚠️ 数据库不再是必须的。如果不配置 DB_URL,系统将直接调用 API 而不使用缓存。\n# DB_URL=\"postgres://...\"\nENABLE_DB_CACHE=\"false\" # 默认为 true,如果没有数据库请设为 false\n\n# Deployment Environment\n# ⚠️ 部署到 Vercel 时必须设置为 true,本地开发设为 false 或留空\nVERCEL=\"false\"\n\n# Auth (Better Auth)\n# ⚠️ 用于 Session 加密,开发环境可生成随机字符串\nBETTER_AUTH_SECRET=\"your_generated_secret\"\nBETTER_AUTH_URL=\"http://localhost:9080\" # 或者是你的端口\n\n# Twitter Integration (Critical)\n# ⚠️ 必需。这是用于服务器端抓取推文的 Guest/Auth Token。\n# 如果不配置,极易触发 Twitter 的 429 限制。\nTWEET_KEY=\"your_twitter_auth_token\"\n\n# S3 Storage (For image assets),暂时可不设置\nS3_ENDPOINT=\"https://...\"\nS3_ACCESS_KEY_ID=\"...\"\nS3_SECRET_ACCESS_KEY=\"...\"\nS3_BUCKET_NAME=\"...\"\nS3_PUBLIC_URL=\"...\"\n```\n\n### 3. Database Migration (Optional)\n\n如果你启用了数据库(配置了 `DB_URL` 且 `ENABLE_DB_CACHE=true`),则需要初始化数据库 Schema。如果不使用数据库,请跳过此步骤。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📦 Deployment\n\n### Vercel 部署\n\n本项目针对 Vercel 进行了适配。在 Vercel 仪表盘配置项目时,请务必添加以下环境变量以启用正确的构建预设:\n\n- **`VERCEL`**: `true`\n\n如果没有设置此变量,React Router 适配器可能无法正确加载,导致 Serverless Function 运行失败。\n\n## 📂 Project Structure\n\n核心路由逻辑位于 `app/routes.ts`,采用了 React Router v7 的配置式路由定义。\n\n| 路径模式 | 文件位置 | 说明 |\n| :------------------- | :---------------------------- | :----------------------------------------------------------------- |\n| `/tweets/:id` | `app/routes/tweet.tsx` | **核心业务页**。推文详情、翻译编辑器、图片导出功能。 |\n| `/api/tweet/get/:id` | `app/routes/api/tweet/get.ts` | **Loader API**。获取推文数据(优先读库,无缓存则调用第三方 API)。 |\n| `/api/tweet/set` | `app/routes/api/tweet/set.ts` | **Action API**。保存/更新推文的翻译内容到数据库。 |\n\n> **Note**: `app/components` 目录下包含大量业务组件,如 `tweet/` (推文渲染) 和 `translation/` (翻译编辑器)。\n\n## 🚧 Development Status\n\n### Authentication\n\n目前项目的认证模块处于 **开发/简化模式**:\n\n- 虽然集成了 `better-auth`,但 **Auth UI 路由**(如 `/auth/sign-in`, `/auth/sign-up`)在 `routes.ts` 中已被注释禁用。\n- 项目当前主要依赖匿名 Session 或简化的验证逻辑来处理用户状态。\n- 相关的管理后台路由(`/admin/*`)和设置路由(`/settings/*`)也暂时处于禁用状态。\n\n### External Libraries\n\n项目包含部分 fork 并修改的第三方库,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 基于 Vercel 的同名库修改,以适配自定义的 UI 渲染需求和样式(Tailwind v4)。\n- **`rettiwt-api`**: 基于 Rettiwt-API 修改,用于在服务端逆向获取 Twitter 数据流。\n"}, "bbfe0edb31216934d0bd702df0a244078f74796a": {"t": 1785771620.0879903, "n": 2892, "h": "3149d8350361ab05", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 的全栈应用程序,旨在提供推文的匿名查看、在线翻译编辑、持久化缓存以及卡片式图片导出功能。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n- **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n- **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n- **UI System**:\n - [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n - [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n - [Lucide React](https://lucide.dev/) (Icons)\n- **Data & State**:\n - [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Neon Serverless)\n - Zustand (Client-side global state)\n - React Router Loaders/Actions (Server-side data flow)\n- **Utilities**:\n - `better-auth` (Authentication infrastructure)\n - `modern-screenshot` (Dom to image generation)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone \ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照 `example.env` 配置以下关键变量:\n\n```env\n# Database (Neon/PostgreSQL)\nDB_URL=\"postgres://...\"\n\n# Auth (Better Auth)\n# ⚠️ 用于 Session 加密,开发环境可生成随机字符串\nBETTER_AUTH_SECRET=\"your_generated_secret\"\nBETTER_AUTH_URL=\"http://localhost:9080\" # 或者是你的端口\n\n# Twitter Integration (Critical)\n# ⚠️ 必需。这是用于服务器端抓取推文的 Guest/Auth Token。\n# 如果不配置,极易触发 Twitter 的 429 限制。\nTWEET_KEY=\"your_twitter_auth_token\"\n```\n\n### 3. Database Migration\n\n本项目使用 Drizzle Kit 管理数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📂 Project Structure\n\n核心路由逻辑位于 `app/routes.ts`,采用了 React Router v7 的配置式路由定义。\n\n| 路径模式 | 文件位置 | 说明 |\n| :------------------- | :---------------------------- | :----------------------------------------------------------------- |\n| `/tweets/:id` | `app/routes/tweet.tsx` | **核心业务页**。推文详情、翻译编辑器、图片导出功能。 |\n| `/api/tweet/get/:id` | `app/routes/api/tweet/get.ts` | **Loader API**。获取推文数据(优先读库,无缓存则调用第三方 API)。 |\n| `/api/tweet/set` | `app/routes/api/tweet/set.ts` | **Action API**。保存/更新推文的翻译内容到数据库。 |\n\n> **Note**: `app/components` 目录下包含大量业务组件,如 `tweet/` (推文渲染) 和 `translation/` (翻译编辑器)。\n\n## 🚧 Development Status\n\n### Authentication\n\n目前项目的认证模块处于 **开发/简化模式**:\n\n- 虽然集成了 `better-auth`,但 **Auth UI 路由**(如 `/auth/sign-in`, `/auth/sign-up`)在 `routes.ts` 中已被注释禁用。\n- 项目当前主要依赖匿名 Session 或简化的验证逻辑来处理用户状态。\n- 相关的管理后台路由(`/admin/*`)和设置路由(`/settings/*`)也暂时处于禁用状态。\n\n### External Libraries\n\n项目包含部分 fork 并修改的第三方库,位于 `app/lib/` 目录下:\n\n- **`react-tweet`**: 基于 Vercel 的同名库修改,以适配自定义的 UI 渲染需求和样式(Tailwind v4)。\n- **`rettiwt-api`**: 基于 Rettiwt-API 修改,用于在服务端逆向获取 Twitter 数据流。\n"}, "51d5a900e969e1d9ffb8bad39b10bfe179208827": {"t": 1785771621.3744147, "n": 2694, "h": "a9a1d5ce62ac9737", "c": "# Anon Tweet\n\n**Anon Tweet** 是一个基于 **React Router v7** 的全栈应用程序,旨在提供推文的匿名查看、在线翻译编辑、持久化缓存以及卡片式图片导出功能。\n\n## 🛠 Tech Stack\n\n本项目采用现代 React 全栈架构,利用 Bun 作为高性能运行时。\n\n* **Core Framework**: [React Router v7](https://reactrouter.com/) (Fullstack, SSR/CSR)\n* **Language & Runtime**: TypeScript, [Bun](https://bun.sh/)\n* **UI System**:\n * [Tailwind CSS v4](https://tailwindcss.com/) (Styling)\n * [coss/ui](https://coss.com/ui/docs) (Component Primitives)\n * [Lucide React](https://lucide.dev/) (Icons)\n* **Data & State**:\n * [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL (Neon Serverless)\n * Zustand (Client-side global state)\n * React Router Loaders/Actions (Server-side data flow)\n* **Utilities**:\n * `better-auth` (Authentication infrastructure)\n * `modern-screenshot` (Dom to image generation)\n\n## 🚀 Getting Started\n\n按照以下步骤在本地启动开发环境。\n\n### 1. Installation\n\n确保本地已安装 [Bun](https://bun.sh/)。\n\n```bash\n# Clone repository\ngit clone \ncd anonTweet\n\n# Install dependencies\nbun install\n```\n\n### 2. Environment Setup\n\n在项目根目录创建 `.env` 文件,并参照 `example.env` 配置以下关键变量:\n\n```env\n# Database (Neon/PostgreSQL)\nDB_URL=\"postgres://...\"\n\n# Auth (Better Auth)\n# ⚠️ 用于 Session 加密,开发环境可生成随机字符串\nBETTER_AUTH_SECRET=\"your_generated_secret\"\nBETTER_AUTH_URL=\"http://localhost:9080\" # 或者是你的端口\n\n# Twitter Integration (Critical)\n# ⚠️ 必需。这是用于服务器端抓取推文的 Guest/Auth Token。\n# 如果不配置,极易触发 Twitter 的 429 限制。\nTWEET_KEY=\"your_twitter_auth_token\"\n```\n\n### 3. Database Migration\n\n本项目使用 Drizzle Kit 管理数据库 Schema。\n\n```bash\n# 将 Schema 推送到数据库 (Prototyping)\nbun run db:push\n\n# 或者生成迁移文件并执行 (Production)\n# bun run db:generate\n# bun run db:migrate\n```\n\n### 4. Start Dev Server\n\n启动开发服务器,默认运行在 `http://localhost:9080`。\n\n```bash\nbun run dev\n```\n\n## 📂 Project Structure\n\n核心路由逻辑位于 `app/routes.ts`,采用了 React Router v7 的配置式路由定义。\n\n| 路径模式 | 文件位置 | 说明 |\n| :--- | :--- | :--- |\n| `/tweets/:id` | `app/routes/tweet.tsx` | **核心业务页**。推文详情、翻译编辑器、图片导出功能。 |\n| `/api/tweet/get/:id` | `app/routes/api/tweet/get.ts` | **Loader API**。获取推文数据(优先读库,无缓存则调用第三方 API)。 |\n| `/api/tweet/set` | `app/routes/api/tweet/set.ts` | **Action API**。保存/更新推文的翻译内容到数据库。 |\n\n\n> **Note**: `app/components` 目录下包含大量业务组件,如 `tweet/` (推文渲染) 和 `translation/` (翻译编辑器)。\n\n## 🚧 Development Status\n\n### Authentication\n目前项目的认证模块处于 **开发/简化模式**:\n* 虽然集成了 `better-auth`,但 **Auth UI 路由**(如 `/auth/sign-in`, `/auth/sign-up`)在 `routes.ts` 中已被注释禁用。\n* 项目当前主要依赖匿名 Session 或简化的验证逻辑来处理用户状态。\n* 相关的管理后台路由(`/admin/*`)和设置路由(`/settings/*`)也暂时处于禁用状态。\n\n### External Libraries\n项目包含部分 fork 并修改的第三方库,位于 `app/lib/` 目录下:\n* **`react-tweet`**: 基于 Vercel 的同名库修改,以适配自定义的 UI 渲染需求和样式(Tailwind v4)。\n* **`rettiwt-api`**: 基于 Rettiwt-API 修改,用于在服务端逆向获取 Twitter 数据流。\n"}, "bb7031e1d831f2d7a3aaa55d80b399c3ed11640b": {"t": 1785771622.7758777, "n": 2962, "h": "e439bb7aac9a8474", "c": "# あのん Tweet - 在线推文查看与翻译工具\n\n一个简洁美观的在线推文查看器,支持匿名查看、编辑翻译、数据持久化,并可导出推文卡片为图片。\n\n🌐 **在线体验**: https://anon-tweet.chilfish.top/\n\n## ✨ 项目介绍\n\n随着搬运声优推特的账号越来越多,每次都要 F12 改文字确实有些麻烦。于是写了这个在线烤制推特的网站 —— 输入链接直接编辑翻译,然后导出图片!🤤\n\n本次更新引入了数据库层,实现了推文内容和翻译结果的自动保存,并重构了全新的 UI 界面。\n\n### 🚀 主要功能\n\n- 📱 **匿名访问**:无需登录推特账号即可查看推文(依赖 API Key)。\n- 💾 **数据持久化**:自动缓存推文内容及您的翻译历史,再次访问时秒开,进度不丢失。\n- ✏️ **在线编辑**:直接在网页上编辑推文翻译内容,支持 Tag 高亮。\n- 🖼️ **图片导出**:一键导出美观的推文卡片图片。\n\n- 🧵 **Thread 支持**:支持翻译整串回复,复制最新回复链接即可获取完整对话。\n- 🎨 **自定义样式**:原文+分隔线+译文的布局,支持移动端适配。\n\n### 🛠️ 技术栈\n\n- **全栈框架**: React Router v7\n- **前端库**: React 19 + TypeScript\n- **运行时**: Bun.js\n- **样式**: Tailwind CSS v4 + [coss ui](https://coss.com/ui/docs/)\n- **数据库/ORM**: Drizzle ORM + [Neon (PostgreSQL)](https://neon.com/)\n- **认证**: Better Auth (目前处于匿名模式,Auth 流暂时屏蔽)\n- **HTTP/数据**: Axios\n- **核心依赖**:\n - [react-tweet](https://github.com/vercel/react-tweet) (Fork & Modified) - UI 组件基础\n - [Rettiwt-API](https://github.com/Rishikant181/Rettiwt-API) (Fork & Modified) - 推特数据获取\n\n### 🚀 快速开始\n\n项目使用 [Bun.js](https://bun.sh/) 作为运行时和包管理器。\n\n#### 1. 安装依赖\n\n```bash\nbun install\n```\n\n#### 2. 配置环境变量\n\n复制 `example.env` 为 `.env` 并填入必要信息(详见下文“环境变量说明”)。\n\n#### 3. 数据库设置\n\n本项目使用 Drizzle ORM + PostgreSQL,先在 [Neon](https://neon.com/)创建项目,同步数据库 Schema:\n\n```bash\n# 推送 Schema 到数据库\nbun run db:push\n```\n\n#### 4. 启动开发服务器\n\n```bash\nbun run dev\n```\n\n应用将在 `http://localhost:9080` 运行。\n\n### ⚙️ 环境变量说明\n\n为了项目正常运行,请务必配置以下环境变量:\n\n#### 核心配置\n\n- `ENVIRONMENT`: 设置为 `development` 或 `production`。\n- `DB_URL`: PostgreSQL 数据库连接字符串(推荐使用 Neon)。\n\n#### Twitter API 配置 (关键)\n\n- `TWEET_KEY`: **必需**。这是 Guest Token 或 Auth Token。\n - **获取方式**: 建议安装 Chrome 插件 [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)。\n - 登录 Twitter 后,通过插件复制 Token。\n - **注意**: 如果不配置此 Key,或者 Key 失效,极易触发 Twitter 的 429 (Too Many Requests) 限制。所谓的“匿名”是指最终用户无需登录,但服务器端抓取仍需凭证。\n\n#### 认证配置 (Better Auth)\n\n即使当前 UI 屏蔽了登录入口,底层仍依赖 Auth 配置来处理匿名会话:\n\n- `BETTER_AUTH_SECRET`: 生成一个随机字符串(如 `openssl rand -hex 32`)。\n- `BETTER_AUTH_URL`: 开发环境填 `http://localhost:9080` (或端口号),生产环境填域名。\n\n\n\n### 🚀 部署\n\n#### Vercel 部署 (推荐)\n\n1. Fork 本项目到你的 GitHub。\n2. 在 [Vercel](https://vercel.com) 导入项目。\n3. 框架预设选择 \"React Router\"。\n4. 填入上述环境变量。\n5. 部署完成!\n\n### 🙏 特别鸣谢\n\n- [react-tweet](https://github.com/vercel/react-tweet) - 提供了优秀的推文组件基础(MIT协议)。\n- [Rettiwt-API](https://github.com/Rishikant181/Rettiwt-API) - 强大的推特逆向 API 库(MIT协议)。\n- [React Router](https://reactrouter.com/) - 现代化的 React 全栈框架。\n- [Drizzle ORM](https://orm.drizzle.team/) - 优秀的 TypeScript ORM。\n\n### 📄 许可证\n\nMIT License - 详见 [LICENSE](./LICENSE) 文件\n\n---\n\n
\n Built with ❤️ using Bun\n
\n Made by @Chilfish\n
\n"}, "45af415ac8d2b1724e4e315770251672e7302e4a": {"t": 1785771624.4713006, "n": 2961, "h": "bd9d28c99ce33d3a", "c": "# あのん Tweet - 在线推文查看与翻译工具\n\n一个简洁美观的在线推文查看器,支持匿名查看、编辑翻译、数据持久化,并可导出推文卡片为图片。\n\n🌐 **在线体验**: https://anon-tweet.chilfish.top/\n\n## ✨ 项目介绍\n\n随着搬运声优推特的账号越来越多,每次都要 F12 改文字确实有些麻烦。于是写了这个在线烤制推特的网站 —— 输入链接直接编辑翻译,然后导出图片!🤤\n\n本次更新引入了数据库层,实现了推文内容和翻译结果的自动保存,并重构了全新的 UI 界面。\n\n### 🚀 主要功能\n\n- 📱 **匿名访问**:无需登录推特账号即可查看推文(依赖 API Key)。\n- 💾 **数据持久化**:自动缓存推文内容及您的翻译历史,再次访问时秒开,进度不丢失。\n- ✏️ **在线编辑**:直接在网页上编辑推文翻译内容,支持 Tag 高亮。\n- 🖼️ **图片导出**:一键导出美观的推文卡片图片。\n\n- 🧵 **Thread 支持**:支持翻译整串回复,复制最新回复链接即可获取完整对话。\n- 🎨 **自定义样式**:原文+分隔线+译文的布局,支持移动端适配。\n\n### 🛠️ 技术栈\n\n- **全栈框架**: React Router v7\n- **前端库**: React 19 + TypeScript\n- **运行时**: Bun.js\n- **样式**: Tailwind CSS v4 + [coss ui](https://coss.com/ui/docs/)\n- **数据库/ORM**: Drizzle ORM + [Neon (PostgreSQL)](https://neon.com/)\n- **认证**: Better Auth (目前处于匿名模式,Auth 流暂时屏蔽)\n- **HTTP/数据**: Axios\n- **核心依赖**:\n - [react-tweet](https://github.com/vercel/react-tweet) (Fork & Modified) - UI 组件基础\n - [Rettiwt-API](https://github.com/Rishikant181/Rettiwt-API) (Fork & Modified) - 推特数据获取\n\n### 🚀 快速开始\n\n项目使用 [Bun.js](https://bun.sh/) 作为运行时和包管理器。\n\n#### 1. 安装依赖\n\n```bash\nbun install\n```\n\n#### 2. 配置环境变量\n\n复制 `example.env` 为 `.env` 并填入必要信息(详见下文“环境变量说明”)。\n\n#### 3. 数据库设置\n\n本项目使用 Drizzle ORM + PostgreSQL,先在 [Neon](https://neon.com/)创建项目,同步数据库 Schema:\n\n```bash\n# 推送 Schema 到数据库\nbun run db:push\n```\n\n#### 4. 启动开发服务器\n\n```bash\nbun run dev\n```\n\n应用将在 `http://localhost:9080` 运行。\n\n### ⚙️ 环境变量说明\n\n为了项目正常运行,请务必配置以下环境变量:\n\n#### 核心配置\n- `ENVIRONMENT`: 设置为 `development` 或 `production`。\n- `DB_URL`: PostgreSQL 数据库连接字符串(推荐使用 Neon)。\n\n#### Twitter API 配置 (关键)\n\n- `TWEET_KEY`: **必需**。这是 Guest Token 或 Auth Token。\n - **获取方式**: 建议安装 Chrome 插件 [X Auth Helper](https://chromewebstore.google.com/detail/x-auth-helper/igpkhkjmpdecacocghpgkghdcmcmpfhp)。\n - 登录 Twitter 后,通过插件复制 Token。\n - **注意**: 如果不配置此 Key,或者 Key 失效,极易触发 Twitter 的 429 (Too Many Requests) 限制。所谓的“匿名”是指最终用户无需登录,但服务器端抓取仍需凭证。\n\n#### 认证配置 (Better Auth)\n\n即使当前 UI 屏蔽了登录入口,底层仍依赖 Auth 配置来处理匿名会话:\n\n- `BETTER_AUTH_SECRET`: 生成一个随机字符串(如 `openssl rand -hex 32`)。\n- `BETTER_AUTH_URL`: 开发环境填 `http://localhost:9080` (或端口号),生产环境填域名。\n\n\n\n### 🚀 部署\n\n#### Vercel 部署 (推荐)\n\n1. Fork 本项目到你的 GitHub。\n2. 在 [Vercel](https://vercel.com) 导入项目。\n3. 框架预设选择 \"React Router\"。\n4. 填入上述环境变量。\n5. 部署完成!\n\n### 🙏 特别鸣谢\n\n- [react-tweet](https://github.com/vercel/react-tweet) - 提供了优秀的推文组件基础(MIT协议)。\n- [Rettiwt-API](https://github.com/Rishikant181/Rettiwt-API) - 强大的推特逆向 API 库(MIT协议)。\n- [React Router](https://reactrouter.com/) - 现代化的 React 全栈框架。\n- [Drizzle ORM](https://orm.drizzle.team/) - 优秀的 TypeScript ORM。\n\n### 📄 许可证\n\nMIT License - 详见 [LICENSE](./LICENSE) 文件\n\n---\n\n
\n Built with ❤️ using Bun\n
\n Made by @Chilfish\n
\n"}, "5b73e3acda07ad8ce324bab4ff602b2d7131edfb": {"t": 1785771626.3315792, "n": 1624, "h": "916c8f56df89de49", "c": "# あのん Tweet - 在线推文查看与翻译工具\n\n一个简洁美观的在线推文查看器,支持匿名查看、编辑翻译并导出推文卡片为图片。\n\n🌐 **在线体验**: https://anon-tweet.chilfish.top/\n\n## ✨ 项目介绍\n\n随着搬运声优推特的账号越来越多,每次都要 F12 改文字确实有些麻烦。于是写了这个在线烤制推特的网站 —— 输入链接直接编辑翻译,然后导出图片!🤤\n\n### 🚀 主要功能\n\n- 📱 **匿名访问**:类似浏览器无痕模式,无需登录即可查看推文\n- ✏️ **在线编辑**:直接在网页上编辑推文翻译内容\n- 🖼️ **图片导出**:一键导出美观的推文卡片图片\n- 🧵 **Thread 支持**:支持翻译整串回复,复制最新回复链接即可获取完整对话\n- 🎨 **自定义样式**:借鉴传声筒和园艺部的做法,原文+分隔线+译文的布局\n- 🏷️ **tag高亮**:翻译分为文本和tag,保持语法高亮效果\n- 📱 **移动端适配**:支持手机端使用(建议横屏保存以获得最佳宽度)\n\n### 🛠️ 技术栈\n\n- **前端框架**: React 19 + TypeScript\n- **路由**: React Router v7\n- **运行时**: Bun.js\n- **样式**: Tailwind CSS v4 + shadcn/ui\n- **状态管理**: Zustand\n- **HTTP 客户端**: Axios + SWR\n- **图片生成**: modern-screenshot\n\n### 🚀 快速开始\n\n项目使用 [Bun.js](https://bun.sh/) 作为运行时和包管理器:\n\n```bash\n# 安装项目依赖\nbun install\n\n# 启动开发服务器\nbun run dev\n\n# 构建项目\nbun run build\n```\n\n应用将在 `http://localhost:5173` 运行,支持热重载。\n\nTweet API key 环境变量:为了避免触发429请求频繁的报错,建议查看 [rettiwt-api 文档](./app//lib//rettiwt-api/README.md) 设置 key\n\n### 🚀 部署\n\n#### Vercel 部署 (推荐)\n\n1. Fork 本项目到你的 GitHub\n2. 在 [Vercel](https://vercel.com) 导入项目\n3. 选择 \"React Router\" 框架预设\n4. 部署完成!\n\n### 🙏 特别鸣谢\n\n- [react-tweet](https://github.com/vercel/react-tweet) - 提供了优秀的推文组件基础,本项目基于其 MIT 许可证进行开发\n- [React Router](https://reactrouter.com/) - 现代化的 React 全栈框架\n- [Bun.js](https://bun.sh/) - 极速的 JavaScript 运行时\n- [Tailwind CSS](https://tailwindcss.com/) - 实用优先的 CSS 框架\n- [shadcn/ui](https://ui.shadcn.com/) - 精美的 React 组件库\n\n### 📄 许可证\n\nMIT License - 详见 [LICENSE](./LICENSE) 文件\n\n---\n\n
\n Built with ❤️ using Bun\n
\n Made by @Chilfish\n
\n"}, "dc577fb96fb550845c5268f74db7249c6afa7a16": {"t": 1785771627.5531883, "n": 1523, "h": "e8f1ef7c7accc13f", "c": "# あのん Tweet - 在线推文查看与翻译工具\n\n一个简洁美观的在线推文查看器,支持匿名查看、编辑翻译并导出推文卡片为图片。\n\n🌐 **在线体验**: https://anon-tweet.chilfish.top/\n\n## ✨ 项目介绍\n\n随着搬运声优推特的账号越来越多,每次都要 F12 改文字确实有些麻烦。于是写了这个在线烤制推特的网站 —— 输入链接直接编辑翻译,然后导出图片!🤤\n\n### 🚀 主要功能\n\n- 📱 **匿名访问**:类似浏览器无痕模式,无需登录即可查看推文\n- ✏️ **在线编辑**:直接在网页上编辑推文翻译内容\n- 🖼️ **图片导出**:一键导出美观的推文卡片图片\n- 🧵 **Thread 支持**:支持翻译整串回复,复制最新回复链接即可获取完整对话\n- 🎨 **自定义样式**:借鉴传声筒和园艺部的做法,原文+分隔线+译文的布局\n- 🏷️ **tag高亮**:翻译分为文本和tag,保持语法高亮效果\n- 📱 **移动端适配**:支持手机端使用(建议横屏保存以获得最佳宽度)\n\n### 🛠️ 技术栈\n\n- **前端框架**: React 19 + TypeScript\n- **路由**: React Router v7\n- **运行时**: Bun.js\n- **样式**: Tailwind CSS v4 + shadcn/ui\n- **状态管理**: Zustand\n- **HTTP 客户端**: Axios + SWR\n- **图片生成**: modern-screenshot\n\n### 🚀 快速开始\n\n项目使用 [Bun.js](https://bun.sh/) 作为运行时和包管理器:\n\n```bash\n# 安装项目依赖\nbun install\n\n# 启动开发服务器\nbun run dev\n\n# 构建项目\nbun run build\n```\n\n应用将在 `http://localhost:5173` 运行,支持热重载。\n\n### 🚀 部署\n\n#### Vercel 部署 (推荐)\n\n1. Fork 本项目到你的 GitHub\n2. 在 [Vercel](https://vercel.com) 导入项目\n3. 选择 \"React Router\" 框架预设\n4. 部署完成!\n\n### 🙏 特别鸣谢\n\n- [react-tweet](https://github.com/vercel/react-tweet) - 提供了优秀的推文组件基础,本项目基于其 MIT 许可证进行开发\n- [React Router](https://reactrouter.com/) - 现代化的 React 全栈框架\n- [Bun.js](https://bun.sh/) - 极速的 JavaScript 运行时\n- [Tailwind CSS](https://tailwindcss.com/) - 实用优先的 CSS 框架\n- [shadcn/ui](https://ui.shadcn.com/) - 精美的 React 组件库\n\n### 📄 许可证\n\nMIT License - 详见 [LICENSE](./LICENSE) 文件\n\n---\n\n
\n Built with ❤️ using Bun\n
\n Made by @Chilfish\n
\n"}, "e103f484682490d3a68e837a528ed6e2da5db502": {"t": 1785771628.8004043, "n": 1010, "h": "8cec7a5ef03e02d7", "c": "# あのん Tweet - 在线推文查看与翻译工具\n\n一个简洁美观的在线推文查看器,支持匿名查看、编辑翻译并导出推文卡片为图片。\n\n访问:https://anon-tweet.chilfish.top/\n\n## ✨ 项目介绍\n\n随着搬运声优推特的账号越来越多,每次都要 F12 改文字确实有些麻烦。于是写了这个在线烤制推特的网站 —— 输入链接直接编辑翻译,然后导出图片!🤤\n\n## 🚀 主要功能\n\n- 📱 **匿名访问**:类似浏览器无痕模式,无需登录即可查看推文\n- ✏️ **在线编辑**:直接在网页上编辑推文翻译内容\n- 🖼️ **图片导出**:一键导出美观的推文卡片图片\n- 🧵 **Thread 支持**:支持翻译整串回复,复制最新回复链接即可获取完整对话\n- 🎨 **自定义样式**:借鉴传声筒和园艺部的做法,原文+分隔线+译文的布局\n- 🏷️ **tag高亮**:翻译分为文本和tag,保持语法高亮效果\n- 📱 **移动端适配**:支持手机端使用(建议横屏保存以获得最佳宽度)\n\n## 📦 开始使用\n\n```bash\nbun install\n\nbun run dev\n```\n\n应用将在 `http://localhost:5173` 运行。\n\n创建生产版本:\n\n```bash\nbun run build\n```\n\n## 🎨 样式说明\n\n项目使用 [Tailwind CSS](https://tailwindcss.com/) 进行样式设计,配合 [shadcn/ui](https://ui.shadcn.com/) 组件库,提供现代化的用户界面。\n\n分隔线支持输入 HTML 自定义样式,可以根据需要调整原文与译文之间的视觉分隔效果。\n\n## 🙏 特别鸣谢\n\n- [react-tweet](https://github.com/vercel/react-tweet) - 提供了优秀的推文组件基础,本项目基于其 MIT 许可证进行开发\n- [React Router](https://reactrouter.com/) - 现代化的 React 全栈框架\n- 传声筒和园艺部 - 样式设计灵感来源\n\n## 📄 许可证\n\nMIT License - 详见 [LICENSE](./LICENSE) 文件\n\n---\n\nBuilt with ❤️ using React Router & Bun\n"}, "b58270c1b08d42917d8eee9c4aafec54b9897b48": {"t": 1785771630.6637232, "n": 1779, "h": "7160b828f1b1e669", "c": "# Welcome to React Router!\n\nA modern, production-ready template for building full-stack React applications using React Router.\n\n[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/remix-run/react-router-templates/tree/main/default)\n\n## Features\n\n- 🚀 Server-side rendering\n- ⚡️ Hot Module Replacement (HMR)\n- 📦 Asset bundling and optimization\n- 🔄 Data loading and mutations\n- 🔒 TypeScript by default\n- 🎉 TailwindCSS for styling\n- 📖 [React Router docs](https://reactrouter.com/)\n\n## Getting Started\n\n### Installation\n\nInstall the dependencies:\n\n```bash\nnpm install\n```\n\n### Development\n\nStart the development server with HMR:\n\n```bash\nnpm run dev\n```\n\nYour application will be available at `http://localhost:5173`.\n\n## Building for Production\n\nCreate a production build:\n\n```bash\nnpm run build\n```\n\n## Deployment\n\n### Docker Deployment\n\nTo build and run using Docker:\n\n```bash\ndocker build -t my-app .\n\n# Run the container\ndocker run -p 3000:3000 my-app\n```\n\nThe containerized application can be deployed to any platform that supports Docker, including:\n\n- AWS ECS\n- Google Cloud Run\n- Azure Container Apps\n- Digital Ocean App Platform\n- Fly.io\n- Railway\n\n### DIY Deployment\n\nIf you're familiar with deploying Node applications, the built-in app server is production-ready.\n\nMake sure to deploy the output of `npm run build`\n\n```\n├── package.json\n├── package-lock.json (or pnpm-lock.yaml, or bun.lockb)\n├── build/\n│ ├── client/ # Static assets\n│ └── server/ # Server-side code\n```\n\n## Styling\n\nThis template comes with [Tailwind CSS](https://tailwindcss.com/) already configured for a simple default starting experience. You can use whatever CSS framework you prefer.\n\n---\n\nBuilt with ❤️ using React Router.\n"}, "07c8f2ace82971fe0bddd16604f5f89a13a301cd": {"t": 1785771631.8538432, "n": 1450, "h": "7ba16f1bf0991960", "c": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.\n"}}}}