2026-09-23·by Sijie Wang#node#project#youteacher#recruitment

youteacher

YouTeacher is a B2B recruitment platform for the ESL market — it connects native/qualified English teachers with the schools in China that want to hire them.

Two sides sit across a marketplace. On one side, teachers looking for a position abroad: they build a profile, browse openings, apply. On the other, schools and agencies looking for teachers: they search talent, post jobs, work applications. YouTeacher is the layer in the middle that makes the two sides findable to each other — job listings flow in (partly scraped and AI-parsed from existing boards), teacher profiles are made searchable, and each side gets tools shaped for what it needs.

It is built as a monorepo of independent microservices, one git repo per service, developed with a partner (Pete). It is not public yet — the pieces are at different stages of completeness, some shipping, some still being built out.

Architecture

The shape is deliberately service-per-concern rather than one monolith:

  • Frontend is Next.js 15 / React 19 / TypeScript, laid out in DDD layers (domain, application, infrastructure, features).
  • Backends share one pattern: Fastify for HTTP, Prisma over PostgreSQL for storage. Each backend service owns exactly one URL prefix (/auth, /jobs, /profile, /talents, /content, /admin) and never reaches outside it.
  • An nginx gateway fronts everything and routes by that prefix; service-to-service calls go through stable public URLs rather than ephemeral internal hostnames.
  • Meilisearch powers the two search-heavy surfaces (jobs and talent).
  • Auth is two-layered — a signed service-to-service credential and a separate user session — so an endpoint can require both "a trusted service is calling" and "a logged-in user is behind it." Strong second factors (TOTP, WebAuthn) and OAuth sit on top.
  • Deployment is Coolify-hosted, with environment branches (dev / test / stage / prod) that deploy on push; Docker throughout.

During development each real service also has a mock twin the frontend can run against, and a dedicated integration harness drives the real services end to end through the gateway.

Components

Each of these is its own repository and will get its own child node.

  • web — the Next.js frontend; the app both teachers and schools actually use.
  • auth — authentication service: sessions, service tokens, TOTP, WebAuthn, OAuth.
  • profile — teacher profiles; the richest data surface on the platform.
  • talent — talent search; the school-side, Meilisearch-backed discovery of teachers.
  • job — job postings and applications; also Meilisearch-backed.
  • job_scrapers — scrapes postings from multiple external boards, parses them with AI, stores them in PostgreSQL to feed the job service.
  • content — CMS-style service for posts, categories, and media.
  • admin — internal back-office service for operating the platform.
  • landing — the standalone marketing landing site.
  • discord — Discord integration microservice (community + notifications).
  • store — a WordPress-based storefront (Astra child theme + plugins).
  • mcp — an MCP server exposing admin tools to AI clients (Claude Code / Desktop), authenticated by an admin key minted in the web UI.
  • integral — the integration E2E test harness: real services, real databases, driven through the gateway with Playwright.
  • analyze — strategy and business-plan docs for the China ESL market (not runtime code).
about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →