This commit is contained in:
Oleg Proskurin 2026-06-06 20:49:14 +07:00
parent e78ce3172c
commit 49770b351f
7 changed files with 431 additions and 169 deletions

View File

@ -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 `<PRIORITY>` with `p2`, or pass both p2 and p3 in one call):
```
Agent({
description: "Triage Telegram inbox <PRIORITY>",
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 "<PRIORITY>":
jq '.channels | to_entries | map(select(.value.priority == "<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": "<channel_key>",
"id": <message_id>,
"link": "<t.me url>",
"title": "<role title>",
"company": "<company or null>",
"stack": ["<key tech tokens>"],
"comp": "<salary string or null>",
"remote": true | false | "unclear",
"fit": "apply" | "maybe",
"why": "<one short sentence>"
}
]
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.

View File

@ -0,0 +1,145 @@
# Критерии отсева и триаж вакансий — 2026
> **Статус документа: authoritative playbook для триажа.**
> Единый источник для решения apply / skip и выбора версии CV.
> Сводит воедино критерии из `strategy-positioning-tracks-2026.md` (разделы 34), `<objective>` + `<reality_calibration>` из основной инструкции, 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:0022:00 GMT+7** (полный EMEA overlap, утренний US East). Это предел, до которого можно растягиваться без доплаты за неудобство; комфортный день — 11:0020:00.
| Что требует роль | Условие прохождения |
|---|---|
| Overlap укладывается в 9:0022:00 GMT+7 | проходит при любом comp ≥ floor |
| Overlap выходит за окно (частичное пересечение) | проходит, если **comp > $9k** |
| Полный overlap, ночная работа (PST core hours, full US-day) | проходит, если **comp > $10k** |
**Skip по таймзоне только если:** comp ≤ $9k **И** требуемый overlap выходит за пределы 9:0022:00 GMT+7.
### Gate 3 — Compensation
| Ярус | Зона | Как рассматриваем |
|---|---|---|
| Целевая | $812k/мес | основная воронка |
| Floor | $68k/мес | нормальный рабочий нижний порог |
| Fallback | $4.56k/мес | **только временный мостик**, «если вообще ничего нет». Не основная воронка, штучно и осознанно |
| Skip | < $4.5k/мес | отсев |
Сигналы «ниже floor» без явной вилки: pre-seed без funding visibility + equity-heavy framing + явное «scrappy team». Stretch выше $15k существует для founding-engineer ролей в AI-стартапах Series AB, но только при реальном матче профиля.
### 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 на 23 позицию |
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`).
- Сначала проверяем реальность → потом решаем, как подавать.
Реальные гэпы, которые можно называть без проверки (из `<profile_scope_and_matching>`): языки вне стека (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. Менее ограничительная формулировка побеждает **только** если прямо и явно указано, что ограничение снято / расширено.
Это согласуется с известным паттерном (`<memory>`, 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 + 23 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 — рынок и позиционирование меняются быстро.

View File

@ -6,7 +6,8 @@
"type": "module", "type": "module",
"scripts": { "scripts": {
"pdf": "node scripts/generate-pdf.mjs", "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": { "dependencies": {
"puppeteer": "^24.37.3" "puppeteer": "^24.37.3"

View File

@ -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 "$@"

View File

@ -0,0 +1,169 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Oleg Proskurin — CV — Tangory</title>
<link rel="stylesheet" href="/templates/cv-style.css" />
</head>
<body>
<header class="cv-header">
<h1 class="name">OLEG PROSKURIN</h1>
<p class="role"><strong>Senior Node.js Backend Engineer &amp; Tech Lead</strong></p>
<p class="contacts">Remote · GMT+7 (EMEA full overlap, US East AM) · Deel contractor, W-8BEN</p>
<p class="contacts">
<a href="mailto:usulpro@gmail.com">usulpro@gmail.com</a> ·
Telegram <a href="https://t.me/usulpro">@usulpro</a> ·
<a href="https://www.linkedin.com/in/oleg-proskurin-76784453/">LinkedIn</a> ·
<a href="https://github.com/UsulPro">GitHub</a> ·
<a href="https://dev.to/usulpro">Dev.to</a> ·
<a href="https://focusreactive.com/blog/author/usulpro/">Blog</a>
</p>
</header>
<section class="cv-section">
<h2>Summary</h2>
<p>
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
(<a href="https://primeui.com/">primeui.com</a>, 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.
</p>
</section>
<section class="cv-section cv-skills">
<h2>Skills</h2>
<p><strong>Backend &amp; APIs</strong>: 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)</p>
<p><strong>AI Engineering</strong>: 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</p>
<p><strong>Commerce &amp; CMS</strong>: Shopify, Shopify Hydrogen, Crystallize, Stripe. Sanity, Storyblok, Contentful, Payload. Content modeling, multi-environment publishing, large-scale migrations</p>
<p><strong>Infrastructure &amp; Delivery</strong>: Docker, docker-compose. Vercel, Cloudflare, Serverless &amp; Edge functions. CI/CD pipelines, NPM package publishing. Web performance: Core Web Vitals, Lighthouse, WCAG</p>
<p><strong>Full-Stack adjacent</strong>: React, Next.js (App Router, SSR/SSG/ISR), TanStack Start/Router, Vite, Tailwind, shadcn-style design systems</p>
</section>
<section class="cv-section">
<h2>Experience</h2>
<article class="cv-job">
<div class="cv-job-header">
<span class="company">PixelPoint Ltd.</span>
<span class="role">Tech Lead &amp; Senior Full-Stack Engineer, PrimeUI</span>
</div>
<div class="cv-job-meta">
<span>France · Remote</span>
<span class="dates">Feb 2025 Present</span>
</div>
<p class="cv-job-desc" style="font-style: normal;">
PrimeUI (<a href="https://primeui.com/">primeui.com</a>, 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.
</p>
<ul>
<li><strong>Architected the AI generation layer on the Node.js backend</strong>: 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 <code>text-embedding-3-small</code>) with three-tier fallback from exact key to family bucket to semantic search; prompt caching reaching 73% Gemini context-cache hit rate.</li>
<li><strong>Public API, code-export pipeline, and CLI</strong>: 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.</li>
<li><strong>Built and published <code>@primeuicom/mcp</code> on NPM</strong>: 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).</li>
<li><strong>Owned the Node.js server runtime end-to-end</strong>, 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.</li>
<li><strong>Drove team AI-tooling adoption</strong>: Claude Code from project start, team transition to Codex ahead of public release. Open-sourced <a href="https://github.com/usulpro/codex-bee">codex-bee</a> and <a href="https://github.com/usulpro/epic-loop">epic-loop</a> as spinoffs.</li>
</ul>
</article>
<article class="cv-job">
<div class="cv-job-header">
<span class="company"><a href="https://focusreactive.com">FocusReactive</a></span>
<span class="role">Tech Lead &amp; Senior Software Engineer</span>
</div>
<div class="cv-job-meta">
<span>London · Remote</span>
<span class="dates">May 2019 Feb 2025 (5 yrs 10 mos)</span>
</div>
<p class="cv-job-desc" style="font-style: normal;">International web consultancy for clients in the US, UK, Europe, and Australia.</p>
<ul>
<li><strong>Architected the Tipico US backend on Sanity Headless CMS at consumer scale</strong>: 75M requests/month, 122 CMS users, 98 document types, 165K stored documents. 5 publishing environments, 3 datasets, white-label architecture for core + state teams.</li>
<li><strong>Built a Claude-based content automation pipeline</strong>: JSON translation flow for 190 country-specific Storyblok pages, integrated into publishing and saving ~1 month of manual work.</li>
<li><strong>Led migration of 15 client projects to Headless CMS and commerce platforms</strong> (Sanity, Storyblok, Contentful, Payload, Crystallize, Shopify, Hydrogen), restructuring content models and cutting update cycles from weeks to days.</li>
<li><strong>Designed and built CMS-KIT</strong>, 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%.</li>
<li><strong>Led technical hiring and team development</strong>: 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.</li>
</ul>
</article>
<article class="cv-job">
<div class="cv-job-header">
<span class="company"><a href="https://github.com/GitNation/live-conferences">GitNation</a></span>
<span class="role">Senior Software Engineer (Part-time, concurrent)</span>
</div>
<div class="cv-job-meta">
<span>Remote</span>
<span class="dates">May 2019 Feb 2025</span>
</div>
<p class="cv-job-desc" style="font-style: normal;">Built publishing flow via Slack API and a reusable web framework for conference websites; migrated GitNation conferences to Headless CMS.</p>
</article>
<article class="cv-job">
<div class="cv-job-header">
<span class="company"><a href="https://osome.com/sg/">Osome</a></span>
<span class="role">Frontend Developer</span>
</div>
<div class="cv-job-meta">
<span>Singapore</span>
<span class="dates">Jun 2018 May 2019</span>
</div>
<p class="cv-job-desc" style="font-style: normal;">Built fuzzy-logic search system and advanced UI animations for the corporate-services platform.</p>
</article>
<article class="cv-job">
<div class="cv-job-header">
<span class="company"><a href="https://www.skipp.dev">Skipp</a></span>
<span class="role">JavaScript Engineer</span>
</div>
<div class="cv-job-meta">
<span>Moscow</span>
<span class="dates">Nov 2017 Jun 2018</span>
</div>
<p class="cv-job-desc" style="font-style: normal;">B2B marketplace for Skolkovo Innovation Center (100 companies); GraphQL subscriptions for real-time chat.</p>
</article>
</section>
<section class="cv-section">
<h2>Portfolio</h2>
<p class="cv-portfolio">
<a href="https://primeui.com/">PrimeUI</a>,
<a href="https://focusreactive.com/marketfinance-case-study/">MarketFinance</a>,
<a href="https://focusreactive.com/sanity-platform-case-study/">Tipico-Platform</a>,
<a href="https://www.iwm.org.uk/membership#membershipModal">IWM membership</a>,
<a href="https://focusreactive.com/notsoape-case-study/">NotSoApp</a>,
<a href="https://focusreactive.com/casino-reviews-case-study/">CasinoReviews</a>,
<a href="https://www.vegasslotsonline.com/">VegasSlotsOnLine</a>,
<a href="https://www.caleffionline.it/">Caleffy</a>,
<a href="https://focusreactive.com/hardhat-case-study/">Hadhat</a>,
<a href="https://focusreactive.com/porchlight-case-study/">Porchlight</a>,
<a href="https://github.com/GitNation/live-conferences">Gitnation</a>,
<a href="https://focusreactive.com/blog/">FocusReactive blog</a>,
<a href="https://rnd.sk.ru/lk/main">Skolkovo R&amp;D Market</a>,
<a href="https://join.reverse.health/tour/nutrition-monthly-generic-others">Reverse Health</a>,
<a href="https://www.firsty.app/">Firsty</a>
</p>
</section>
<section class="cv-section">
<h2>Open Source &amp; Writing</h2>
<ul>
<li><strong>Storybook</strong>: contributor and steering team member during the 20162017 community revival; addon maintainer (storybook-addon-console, <strong>7M NPM downloads</strong>; storybook-addon-material-ui, <strong>18K weekly</strong>).</li>
<li><strong>AI developer tooling</strong>: <a href="https://github.com/usulpro/codex-bee">codex-bee</a>, a wrapper for long-running Codex sessions; <a href="https://github.com/usulpro/epic-loop">epic-loop</a>, a Codex skill solving context degradation in long autonomous coding sessions via techlead/engineer role separation and durable epic state.</li>
<li><strong>Technical writing</strong>: articles on frontend, Headless CMS, and developer tooling at <a href="https://focusreactive.com/blog/author/usulpro/">FocusReactive blog</a> and <a href="https://dev.to/usulpro">Dev.to</a>.</li>
</ul>
</section>
<section class="cv-section">
<h2>Education</h2>
<p><strong>Master in Engineering</strong>, Faculty of Electronic Engineering, Moscow Power Engineering University (<a href="https://mpei.ru/lang/en/Pages/default.aspx">MPEI</a>), Russia</p>
</section>
<section class="cv-section">
<h2>Languages</h2>
<p>English C1 · Russian native</p>
</section>
</body>
</html>

View File

@ -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 20162017 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

Binary file not shown.