diff --git a/.claude/skills/triage-jobs/SKILL.md b/.claude/skills/triage-jobs/SKILL.md deleted file mode 100644 index 12a4627..0000000 --- a/.claude/skills/triage-jobs/SKILL.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -name: triage-jobs -description: Triage the latest Telegram vacancy inbox (`tracking/telegram_inbox.json`) — stratifies by priority (p1 in this session, p2/p3 via a Haiku subagent) and returns a deduped shortlist of vacancies worth applying to. Use when the user says "разбери inbox", "что нового по работе", "разбери вакансии", "пройдись по telegram-вакансиям", "triage the inbox", "find relevant jobs from telegram", or similar. ---- - -# triage-jobs - -Read the latest Telegram vacancy fetch and present a shortlist that fits Oleg's targeting. - -The inbox file is large (~200K tokens). To keep the main session lean, p2/p3 channels go to a **Haiku subagent** that returns only finalists. p1 (small, high-signal) is processed here. - -## Args - -Optional priority filter as positional arg(s): `p1`, `p2`, `p3`, or `all` (default). - -- `/triage-jobs` → all three tiers -- `/triage-jobs p1` → only p1 in this session, skip subagent -- `/triage-jobs p2 p3` → only subagent run - -## Step 1 — Pre-checks - -Verify the inbox exists and is recent: - -```bash -ls -lh tracking/telegram_inbox.json -jq '{generated_at, total_in_inbox, channels_count: (.channels | length)}' tracking/telegram_inbox.json -``` - -If the file is missing or its `generated_at` is older than ~6 hours, **don't run triage on stale data** — offer to refetch first: - -```bash -~/.local/bin/uv run scripts/list_telegram_channels.py \ - | ~/.local/bin/uv run scripts/fetch_telegram_jobs.py - -``` - -## Step 2 — Oleg's targeting (apply strictly during triage) - -This is the rubric — use it verbatim when deciding "keep or drop" and when briefing the subagent. - -**Roles he targets:** -- Senior / Staff / Principal Full-Stack Engineer -- Tech Lead, Engineering Lead, Engineering Manager (with hands-on) -- AI Engineer / Applied AI / LLM Engineer (TS or Python OK for AI roles) - -**Stack match (strong signal):** TypeScript, JavaScript, Node.js, React, Next.js, TanStack, Tailwind, PostgreSQL, Drizzle, Vercel, Cloudflare, Sanity/Storyblok/Contentful/Payload (Headless CMS), Shopify/Hydrogen, GraphQL, WebSockets. For AI roles also: LLM orchestration, MCP, RAG, embeddings, Mastra, Vercel AI SDK, Claude/GPT/Gemini APIs. - -**Culture must-haves:** -- **Global remote** (he's in GMT+7, full EMEA overlap + US East AM). EMEA / global / US-East-friendly TZ all fine. "Remote within Russia only" or "US only — must be in EST 9-5" → reject. -- **Compensation in USD/EUR** preferred. Target ~$100k+ FT or $70+/hr contractor. Russian-RUB roles at ₽70-100k/mo (≈ $750-1100) are below floor. -- Deel/W-8BEN contractor format is a plus. - -**Deal-breakers (auto-reject):** -- Mobile-native (Kotlin, Swift, Android, iOS, Flutter) -- Non-stack backend (Go/Golang, Java, .NET, C#, Ruby, PHP, Rust, Scala) **as primary** — if the role is fullstack with React/Node + Go on side, that's fine -- DevOps / SRE as primary role -- QA / Manual testing -- Sales, Marketing, Designer, Recruiter, PM (non-engineering) -- Junior / Trainee / Intern -- On-site outside major remote-friendly hubs (e.g. Lagos, low-cost-region on-site) -- Sub-$50k FT compensation when the salary is stated - -**Stretch interests (consider even if not perfect match):** -- AI/ML engineering roles using Python (his AI CV covers this) -- Vetted-contractor platforms (Toptal, Lemon.io, Turing) — separate financial track -- Headless CMS, Shopify Hydrogen, eCommerce platforms -- Roles at companies building dev tooling, AI agents, MCP ecosystem (his open-source overlaps) - -For canonical source-of-truth, the CVs are at: -- `base/oleg_proskurin_ai_engineer_fullstack_cv.md` -- `base/oleg_proskurin_fullstack_techlead_cv.md` - -## Step 3 — p1 (process here) - -Pull p1 channels from inbox and walk through every kept message: - -```bash -jq '.channels | to_entries | map(select(.value.priority == "p1")) | from_entries' tracking/telegram_inbox.json -``` - -For each kept message, classify: -- **Apply** — fits role + culture + comp. Note: company, role, link, why-fit (1 line). -- **Maybe** — fits role/stack but unclear comp or stretch culture. Note same fields + the uncertainty. -- **Drop** — fails targeting. Don't list, don't explain. - -p1 should be small enough (~12K tokens currently) to do in main session without context strain. - -## Step 4 — p2 and p3 (delegate to Haiku subagent) - -Spawn a subagent via the Agent tool. Use `general-purpose` agent type with **Haiku model** for cost/speed. - -**Critical:** the subagent does not see this conversation. The prompt must be self-contained. - -Template (fill `` with `p2`, or pass both p2 and p3 in one call): - -``` -Agent({ - description: "Triage Telegram inbox ", - subagent_type: "general-purpose", - model: "haiku", - prompt: ` -Triage job postings from Oleg's Telegram inbox. - -Read tracking/telegram_inbox.json and filter to channels with priority "": - - jq '.channels | to_entries | map(select(.value.priority == "")) | from_entries' tracking/telegram_inbox.json - -Oleg's targeting (apply strictly): - -[paste the "Step 2 — Oleg's targeting" section verbatim] - -For each kept message that is a REAL vacancy (not a resume/CV digest entry, not a chat-room message, not a market-intel essay), decide if it fits the targeting. - -Return ONLY the shortlist as JSON. Reject everything else silently — no commentary on rejected items. - -Shortlist schema: -[ - { - "channel": "", - "id": , - "link": "", - "title": "", - "company": "", - "stack": [""], - "comp": "", - "remote": true | false | "unclear", - "fit": "apply" | "maybe", - "why": "" - } -] - -If there are zero matches, return []. -Do not paraphrase or summarize messages — quote the original title verbatim and just extract structured fields. -Do not include personal opinions or formatting commentary. -` -}) -``` - -Run subagents in parallel where possible (one for p2, one for p3 in the same message). - -## Step 5 — Aggregate and present - -Combine p1 finalists (from Step 3) with subagent shortlists (Step 4). Dedupe by `(company, title)` pair when possible. - -Present grouped output to Oleg, e.g.: - -``` -🎯 APPLY (N) -- jaabz_com #10233 — AI-Native Full Stack Developer @ Geeky Tech — TS/React/Python, Fully Remote, B2B SaaS -- dev_connectablejobs #2039 — Full-Stack Engineer @ VOYGR — AI-native, $4-7k, Remote, founders ex-Google -- ... - -🤔 MAYBE (N) -- jsspeak #58062 — AI Engineer (Python & Node.js) Senior @ Eshe App — 300-400k₽, RU+BY citizenship only — fit but comp lower -- ... -``` - -## Step 6 — Suggest next step - -After the shortlist, offer to: -- Append apply-list to `tracking/applications.md` (one row each, status `to-apply`). -- For 1-2 top picks, switch to the tailoring workflow (see main CLAUDE.md "Workflow 2 — Tailor CV"). - -## Notes - -- **Don't auto-add to `applications.md`** without explicit confirmation — Oleg curates that file. -- **Don't auto-refetch.** If the inbox is stale, ask first. -- **State cursor advances on every fetch.** A skill run only reads the existing inbox — it doesn't trigger a new fetch unless explicitly requested. -- **Skip P3 by default if user says "quick triage"** — p3 is mostly market-intel and dead channels, low ROI. diff --git a/base/reference/vacancy-filter-and-triage-2026.md b/base/reference/vacancy-filter-and-triage-2026.md new file mode 100644 index 0000000..77aed58 --- /dev/null +++ b/base/reference/vacancy-filter-and-triage-2026.md @@ -0,0 +1,145 @@ +# Критерии отсева и триаж вакансий — 2026 + +> **Статус документа: authoritative playbook для триажа.** +> Единый источник для решения apply / skip и выбора версии CV. +> Сводит воедино критерии из `strategy-positioning-tracks-2026.md` (разделы 3–4), `` + `` из основной инструкции, backend-трек из `cv-backend-variant-hostinger-2026-05.md`, таймзонные расчёты из `facts-from-salmon-chat.md`. +> Приоритет при конфликте: явное указание Олега → этот документ → остальные файлы. +> Последнее обновление: 2 июня 2026 (v1, ввод comp-scaled таймзоны, fallback comp-яруса, research-протокола по площадкам). + +--- + +## 1. Логика в двух словах + +Сначала четыре **hard-gate** (объективные блокеры — отсев без вариантов). Прошли все четыре — вакансия в работе, дальше не отсев, а **классификация трека** и выбор CV. Триаж занимает ~5 минут чтения JD. + +Базовая постура: **trying-friendly, не filtering-friendly.** На спорных побеждает «подаём». Жёсткий skip — редкость, нужен конкретный объективный блокер. + +--- + +## 2. Hard-gate — четыре блокера + +Вакансия проходит, если выполнены **все четыре** одновременно. + +### Gate 1 — География / найм +Можно нанять одним из: +- contractor через Deel / Remote.com из Таиланда, ИЛИ +- remote-employee для компании, нанимающей non-US резидентов. + +**Skip если:** location-locked / US-only / UK-only / EOR не покрывает Таиланд и нет contractor-опции. + +### Gate 2 — Таймзона (comp-scaled, не бинарный) +Базовое окно гибкости: **9:00–22:00 GMT+7** (полный EMEA overlap, утренний US East). Это предел, до которого можно растягиваться без доплаты за неудобство; комфортный день — 11:00–20:00. + +| Что требует роль | Условие прохождения | +|---|---| +| Overlap укладывается в 9:00–22:00 GMT+7 | проходит при любом comp ≥ floor | +| Overlap выходит за окно (частичное пересечение) | проходит, если **comp > $9k** | +| Полный overlap, ночная работа (PST core hours, full US-day) | проходит, если **comp > $10k** | + +**Skip по таймзоне только если:** comp ≤ $9k **И** требуемый overlap выходит за пределы 9:00–22:00 GMT+7. + +### Gate 3 — Compensation +| Ярус | Зона | Как рассматриваем | +|---|---|---| +| Целевая | $8–12k/мес | основная воронка | +| Floor | $6–8k/мес | нормальный рабочий нижний порог | +| Fallback | $4.5–6k/мес | **только временный мостик**, «если вообще ничего нет». Не основная воронка, штучно и осознанно | +| Skip | < $4.5k/мес | отсев | + +Сигналы «ниже floor» без явной вилки: pre-seed без funding visibility + equity-heavy framing + явное «scrappy team». Stretch выше $15k существует для founding-engineer ролей в AI-стартапах Series A–B, но только при реальном матче профиля. + +### Gate 4 — Уровень роли +Senior / Staff / Tech Lead / опытный middle+. + +**Skip если:** явный junior / mid без потолка роста. +**НЕ skip если:** роль выглядит выше (Lead / Principal / Head) — это сигнал, что внутри такого человека нет, стоит пробовать, особенно если подача быстрая. + +--- + +## 3. Классификация трека (после прохождения gate) + +Не отсев, а выбор CV и угла письма. + +| Условие в JD | Трек | CV | +|---|---|---| +| AI в **must-have** (LLM / agents / MCP / RAG / orchestration / embeddings в core requirements) | **Track A** | CV-A (`cv-2026-05-base.md`) | +| Чистый Node.js / backend, AI как nice-to-have / «significant plus» | **Backend-first** | CV-C (`cv-backend-variant-hostinger-2026-05.md`) | +| Senior / full-stack / frontend без AI в must-have | **Track B** | CV-B (`oleg_proskurin_fullstack_techlead_cv.md`) | +| Senior + AI-tooling fluency как требование (не AI-продукт, а «build with AI assistance») | **Hybrid** | CV-B с AI, поднятым в Skills на 2–3 позицию | + +Russian-speaking scale-ups (Manychat, inDrive, Wheely, Joom, Adapty и подобные) — **по умолчанию Track B**, даже если AI в JD не упомянут. + +Принцип на спорных: +- между «Track B» и «skip» → побеждает Track B; +- между «Track A» и «Track B» для гибридной JD → есть AI в must-have → A, нет → B. + +--- + +## 4. Обработка отсутствующих навыков + +Один отсутствующий навык (Go, конкретный фреймворк, named-инструмент) — **не skip**. + +Но: +- **Не флагать явно** в письме. Не строить конструкцию «вот тут у меня гэп / one thing to flag». +- **Сначала уточнить у Олега перед подачей:** «в JD просят X, не вижу его в материалах — был ли опыт?» Навык часто есть, просто выпал при тримминге CV (примеры: Redux Toolkit / RTK Query, Vitest, Playwright в `facts-from-salmon-chat.md`; Jest в backend-CV; eCommerce/CMS tail в `cv-master-extended.md`). +- Сначала проверяем реальность → потом решаем, как подавать. + +Реальные гэпы, которые можно называть без проверки (из ``): языки вне стека (Go, Rust, Java, C++, Ruby, PHP), heavy DevOps (K8s-оркестрация at scale, SRE), нативный мобайл (Swift, Kotlin). React Native и Python — bridgeable, не гэп. + +--- + +## 5. Research-протокол при анализе вакансии + +Дополнительно к чтению самой JD — рекомендуется (особенно для ролей, проходящих gate): + +### 5.1. Поресёрчить саму компанию +Что за компания, что делает, продукт, стадия, funding, недавние новости, размер команды, репутация (Glassdoor / Blind где есть). Цель — понять контекст и отсеять ghost / red-flag компании. + +### 5.2. Найти, где ещё выложена эта вакансия +Сравнить постинг на разных площадках (careers-page компании, LinkedIn, ATS-ссылка, job-боарды, агрегаторы). Обратить внимание и **консолидировать**: +- **Дата постинга** — самое раннее появление. Старый постинг (90+ дней без обновлений) — ghost-сигнал. +- **Вилка** — где какая указана. Разные площадки часто дают разные band'ы. +- **Гео-ограничения** — где-нибудь указано US Only / UK Only / location-locked / список eligible стран? + +### 5.3. Правило приоритета ограничений +**Ограничения трактуются как более актуальная / авторитетная информация.** Если в одном месте «remote», а в другом «US only» — значит берут US only, отсев по Gate 1. Менее ограничительная формулировка побеждает **только** если прямо и явно указано, что ограничение снято / расширено. + +Это согласуется с известным паттерном (``, strategy-docs): «100% remote» на LinkedIn engagement-листах надёжно завышает гео-гибкость — всегда проверять hiring-country eligibility до вложения в тейлоринг. Freshteam ATS: SSR отдаёт полный JD независимо от статуса; «not accepting applications» — JS-оверлей, подтверждать активность apply-кнопки в браузере. + +Вся найденная информация консолидируется в один разбор вакансии, не размазывается. + +--- + +## 6. Ложные блокеры — НЕ основание для skip + +Системные ошибки триажа, которых избегаем (из `strategy-positioning-tracks-2026.md` раздел 4): + +1. **Роль выглядит senior-heavy** (Lead / Principal / Head) → сигнал «внутри нет такого», пробовать. +2. **Один отсутствующий навык** → уточнить у Олега, не skip (см. раздел 4). +3. **«Не AI-first компания»** → причина для Track B / Hybrid, не отказ. +4. **Поверхностный domain mismatch** → смотрим на технические задачи (orchestration, structured extraction, LLM workflows), не на ярлык индустрии. +5. **«Не Russian-speaking scale-up»** → нейтрально, не минус. +6. **«Stage / timeline не вписывается в 8 недель»** → влияет на приоритизацию последовательности, не на отсев. Проверять скорость interview-процесса по сигналам. +7. **Comp ниже $8k но в floor / fallback** → рассматриваем, особенно если компания стратегическая или роль интересная. +8. **Tech-stack mismatch с быстрым ramp** → лиди к подаче, ramp упоминаем честно (но не выпячиваем гэп — см. раздел 4). + +--- + +## 7. Operational flow при получении JD + +1. Открыть и прочитать JD (при недоступности URL — halt, не реконструировать из памяти). +2. Извлечь за первую минуту: уровень роли, must-have stack, AI-наличие (must / nice / нет), location & timezone constraints, comp-сигналы. +3. Прогнать 4 hard-gate (раздел 2). Любой провален → skip с одним объективным критерием. +4. Anti-pattern self-check (раздел 6): отсеваю ли по subjective критерию? Да → повысить класс. +5. Research-протокол (раздел 5): компания + кросс-площадочная проверка ограничений и вилки. +6. Прошли gate → классифицировать трек (раздел 3) + назвать рекомендуемое CV + 2–3 proof-point для письма. +7. Missing skills → уточнить у Олега до подачи (раздел 4). +8. Выдать консолидированный разбор: роль/компания, фит, трек, strong matches, open questions, найденные ограничения/вилки по площадкам, рекомендация apply/skip. + +--- + +## 8. Когда обновлять документ + +- После первого callback / interview / rejection из каждого трека → калибровка proof-point и порогов. +- При изменении comp-floor, таймзонного окна или target-зоны Олегом → правка немедленно. +- Раз в 4 недели baseline pass — рынок и позиционирование меняются быстро. diff --git a/package.json b/package.json index fa342fe..ee8ccf7 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "type": "module", "scripts": { "pdf": "node scripts/generate-pdf.mjs", - "chrome": "bash scripts/launch-chrome.sh &" + "chrome": "bash scripts/launch-chrome.sh &", + "tg:session": "bash scripts/regen_telegram_session.sh" }, "dependencies": { "puppeteer": "^24.37.3" diff --git a/scripts/regen_telegram_session.sh b/scripts/regen_telegram_session.sh new file mode 100755 index 0000000..f93023f --- /dev/null +++ b/scripts/regen_telegram_session.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Regenerate Telegram session string via QR login. +# Reads TELEGRAM_API_ID / TELEGRAM_API_HASH from the project .env, +# then runs the generator from the telegram-mcp install. +set -euo pipefail + +PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +TELEGRAM_DIR="/projects/my-utils/telegram" + +if [ ! -f "$PROJECT_ROOT/.env" ]; then + echo "missing $PROJECT_ROOT/.env" >&2 + exit 1 +fi + +set -a +. "$PROJECT_ROOT/.env" +set +a + +if [ -z "${TELEGRAM_API_ID:-}" ] || [ -z "${TELEGRAM_API_HASH:-}" ]; then + echo "TELEGRAM_API_ID / TELEGRAM_API_HASH missing in $PROJECT_ROOT/.env" >&2 + exit 1 +fi + +cd "$TELEGRAM_DIR" +exec .venv/bin/python session_string_generator.py --qr "$@" diff --git a/tailored/tangory/oleg_proskurin-senior-engineer.html b/tailored/tangory/oleg_proskurin-senior-engineer.html new file mode 100644 index 0000000..32783de --- /dev/null +++ b/tailored/tangory/oleg_proskurin-senior-engineer.html @@ -0,0 +1,169 @@ + + + + + Oleg Proskurin — CV — Tangory + + + +
+

OLEG PROSKURIN

+

Senior Node.js Backend Engineer & Tech Lead

+

Remote · GMT+7 (EMEA full overlap, US East AM) · Deel contractor, W-8BEN

+

+ usulpro@gmail.com · + Telegram @usulpro · + LinkedIn · + GitHub · + Dev.to · + Blog +

+
+ +
+

Summary

+

+ Senior Node.js / TypeScript backend engineer and Tech Lead with 9 years of production + experience, currently leading the backend and AI generation layer of PrimeUI + (primeui.com, launched Feb 2026): an AI-native code + generation platform for professional websites that ships customer-owned Next.js projects. + Designed and operated consumer-scale backends on PostgreSQL and the Sanity-based Tipico US + platform (75M requests/month, 122 CMS users). Comfortable owning services end-to-end: + REST API design, database modeling and optimization, performance tuning, third-party + integrations, and AI/LLM orchestration as a first-class backend concern. +

+
+ +
+

Skills

+

Backend & APIs: TypeScript, Node.js, REST APIs, WebSockets, GraphQL. PostgreSQL, Drizzle ORM, SQL design and query optimization. Schema validation, retry/recovery, streaming responses. Public-API design for cross-host integrations (MCP server, CLI)

+

AI Engineering: LLM orchestration and guardrails on the backend: multi-model routing (Claude / GPT / Gemini), context engineering, prompt caching (73% Gemini context-cache hit rate), schema validation, retry recovery. Embeddings-based retrieval. MCP: custom server development; cross-host agent integration

+

Commerce & CMS: Shopify, Shopify Hydrogen, Crystallize, Stripe. Sanity, Storyblok, Contentful, Payload. Content modeling, multi-environment publishing, large-scale migrations

+

Infrastructure & Delivery: Docker, docker-compose. Vercel, Cloudflare, Serverless & Edge functions. CI/CD pipelines, NPM package publishing. Web performance: Core Web Vitals, Lighthouse, WCAG

+

Full-Stack adjacent: React, Next.js (App Router, SSR/SSG/ISR), TanStack Start/Router, Vite, Tailwind, shadcn-style design systems

+
+ +
+

Experience

+ +
+
+ PixelPoint Ltd. + Tech Lead & Senior Full-Stack Engineer, PrimeUI +
+
+ France · Remote + Feb 2025 – Present +
+

+ PrimeUI (primeui.com, launched Feb 2026) is an + AI-native platform for generating production-ready websites, spanning Studio web app, + public API, MCP server, CLI, and code-export pipeline. Sole full-time engineer on the + project, owning roughly 70% of platform architecture across all surfaces. +

+
    +
  • Architected the AI generation layer on the Node.js backend: multi-model orchestration via Mastra + Vercel AI SDK (10 agents, 17 workflows) with per-task routing across Claude, GPT, and Gemini; embeddings-based component retrieval over 1,555 chunks (OpenAI text-embedding-3-small) with three-tier fallback from exact key to family bucket to semantic search; prompt caching reaching 73% Gemini context-cache hit rate.
  • +
  • Public API, code-export pipeline, and CLI: generates a production-ready Next.js project repo in ~45 seconds, ~1.5 minutes end-to-end from UI Export to a running local project. The generated codebase is customer-owned, shipped as a standard Next.js project, pre-configured for 8 selectable AI coding agents.
  • +
  • Built and published @primeuicom/mcp on NPM: 25 tools that let any external codebase connect to PrimeUI from inside AI coding environments, with cross-host compatibility verified across 6 major coding agents (Claude Code, Cursor, Codex, others).
  • +
  • Owned the Node.js server runtime end-to-end, including WebSocket-based streaming of model responses adapted to UI rendering, schema validation, retry and recovery flows for LLM calls, and third-party API integrations.
  • +
  • Drove team AI-tooling adoption: Claude Code from project start, team transition to Codex ahead of public release. Open-sourced codex-bee and epic-loop as spinoffs.
  • +
+
+ +
+
+ FocusReactive + Tech Lead & Senior Software Engineer +
+
+ London · Remote + May 2019 – Feb 2025 (5 yrs 10 mos) +
+

International web consultancy for clients in the US, UK, Europe, and Australia.

+
    +
  • Architected the Tipico US backend on Sanity Headless CMS at consumer scale: 75M requests/month, 122 CMS users, 98 document types, 165K stored documents. 5 publishing environments, 3 datasets, white-label architecture for core + state teams.
  • +
  • Built a Claude-based content automation pipeline: JSON translation flow for 190 country-specific Storyblok pages, integrated into publishing and saving ~1 month of manual work.
  • +
  • Led migration of 15 client projects to Headless CMS and commerce platforms (Sanity, Storyblok, Contentful, Payload, Crystallize, Shopify, Hydrogen), restructuring content models and cutting update cycles from weeks to days.
  • +
  • Designed and built CMS-KIT, an open-source Headless CMS starter and component library used across 15 client projects, cutting kickoff from days to hours and accelerating development by ~30%.
  • +
  • Led technical hiring and team development: designed an assessment mirroring real working conditions, ran 30 interviews leading to 8 hires, mentored new engineers; drove team adoption of Claude.ai for research, content, and codebase analysis from 2024 onwards.
  • +
+
+ +
+
+ GitNation + Senior Software Engineer (Part-time, concurrent) +
+
+ Remote + May 2019 – Feb 2025 +
+

Built publishing flow via Slack API and a reusable web framework for conference websites; migrated GitNation conferences to Headless CMS.

+
+ +
+
+ Osome + Frontend Developer +
+
+ Singapore + Jun 2018 – May 2019 +
+

Built fuzzy-logic search system and advanced UI animations for the corporate-services platform.

+
+ +
+
+ Skipp + JavaScript Engineer +
+
+ Moscow + Nov 2017 – Jun 2018 +
+

B2B marketplace for Skolkovo Innovation Center (100 companies); GraphQL subscriptions for real-time chat.

+
+
+ +
+

Portfolio

+

+ PrimeUI, + MarketFinance, + Tipico-Platform, + IWM membership, + NotSoApp, + CasinoReviews, + VegasSlotsOnLine, + Caleffy, + Hadhat, + Porchlight, + Gitnation, + FocusReactive blog, + Skolkovo R&D Market, + Reverse Health, + Firsty +

+
+ +
+

Open Source & Writing

+
    +
  • Storybook: contributor and steering team member during the 2016–2017 community revival; addon maintainer (storybook-addon-console, 7M NPM downloads; storybook-addon-material-ui, 18K weekly).
  • +
  • AI developer tooling: codex-bee, a wrapper for long-running Codex sessions; epic-loop, a Codex skill solving context degradation in long autonomous coding sessions via techlead/engineer role separation and durable epic state.
  • +
  • Technical writing: articles on frontend, Headless CMS, and developer tooling at FocusReactive blog and Dev.to.
  • +
+
+ +
+

Education

+

Master in Engineering, Faculty of Electronic Engineering, Moscow Power Engineering University (MPEI), Russia

+
+ +
+

Languages

+

English C1 · Russian native

+
+ + diff --git a/tailored/tangory/oleg_proskurin-senior-engineer.md b/tailored/tangory/oleg_proskurin-senior-engineer.md new file mode 100644 index 0000000..823ccc3 --- /dev/null +++ b/tailored/tangory/oleg_proskurin-senior-engineer.md @@ -0,0 +1,90 @@ +# OLEG PROSKURIN +**Senior Node.js Backend Engineer & Tech Lead** + +Remote · GMT+7 (EMEA full overlap, US East AM) · Deel contractor, W-8BEN + +usulpro@gmail.com · Telegram @usulpro · [LinkedIn](https://www.linkedin.com/in/oleg-proskurin-76784453/) · [GitHub](https://github.com/UsulPro) · [Dev.to](https://dev.to/usulpro) · [Blog](https://focusreactive.com/blog/author/usulpro/) + +--- + +## Summary + +Senior Node.js / TypeScript backend engineer and Tech Lead with 9 years of production experience, currently leading the backend and AI generation layer of PrimeUI ([primeui.com](https://primeui.com/), launched Feb 2026): an AI-native code generation platform for professional websites that ships customer-owned Next.js projects. Designed and operated consumer-scale backends on PostgreSQL and the Sanity-based Tipico US platform (75M requests/month, 122 CMS users). Comfortable owning services end-to-end: REST API design, database modeling and optimization, performance tuning, third-party integrations, and AI/LLM orchestration as a first-class backend concern. + +--- + +## Skills + +**Backend & APIs**: TypeScript, Node.js, REST APIs, WebSockets, GraphQL. PostgreSQL, Drizzle ORM, SQL design and query optimization. Schema validation, retry/recovery, streaming responses. Public-API design for cross-host integrations (MCP server, CLI) + +**AI Engineering**: LLM orchestration and guardrails on the backend: multi-model routing (Claude / GPT / Gemini), context engineering, prompt caching (73% Gemini context-cache hit rate), schema validation, retry recovery. Embeddings-based retrieval. MCP: custom server development; cross-host agent integration + +**Commerce & CMS**: Shopify, Shopify Hydrogen, Crystallize, Stripe. Sanity, Storyblok, Contentful, Payload. Content modeling, multi-environment publishing, large-scale migrations + +**Infrastructure & Delivery**: Docker, docker-compose. Vercel, Cloudflare, Serverless & Edge functions. CI/CD pipelines, NPM package publishing. Web performance: Core Web Vitals, Lighthouse, WCAG + +**Full-Stack adjacent**: React, Next.js (App Router, SSR/SSG/ISR), TanStack Start/Router, Vite, Tailwind, shadcn-style design systems + +--- + +## Experience + +### PixelPoint Ltd. — Tech Lead & Senior Full-Stack Engineer, PrimeUI +**Feb 2025 – Present** · France · Remote + +PrimeUI ([primeui.com](https://primeui.com/), launched Feb 2026) is an AI-native platform for generating production-ready websites, spanning Studio web app, public API, MCP server, CLI, and code-export pipeline. Sole full-time engineer on the project, owning roughly 70% of platform architecture across all surfaces. + +- **Architected the AI generation layer on the Node.js backend**: multi-model orchestration via Mastra + Vercel AI SDK (10 agents, 17 workflows) with per-task routing across Claude, GPT, and Gemini; embeddings-based component retrieval over 1,555 chunks (OpenAI `text-embedding-3-small`) with three-tier fallback from exact key to family bucket to semantic search; prompt caching reaching 73% Gemini context-cache hit rate. +- **Public API, code-export pipeline, and CLI**: generates a production-ready Next.js project repo in ~45 seconds, ~1.5 minutes end-to-end from UI Export to a running local project. The generated codebase is customer-owned, shipped as a standard Next.js project, pre-configured for 8 selectable AI coding agents. +- **Built and published `@primeuicom/mcp` on NPM**: 25 tools that let any external codebase connect to PrimeUI from inside AI coding environments, with cross-host compatibility verified across 6 major coding agents (Claude Code, Cursor, Codex, others). +- **Owned the Node.js server runtime end-to-end**, including WebSocket-based streaming of model responses adapted to UI rendering, schema validation, retry and recovery flows for LLM calls, and third-party API integrations. +- **Drove team AI-tooling adoption**: Claude Code from project start, team transition to Codex ahead of public release. Open-sourced [codex-bee](https://github.com/usulpro/codex-bee) and [epic-loop](https://github.com/usulpro/epic-loop) as spinoffs. + +### [FocusReactive](https://focusreactive.com) — Tech Lead & Senior Software Engineer +**May 2019 – Feb 2025** (5 yrs 10 mos) · London · Remote + +International web consultancy for clients in the US, UK, Europe, and Australia. + +- **Architected the Tipico US backend on Sanity Headless CMS at consumer scale**: 75M requests/month, 122 CMS users, 98 document types, 165K stored documents. 5 publishing environments, 3 datasets, white-label architecture for core + state teams. +- **Built a Claude-based content automation pipeline**: JSON translation flow for 190 country-specific Storyblok pages, integrated into publishing and saving ~1 month of manual work. +- **Led migration of 15 client projects to Headless CMS and commerce platforms** (Sanity, Storyblok, Contentful, Payload, Crystallize, Shopify, Hydrogen), restructuring content models and cutting update cycles from weeks to days. +- **Designed and built CMS-KIT**, an open-source Headless CMS starter and component library used across 15 client projects, cutting kickoff from days to hours and accelerating development by ~30%. +- **Led technical hiring and team development**: designed an assessment mirroring real working conditions, ran 30 interviews leading to 8 hires, mentored new engineers; drove team adoption of Claude.ai for research, content, and codebase analysis from 2024 onwards. + +### [GitNation](https://github.com/GitNation/live-conferences) — Senior Software Engineer (Part-time, concurrent) +**May 2019 – Feb 2025** · Remote +Built publishing flow via Slack API and a reusable web framework for conference websites; migrated GitNation conferences to Headless CMS. + +### [Osome](https://osome.com/sg/) — Frontend Developer +**Jun 2018 – May 2019** · Singapore +Built fuzzy-logic search system and advanced UI animations for the corporate-services platform. + +### [Skipp](https://www.skipp.dev) — JavaScript Engineer +**Nov 2017 – Jun 2018** · Moscow +B2B marketplace for Skolkovo Innovation Center (100 companies); GraphQL subscriptions for real-time chat. + +--- + +## Portfolio + +[PrimeUI](https://primeui.com/), [MarketFinance](https://focusreactive.com/marketfinance-case-study/), [Tipico-Platform](https://focusreactive.com/sanity-platform-case-study/), [IWM membership](https://www.iwm.org.uk/membership#membershipModal), [NotSoApp](https://focusreactive.com/notsoape-case-study/), [CasinoReviews](https://focusreactive.com/casino-reviews-case-study/), [VegasSlotsOnLine](https://www.vegasslotsonline.com/), [Caleffy](https://www.caleffionline.it/), [Hadhat](https://focusreactive.com/hardhat-case-study/), [Porchlight](https://focusreactive.com/porchlight-case-study/), [Gitnation](https://github.com/GitNation/live-conferences), [FocusReactive blog](https://focusreactive.com/blog/), [Skolkovo R&D Market](https://rnd.sk.ru/lk/main), [Reverse Health](https://join.reverse.health/tour/nutrition-monthly-generic-others), [Firsty](https://www.firsty.app/) + +--- + +## Open Source & Writing + +- **Storybook**: contributor and steering team member during the 2016–2017 community revival; addon maintainer (storybook-addon-console, **7M NPM downloads**; storybook-addon-material-ui, **18K weekly**). +- **AI developer tooling**: [codex-bee](https://github.com/usulpro/codex-bee), a wrapper for long-running Codex sessions; [epic-loop](https://github.com/usulpro/epic-loop), a Codex skill solving context degradation in long autonomous coding sessions via techlead/engineer role separation and durable epic state. +- **Technical writing**: articles on frontend, Headless CMS, and developer tooling at [FocusReactive blog](https://focusreactive.com/blog/author/usulpro/) and [Dev.to](https://dev.to/usulpro). + +--- + +## Education + +**Master in Engineering**, Faculty of Electronic Engineering, Moscow Power Engineering University ([MPEI](https://mpei.ru/lang/en/Pages/default.aspx)), Russia + +--- + +## Languages + +English C1 · Russian native diff --git a/tailored/tangory/oleg_proskurin-senior-engineer.pdf b/tailored/tangory/oleg_proskurin-senior-engineer.pdf new file mode 100644 index 0000000..f99e61b Binary files /dev/null and b/tailored/tangory/oleg_proskurin-senior-engineer.pdf differ