[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"cv-education-ru":3,"cv-skills-ru":11,"cv-experience-ru":277,"cv-about-ru":334,"cv-settings":336},[4],{"id":5,"institution":6,"specialization":7,"date_from":8,"date_to":9,"order":10},1,"Национальный исследовательский Томский политехнический университет","Информационные системы и технологии — неоконченное высшее","2021-09-01","2023-05-20",0,[12,46,118,167,193,221,252],{"id":5,"slug":13,"name":14,"skills":15},"languages","Языки",[16,19,22,26,30,34,38,42],{"id":17,"name":18,"order":10},157,"TypeScript",{"id":20,"name":21,"order":5},158,"JavaScript (ES6+)",{"id":23,"name":24,"order":25},159,"Rust",2,{"id":27,"name":28,"order":29},160,"SQL",3,{"id":31,"name":32,"order":33},161,"HTML5",4,{"id":35,"name":36,"order":37},162,"CSS3",5,{"id":39,"name":40,"order":41},163,"SCSS \u002F SASS",6,{"id":43,"name":44,"order":45},164,"Английский — B1",7,{"id":25,"slug":47,"name":48,"skills":49},"frameworks","Vue и Nuxt",[50,53,56,59,62,65,68,71,74,78,82,86,90,94,98,102,106,110,114],{"id":51,"name":52,"order":10},138,"Vue.js",{"id":54,"name":55,"order":5},139,"Vue 3",{"id":57,"name":58,"order":25},140,"Vue 2",{"id":60,"name":61,"order":29},141,"Nuxt.js",{"id":63,"name":64,"order":33},142,"Nuxt 4",{"id":66,"name":67,"order":37},143,"Nuxt 3",{"id":69,"name":70,"order":41},144,"Nuxt 2",{"id":72,"name":73,"order":45},145,"Composition API",{"id":75,"name":76,"order":77},146,"Options API",8,{"id":79,"name":80,"order":81},147,"Pinia",9,{"id":83,"name":84,"order":85},148,"Vuex",10,{"id":87,"name":88,"order":89},149,"Vue Router",11,{"id":91,"name":92,"order":93},150,"TanStack Query",12,{"id":95,"name":96,"order":97},151,"nuxt-i18n",13,{"id":99,"name":100,"order":101},152,"Nitro",14,{"id":103,"name":104,"order":105},153,"SSR",15,{"id":107,"name":108,"order":109},154,"SSG",16,{"id":111,"name":112,"order":113},155,"ISR",17,{"id":115,"name":116,"order":117},156,"SPA",18,{"id":33,"slug":119,"name":120,"skills":121},"instruments","Инструменты и процессы",[122,125,128,131,134,137,140,143,146,149,152,155,158,161,164],{"id":123,"name":124,"order":10},190,"Git",{"id":126,"name":127,"order":5},191,"GitLab",{"id":129,"name":130,"order":25},192,"Docker",{"id":132,"name":133,"order":29},193,"CI\u002FCD",{"id":135,"name":136,"order":33},194,"GitHub Actions",{"id":138,"name":139,"order":37},195,"GitLab CI",{"id":141,"name":142,"order":41},196,"Vercel",{"id":144,"name":145,"order":45},197,"Vite",{"id":147,"name":148,"order":77},198,"Webpack",{"id":150,"name":151,"order":81},199,"Tailwind CSS",{"id":153,"name":154,"order":85},200,"Figma",{"id":156,"name":157,"order":89},201,"Jira",{"id":159,"name":160,"order":93},202,"Agile \u002F Scrum",{"id":162,"name":163,"order":97},203,"Дизайн-системы",{"id":165,"name":166,"order":101},204,"Feature-Sliced Design",{"id":41,"slug":168,"name":24,"skills":169},"rust",[170,172,175,178,181,184,187,190],{"id":171,"name":24,"order":10},165,{"id":173,"name":174,"order":5},166,"Tauri 2",{"id":176,"name":177,"order":25},167,"tokio",{"id":179,"name":180,"order":29},168,"serde",{"id":182,"name":183,"order":33},169,"SQLite (rusqlite)",{"id":185,"name":186,"order":37},170,"reqwest",{"id":188,"name":189,"order":41},171,"cargo test",{"id":191,"name":192,"order":45},172,"crates.io",{"id":45,"slug":194,"name":195,"skills":196},"backend","Бэкенд и данные",[197,200,203,206,209,212,215,218],{"id":198,"name":199,"order":10},173,"Node.js",{"id":201,"name":202,"order":5},174,"REST API",{"id":204,"name":205,"order":25},175,"GraphQL",{"id":207,"name":208,"order":29},176,"WebSocket",{"id":210,"name":211,"order":33},177,"PostgreSQL",{"id":213,"name":214,"order":37},178,"Drizzle ORM",{"id":216,"name":217,"order":41},179,"Prisma",{"id":219,"name":220,"order":45},180,"JWT \u002F OAuth",{"id":77,"slug":222,"name":223,"skills":224},"testing","Тестирование и производительность",[225,228,231,234,237,240,243,246,249],{"id":226,"name":227,"order":10},181,"Vitest",{"id":229,"name":230,"order":5},182,"Jest",{"id":232,"name":233,"order":25},183,"Playwright",{"id":235,"name":236,"order":29},184,"Cypress",{"id":238,"name":239,"order":33},185,"TDD",{"id":241,"name":242,"order":37},186,"Code review",{"id":244,"name":245,"order":41},187,"Core Web Vitals (LCP, INP, CLS)",{"id":247,"name":248,"order":45},188,"Lighthouse",{"id":250,"name":251,"order":77},189,"Sentry",{"id":81,"slug":253,"name":254,"skills":255},"adjacent","Смежный стек",[256,259,262,265,268,271,274],{"id":257,"name":258,"order":10},205,"React",{"id":260,"name":261,"order":5},206,"Next.js",{"id":263,"name":264,"order":25},207,"Redux \u002F Zustand",{"id":266,"name":267,"order":29},208,"React Native",{"id":269,"name":270,"order":33},209,"Expo",{"id":272,"name":273,"order":37},210,"Nest.js",{"id":275,"name":276,"order":41},211,"Express",[278,299,314],{"id":25,"company":279,"position":280,"date_from":281,"date_to":282,"order":10,"bullets":283},"СберСпасибо","Senior Frontend-разработчик (Vue 3 \u002F Nuxt 3, TypeScript)","2023-04-01",null,[284,287,290,293,296],{"id":285,"text":286,"order":10},54,"Время обработки заявок −50%, ошибки операторов −30%: CRM-интерфейс с шаблонными сценариями для операторов — Nuxt 3 (SSR), TypeScript, TanStack Query, WebSocket.",{"id":288,"text":289,"order":5},55,"Заполнение форм −35%, ошибки валидации −40%: система динамических форм на Nuxt 3 с продвинутой валидацией и управлением состоянием (Composition API, Pinia).",{"id":291,"text":292,"order":25},56,"Формирование отчётов ×3: дашборд аналитики на Vue 3 — визуализация больших данных, виртуализация списков, оптимизация рендера.",{"id":294,"text":295,"order":29},57,"Повторные визиты +28%, конверсия в выполненные задачи +45%: модуль персонализированных миссий с прогресс-трекером.",{"id":297,"text":298,"order":33},58,"Развивал дизайн-систему и библиотеку общих компонентов, оптимизировал Core Web Vitals (LCP, INP, CLS) и мониторинг через Sentry, внедрил TDD-процесс (Vitest, Playwright), проводил код-ревью и менторил джунов.",{"id":5,"company":300,"position":301,"date_from":302,"date_to":303,"order":5,"bullets":304},"Почта Банк","Frontend-разработчик (Vue 2 \u002F Nuxt 2, JavaScript)","2022-02-01","2023-03-01",[305,308,311],{"id":306,"text":307,"order":10},59,"Скорость загрузки страниц +40%: lazy-loading, кэширование, code splitting, работа с размером бандла; нагрузка на сервер снижена.",{"id":309,"text":310,"order":5},60,"Ошибки при заполнении −25%: адаптивные кроссбраузерные формы с валидацией на Nuxt 2 и Vuex.",{"id":312,"text":313,"order":25},61,"Real-time интерфейсы на WebSocket, мониторинг через Sentry, миграция легаси-компонентов с Options API на Composition API, юнит-тесты (Jest).",{"id":29,"company":315,"position":316,"date_from":317,"date_to":282,"order":25,"bullets":318},"Open Source и собственные продукты","Full-stack разработчик (Nuxt 4 \u002F Vue 3 \u002F Rust)","2024-05-01",[319,322,325,328,331],{"id":320,"text":321,"order":10},62,"Vestibule — десктопный трекер фокуса на Rust: cargo-воркспейс из 4 крейтов, фоновый воркер, привилегированный хелпер поверх Unix-сокета, SQLite. 196 тестов.",{"id":323,"text":324,"order":5},63,"freel — трекер времени и счетов, один код на десктоп и Android: Tauri 2, React 19, SQLite, транзакционная синхронизация. Android-таймер вынесен в крейт tauri-plugin-timer (Rust + Kotlin), опубликован на crates.io.",{"id":326,"text":327,"order":25},64,"GitSpace — macOS-приложение для git-проектов: Tauri 2 + Nuxt 4 + TypeScript, пакетный параллельный git status, токены в системном Keychain. 54 теста Vitest и 30 cargo.",{"id":329,"text":330,"order":29},65,"Nuxt 4: attractions42 — полный пререндер и ноль сетевых вызовов в рантайме, данные готовит собственный Rust-пайплайн (tokio, reqwest); whostolemysleep.ru — портфолио со встроенной CMS, Drizzle ORM, PostgreSQL, ISR, EN\u002FRU.",{"id":332,"text":333,"order":33},66,"@wsms\u002Flogger и @wsms\u002Flogger-connect-nuxt — npm-пакеты: структурированный логгер для Node.js без зависимостей и Nuxt-модуль к нему с авто-импортом useLogger().",{"id":5,"text":335},"Frontend-разработчик, 4+ года в enterprise-финтехе (СберСпасибо, Почта Банк). Основной стек — Vue.js 3 и Nuxt.js (2, 3, 4) с TypeScript: SSR, SSG, ISR, Pinia, дизайн-системы, Core Web Vitals. Второй язык — Rust: приложения на Tauri 2 и ETL-пайплайны, собственный крейт опубликован на crates.io. \u003Cbr \u002F>\u003Cbr \u002F> Результаты: обработка заявок в CRM −50%, формирование отчётов ×3, заполнение форм −35%, ошибки валидации −40%, скорость загрузки страниц +40%. \u003Cbr \u002F>\u003Cbr \u002F> Веду задачу целиком: ТЗ → ревью → TDD → прод → мониторинг. Автономен в распределённых командах, провожу код-ревью и менторю джунов. \u003Cbr \u002F>\u003Cbr \u002F> Открытый код — github.com\u002FWhoStoleMySleep: Vestibule (Rust, 4 крейта, 196 тестов), GitSpace и freel (Tauri 2, десктоп и Android), attractions42 (Nuxt 4), пакеты @wsms\u002Flogger в npm и крейт tauri-plugin-timer на crates.io. \u003Cbr \u002F>\u003Cbr \u002F> Удалённо или гибрид, готов к релокации, включая зарубежные офферы. Английский — B1.",{"open_to_work":337,"show_search":337,"github_url":338,"telegram_url":339,"email":340,"years_experience":33},true,"https:\u002F\u002Fgithub.com\u002FWhoStoleMySleepDev","https:\u002F\u002Ft.me\u002FWhoStoleMySleep","whostolemysleep@gmail.com"]