fahreziadh/inklish

GitHub: fahreziadh/inklish

Inklish 是一个在真实职场沟通场景中练习英语写作的 AI 辅助应用,通过模拟邮件、Slack、GitHub 等平台帮助用户提升实际工作中的英语表达能力。

Stars: 21 | Forks: 1

Inklish home screen: pick a format to practice in

# Inklish 在你书写的地方练习英语。Inklish 让你在真实的格式中进行无压力的重复练习:给项目经理发邮件、回复开源项目维护者、在繁忙的群聊中跟进。 你可以使用 Anki 卡片或普通的聊天机器人窗口,但不如在看起来和感觉上都像真实场景的聊天室里进行练习:邮件往来、Slack、GitHub issues、WhatsApp、Telegram、Discord、Teams、LinkedIn 和客户支持聊天。AI 角色会扮演对话的另一方。教练会阅读你发送的每条消息,并帮助你听起来更自然。 而且它是 BYOK(自带 Key)的:带上你自己的 OpenRouter key 就可以运行了。你可以在管理面板中切换模型(从便宜快速到前沿模型),准确查看每个用户的花费,并直接向提供商付款。没有加价,没有锁定。 ## 工作原理 1. **选择场景。** 十种格式,从正式的邮件往来到随意的闲聊,或者描述你自己的场景。 2. **准备。** 一个简短的访谈(一次一个问题,最多三个跟进问题)会将你的情况转化为一个具体的场景和一位对话伙伴。 3. **书写。** 角色会以符合平台风格的语气回复:在邮件中干练清晰,在聊天中快速随意。 4. **接受指导。** 你发送的每条消息都会带有标记返回:语法修正、语气建议,以及当你写得生硬时提供更自然的重写版本。角色使用的精妙措辞也会被标记出来,供你参考借鉴。 登录仅支持 Google。每个账号都有免费的每日消息额度(默认 30 条,可配置),并且 `/admin` 的管理仪表板会显示每个用户的使用情况、token 和成本,以及模型、prompt、场景模板和限制的控制选项。 ## 技术栈 - [Convex](https://convex.dev) 用于数据库、认证和 AI 操作 - [OpenRouter](https://openrouter.ai) 用于模型,可在管理面板中热切换 - React 19、Vite 和 [TanStack Router](https://tanstack.com/router) - Tailwind CSS 配合 shadcn/ui、Biome、Bun ## 自行运行 你需要 [Bun](https://bun.sh)、一个免费的 [Convex](https://convex.dev) 账号、一个 [OpenRouter](https://openrouter.ai) API key 以及 Google OAuth 凭证。 ``` bun install bunx convex dev # creates a dev deployment and writes .env.local ``` 配置后端。这些配置存在于 Convex 部署中,而不是本地文件里: ``` bunx convex env set OPENROUTER_API_KEY sk-or-... bunx convex env set ADMIN_EMAIL you@example.com bunx convex env set AUTH_GOOGLE_ID your-client-id.apps.googleusercontent.com bunx convex env set AUTH_GOOGLE_SECRET your-client-secret bunx convex env set SITE_URL http://localhost:3000/inklish ``` 关于 Google 凭证,请在 [Google Cloud console](https://console.cloud.google.com/apis/credentials) 中创建一个 OAuth 客户端(Web 应用程序),并使用 `bunx convex dev` 打印出的部署名称添加以下授权重定向 URI: ``` https://.convex.site/api/auth/callback/google ``` Web 客户端不使用 `.env` 文件 —— 它的 Convex URL 位于 [`src/lib/env.ts`](src/lib/env.ts) 中。在开发环境中,它指向本地的 Convex 部署(`http://127.0.0.1:3210`);如果 `bunx convex dev` 为你提供了一个云端开发部署,请将其 `.convex.cloud` URL 填入此处。 然后在第二个终端中启动应用: ``` bun run dev ``` 打开 http://localhost:3000/inklish,使用 Google 登录,并开始会话。与 `ADMIN_EMAIL` 匹配的账号可以看到 `/admin`;其他所有人在该页面会收到 404。 ## 脚本 | 命令 | 作用 | | --- | --- | | `bun run dev` | 在端口 3000 上运行 Vite 开发服务器 | | `bunx convex dev` | 运行支持实时推送的 Convex 开发部署 | | `bun run build` | 生产构建 | | `bun run deploy` | 部署 Convex functions,执行构建,并部署 Worker | | `bun run test` | 运行 Vitest | | `bun run check` | Biome lint + 格式化 | ## 部署 线上的应用运行在 [fahrezi.fyi/inklish](https://fahrezi.fyi/inklish),由一个 Cloudflare Worker 提供服务:`wrangler.jsonc` 将 `fahrezi.fyi/inklish*` 路由到该 Worker,并且 [`worker/index.ts`](worker/index.ts) 在提供静态构建服务之前会移除 `/inklish` 前缀(该路由上的其他任何请求都会回退到网站的 origin 服务器)。 ``` bun run deploy # convex/ changed: deploy backend + frontend bun run build && bunx wrangler deploy # frontend-only changes ``` 应用挂载在 `/inklish` 基础路径下。如果你想在自己的副本中将其托管在不同的路径下(或托管在根目录下),需要修改四个地方:`vite.config.ts` 中的 `base`、`src/main.tsx` 中的 `basepath`、`worker/index.ts` 中的 `BASE` 以及 `wrangler.jsonc` 中的路由 —— 此外还要修改 `src/lib/env.ts` 中的生产环境 Convex URL 以及你部署环境中的 `SITE_URL`。 ## 贡献 欢迎提交 issues 和 pull requests。有关设置和规范,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 许可证 [MIT](LICENSE)
标签:AI教育, Convex, OpenRouter, React, Syscalls, 场景模拟, 文本润色, 程序员工具, 自动化攻击, 英语学习