Files

1 line
75 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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 <repository-url>\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 <repository-url>\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 <repository-url>\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 <repository-url>\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 <repository-url>\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<!--- 📺 **B站发布 (实验性)**:支持将翻译好的图文内容尝试发布到 Bilibili 动态(需自行配置环境)。-->\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<!--#### 对象存储 (S3)\n\n用于存储:\n\n- `S3_ENDPOINT`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`, `S3_BUCKET_NAME`, `S3_PUBLIC_URL`: 填写兼容 S3 协议的存储服务信息(如 AWS, Cloudflare R2, MinIO 等)。-->\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<div align=\"center\">\n <strong>Built with ❤️ using Bun</strong>\n <br>\n <sub>Made by <a href=\"https://www.bilibili.com/opus/1115783244547096578\">@Chilfish</a></sub>\n</div>\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<!--- 📺 **B站发布 (实验性)**:支持将翻译好的图文内容尝试发布到 Bilibili 动态(需自行配置环境)。-->\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<!--#### 对象存储 (S3)\n\n用于存储:\n\n- `S3_ENDPOINT`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`, `S3_BUCKET_NAME`, `S3_PUBLIC_URL`: 填写兼容 S3 协议的存储服务信息(如 AWS, Cloudflare R2, MinIO 等)。-->\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<div align=\"center\">\n <strong>Built with ❤️ using Bun</strong>\n <br>\n <sub>Made by <a href=\"https://www.bilibili.com/opus/1115783244547096578\">@Chilfish</a></sub>\n</div>\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<div align=\"center\">\n <strong>Built with ❤️ using Bun</strong>\n <br>\n <sub>Made by <a href=\"https://www.bilibili.com/opus/1115783244547096578\">@Chilfish</a></sub>\n</div>\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<div align=\"center\">\n <strong>Built with ❤️ using Bun</strong>\n <br>\n <sub>Made by <a href=\"https://www.bilibili.com/opus/1115783244547096578\">@Chilfish</a></sub>\n</div>\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"}}}}