web
Job Vacancy
A job board for every profession in Uzbekistan, from cashier to developer, in four languages with real-time chat.
- Role
- Author and sole engineer
- Period
- Sept 2026
- Stack
- GochisqlcRiverPostgreSQL 18RedisMinIOWebSocketReact 19React Router SSRViteTailwind 4OpenAPITelegram Gateway
Problem
Existing boards search badly across mixed scripts (Latin/Cyrillic/Russian) and lack a hiring workflow.
Solution
A cross-script search index, a four-language SSR web app, real-time chat and a kanban on a Go monolith.
Result
Backend and web done (~35k lines), 47 ms search on 100k vacancies; admin, Flutter and deploy are next.
Job Vacancy is my own product: a fast platform for job seekers and employers. The hard part is search: Latin, Cyrillic and Russian spellings must be treated as one ("дастурчи" = "dasturchi"), with light stemming, prefix matching, weighted ranking and a trigram fallback for typos ("fluter" finds Flutter). On 100k vacancies the broadest query takes ~47 ms, cached ones 2–3 ms.
Features: a vacancy lifecycle (draft → moderation → 30 days live → archive), up to five resumes with PDF export in four languages, an employer kanban, real-time chat per application (text, image, file, voice, location), Telegram bot and email notifications, saved-search alerts. Auth: email/Google, phone via Telegram Gateway, 15-minute JWTs and refresh tokens that kill the session on reuse.
Architecture: a Go modular monolith (chi, pgx + sqlc, goose, the River job queue, a multi-instance WebSocket hub over Redis pub/sub), with TypeScript types generated from the OpenAPI contract. The web app is React Router v8 SSR with per-language URLs, JobPosting JSON-LD, an hreflang sitemap, a 145 KB gzipped home page and LCP under 0.9 s on slow 4G. The design is inspired by Samarkand tilework: a girih star pattern, lapis and turquoise colours.