YouTeacher 是一个面向 ESL 市场的 B2B 招聘平台——它把(母语或有资质的)英语教师,和在中国想招他们的学校对接起来。
市场的两端各有诉求。一端是想去海外任教的老师:建档、浏览职位、投递。另一端是要招人的学校和中介:搜索人才、发布职位、处理申请。YouTeacher 是居中的那一层,让两端彼此可被发现——职位数据流入(一部分是从现有招聘站抓取、再用 AI 解析而来),教师档案被做成可检索,两端各自拿到贴合自己需求的工具。
它以独立微服务的 monorepo 形态构建,每个服务一个 git 仓库,与合伙人 Pete 一起开发。目前尚未公开——各部分完成度不一,有的已在跑,有的还在补全。
架构
整体是刻意的「一个关注点一个服务」,而不是单体:
- 前端是 Next.js 15 / React 19 / TypeScript,按 DDD 分层(domain、application、infrastructure、features)。
- 后端共用一套模式:HTTP 用 Fastify,存储用 Prisma + PostgreSQL。每个后端服务只拥有一个 URL 前缀(
/auth、/jobs、/profile、/talents、/content、/admin),绝不越界。 - nginx 网关统一在最前面,按前缀路由;服务间调用走稳定的公网 URL,而不是易失效的内部 hostname。
- Meilisearch 支撑两个搜索密集的面(职位与人才)。
- 认证分两层——一层是服务间的签名凭据,另一层是独立的用户会话——所以一个端点可以同时要求「是可信服务在调」和「背后有已登录用户」。更强的二次因子(TOTP、WebAuthn)和 OAuth 叠在其上。
- 部署托管在 Coolify 上,用环境分支(dev / test / stage / prod)在推送时触发部署;全程 Docker。
开发期,每个真实服务还各有一个mock 替身供前端对接,另有一套专门的集成测试台,通过网关端到端地驱动真实服务。
组成部分
以下每一个都是独立仓库,各自会有自己的子节点。
- web ——Next.js 前端;老师和学校真正用的那个应用。
- auth ——认证服务:会话、服务凭据、TOTP、WebAuthn、OAuth。
- profile ——教师档案;平台上数据最丰富的一面。
- talent ——人才搜索;学校端、由 Meilisearch 支撑的教师发现。
- job ——职位发布与申请;同样由 Meilisearch 支撑。
- job_scrapers ——从多个外部招聘站抓取职位,用 AI 解析,存入 PostgreSQL,喂给 job 服务。
- content ——CMS 风格的服务:文章、分类、媒体。
- admin ——运营平台用的内部后台服务。
- landing ——独立的营销落地页站点。
- discord ——Discord 集成微服务(社区 + 通知)。
- store ——基于 WordPress 的商店(Astra 子主题 + 插件)。
- mcp ——一个 MCP 服务器,向 AI 客户端(Claude Code / Desktop)暴露管理工具,用 web 界面里签发的管理密钥认证。
- integral ——集成 E2E 测试台:真实服务、真实数据库,用 Playwright 通过网关端到端驱动。
- analyze ——面向中国 ESL 市场的策略与商业计划文档(不是运行时代码)。