[{"data":1,"prerenderedAt":426},["ShallowReactive",2],{"projects":3},{"projects":4,"person":369},[5,58,88,132,168,203,237,272,310,344],{"id":6,"isFavorite":7,"index":8,"name":9,"tone":10,"url":11,"host":12,"preview":13,"previewMobile":28,"previewFrame":40,"previewAlt":41,"subtitle":42,"headline":43,"description":44,"tags":45,"stack":49,"role":56,"result":57},"dobro",true,"01","Dobro.rf","secondary","https:\u002F\u002Fblago.dobro.ru\u002F","blago.dobro.ru",{"src":14,"width":15,"height":16,"variants":17},"\u002F_nuxt\u002Fpreview.DZaiDPpT.webp",974,609,[18,21,24,27],{"src":19,"width":20},"\u002F_nuxt\u002Fpreview.fnBXH0Fp.webp",480,{"src":22,"width":23},"\u002F_nuxt\u002Fpreview.DcugL7dT.webp",720,{"src":25,"width":26},"\u002F_nuxt\u002Fpreview.B9WkH9O7.webp",960,{"src":14,"width":15},{"src":29,"width":30,"height":31,"variants":32},"\u002F_nuxt\u002Fpreview-mobile.0TDrCJp_.webp",600,1298,[33,36,39],{"src":34,"width":35},"\u002F_nuxt\u002Fpreview-mobile.Bntv-01a.webp",160,{"src":37,"width":38},"\u002F_nuxt\u002Fpreview-mobile.D3P3CKjh.webp",300,{"src":29,"width":30},"devices","Home page of the Dobro.rf platform","DONATION PLATFORM · DIGITAL RUBLE","13 times more requests per second","A donation platform with verified charities, the digital ruble and accounts for non-profits. General partner: Alfa-Bank.",[46,47,48],"Payments","Accounts","Team Lead",[50,51,52,53,54,55],"Next.js 16","React 19","TypeScript","Tailwind 4","Zustand","Vitest","Frontend Team Lead in a team of 15: frontend architecture and stack, tasks and code review for four more developers, the UI kit, the accounts of non-profits and donors, performance optimization.","The site handles 13 times more requests: 340 → 4552 rps across 17 routes, median response 919 → 69 ms. Lighthouse 100 in Accessibility, Best Practices and SEO, Performance 90+.",{"id":59,"isFavorite":7,"index":60,"name":61,"tone":62,"url":63,"host":64,"preview":65,"previewMobile":66,"previewFrame":40,"previewAlt":75,"subtitle":76,"headline":77,"description":78,"metaDescription":79,"tags":80,"stack":82,"role":86,"result":87},"hector","02","Hector","primary","https:\u002F\u002Fhectorvip.com\u002F","hectorvip.com",null,{"src":67,"width":30,"height":68,"variants":69},"\u002F_nuxt\u002Fpreview-mobile.b4yGJ-pG.webp",1304,[70,72,74],{"src":71,"width":35},"\u002F_nuxt\u002Fpreview-mobile.CJLUUGVg.webp",{"src":73,"width":38},"\u002F_nuxt\u002Fpreview-mobile.BAQF9lQh.webp",{"src":67,"width":30},"Screens of the Hector app: choosing protection, live tracking of the team, order review and the SOS screen","MOBILE APP · PERSONAL PROTECTION","An iOS and Android app with the iOS build in the cloud","An app for booking personal protection and a car with a driver: live tracking of the team on a map and an SOS button. The service operates in Europe and the UAE.","An app for booking personal protection and a chauffeured car: live tracking of the team on a map and an SOS button. The service operates in Europe and the UAE.",[81,48],"Mobile app",[83,84,52,85,53],"Vue 3","Capacitor 8","Pinia","Frontend Team Lead in a team of 15: architecture and the choice of Vue 3 with Capacitor, tasks and code review for four more developers, the initial project setup, components and the first order screens. I presented the app to the client myself.","The app reached a demo build for the client on iOS and Android, with iOS built and tested in the cloud: 26 screens, about 1,700 test cases.",{"id":89,"isFavorite":7,"index":90,"name":91,"tone":10,"url":92,"host":93,"preview":94,"previewMobile":109,"previewFrame":40,"previewAlt":117,"subtitle":118,"headline":119,"description":120,"tags":121,"stack":125,"role":130,"result":131},"brendmart","03","Brendmart","https:\u002F\u002Fbrendmart.com\u002F","brendmart.com",{"src":95,"width":96,"height":97,"variants":98},"\u002F_nuxt\u002Fpreview.DQ_tOI1d.webp",1440,900,[99,101,103,105,108],{"src":100,"width":20},"\u002F_nuxt\u002Fpreview.BoDLKM3K.webp",{"src":102,"width":23},"\u002F_nuxt\u002Fpreview.nOXN3WDE.webp",{"src":104,"width":26},"\u002F_nuxt\u002Fpreview.Ybg35rJg.webp",{"src":106,"width":107},"\u002F_nuxt\u002Fpreview.DvOG594N.webp",1200,{"src":95,"width":96},{"src":110,"width":30,"height":31,"variants":111},"\u002F_nuxt\u002Fpreview-mobile.BDHhqLCn.webp",[112,114,116],{"src":113,"width":35},"\u002F_nuxt\u002Fpreview-mobile.CSOton1R.webp",{"src":115,"width":38},"\u002F_nuxt\u002Fpreview-mobile.YlCbSuVE.webp",{"src":110,"width":30},"Home page of the Brendmart website","ONLINE STORE · DELIVERY FROM EUROPE","600+ orders a month by the time of handover","An online store of clothing, shoes and accessories by global brands from European stores, with delivery to Russia, Belarus and Kazakhstan.",[122,123,124],"E-commerce","Full-Stack","SEO",[126,127,128,129],"Nuxt 4","Tailwind","Laravel","PostgreSQL","Fullstack Developer, one of two on a team with a junior frontend developer: design and UI kit, a Nuxt storefront with server-side rendering, the client side of the admin panel, storefront API in Laravel and code review for the junior developer.","By handover the store was taking more than 600 orders a month, and the catalog held more than 2 million products.",{"id":133,"isFavorite":7,"index":134,"name":135,"tone":136,"url":65,"host":65,"preview":137,"previewMobile":149,"previewFrame":40,"previewAlt":157,"subtitle":158,"headline":159,"description":160,"metaDescription":161,"tags":162,"stack":164,"role":166,"result":167},"tamriel-codex","04","Tamriel Codex","accent",{"src":138,"width":96,"height":97,"variants":139},"\u002F_nuxt\u002Fpreview.TSvmWWJA.webp",[140,142,144,146,148],{"src":141,"width":20},"\u002F_nuxt\u002Fpreview.Bf-xVxaL.webp",{"src":143,"width":23},"\u002F_nuxt\u002Fpreview.C1-YvcHK.webp",{"src":145,"width":26},"\u002F_nuxt\u002Fpreview.By7V-TYq.webp",{"src":147,"width":107},"\u002F_nuxt\u002Fpreview.CKqw0MYq.webp",{"src":138,"width":96},{"src":150,"width":30,"height":31,"variants":151},"\u002F_nuxt\u002Fpreview-mobile.D427ULQb.webp",[152,154,156],{"src":153,"width":35},"\u002F_nuxt\u002Fpreview-mobile.mKM6LZjD.webp",{"src":155,"width":38},"\u002F_nuxt\u002Fpreview-mobile.Cup60FEF.webp",{"src":150,"width":30},"Home screen of the Tamriel Codex app","OFFLINE HANDBOOK · LARP","An offline handbook for Android and Windows in 10 days, ready by game day","A handbook and player's notebook for a live-action role-playing game set in The Elder Scrolls world: rules, lore and news with fast search, personal notes and sharing them by QR without internet.","A handbook and player notebook for a live-action role-playing game in The Elder Scrolls world: rules, lore and news with search, notes and offline QR sharing.",[163],"Mobile first",[83,52,165,127,85],"Capacitor","Fullstack developer, end to end: the interface, the local database, the Android and Windows builds, exporting the game data from the VK group and sharing notes by QR.","At the game the Aldmeri Dominion faction used the app, and players shared notes by QR without internet. Anything in the rules and lore took seconds to find instead of digging through a stack of paper.",{"id":169,"isFavorite":170,"index":171,"name":172,"tone":62,"url":173,"host":174,"preview":175,"previewMobile":187,"previewFrame":40,"previewAlt":195,"subtitle":196,"headline":197,"description":198,"tags":199,"stack":200,"role":201,"result":202},"qwixit",false,"05","Qwixit","https:\u002F\u002Fqwixit.com\u002F","qwixit.com",{"src":176,"width":96,"height":97,"variants":177},"\u002F_nuxt\u002Fpreview.BJ-EURI3.webp",[178,180,182,184,186],{"src":179,"width":20},"\u002F_nuxt\u002Fpreview.BSjC_jdz.webp",{"src":181,"width":23},"\u002F_nuxt\u002Fpreview.CczIwwrb.webp",{"src":183,"width":26},"\u002F_nuxt\u002Fpreview.O4bIF5kF.webp",{"src":185,"width":107},"\u002F_nuxt\u002Fpreview.BiAbL9eY.webp",{"src":176,"width":96},{"src":188,"width":30,"height":31,"variants":189},"\u002F_nuxt\u002Fpreview-mobile.GBLbkhw0.webp",[190,192,194],{"src":191,"width":35},"\u002F_nuxt\u002Fpreview-mobile.aOO47mjt.webp",{"src":193,"width":38},"\u002F_nuxt\u002Fpreview-mobile.DbIj0fqu.webp",{"src":188,"width":30},"Home page of the Qwixit website","ONLINE STORE · DELIVERY FROM THE US","300+ orders a month","An online store of genuine US products with prices in rubles and delivery across Russia.",[122,123,46,124],[83,128,129],"Fullstack Developer in a team of three developers and a PM: design of the storefront and the admin panel, frontend architecture and the client side in Vue 3, storefront API in Laravel.","2.5 months after launch the store reached the client's goal of 300+ orders a month. By handover the catalog held about a million products.",{"id":204,"isFavorite":170,"index":205,"name":206,"tone":62,"url":207,"host":208,"preview":209,"previewMobile":221,"previewFrame":40,"previewAlt":229,"subtitle":230,"headline":231,"description":232,"tags":233,"stack":234,"role":235,"result":236},"taobao","06","Taobao.at","https:\u002F\u002Ftaobao.at\u002F","taobao.at",{"src":210,"width":96,"height":97,"variants":211},"\u002F_nuxt\u002Fpreview.BdMV33Um.webp",[212,214,216,218,220],{"src":213,"width":20},"\u002F_nuxt\u002Fpreview.Cq9aHY3q.webp",{"src":215,"width":23},"\u002F_nuxt\u002Fpreview.CfQNmd7L.webp",{"src":217,"width":26},"\u002F_nuxt\u002Fpreview.hj4tDofr.webp",{"src":219,"width":107},"\u002F_nuxt\u002Fpreview.BCMHlSl0.webp",{"src":210,"width":96},{"src":222,"width":30,"height":31,"variants":223},"\u002F_nuxt\u002Fpreview-mobile.DXMHaMse.webp",[224,226,228],{"src":225,"width":35},"\u002F_nuxt\u002Fpreview-mobile.u6FJCFzj.webp",{"src":227,"width":38},"\u002F_nuxt\u002Fpreview-mobile.DSZWomk4.webp",{"src":222,"width":30},"Home page of the Taobao.at website","PURCHASE SERVICE · DELIVERY FROM CHINA AND HONG KONG","600+ orders a month by handover","A service for ordering products from China and Hong Kong with delivery to Russia. Prices in rubles already include duties, the service fee and delivery.",[122,123],[126,127,128,129],"Fullstack Developer in a team of three developers: site design and the UI kit, the storefront in Nuxt, the client side of the admin panel, storefront API in Laravel.","By handover the service was taking 600+ orders a month, and the catalog held more than 2 million products.",{"id":238,"isFavorite":170,"index":239,"name":240,"tone":10,"url":241,"host":242,"preview":243,"previewMobile":255,"previewFrame":40,"previewAlt":263,"subtitle":264,"headline":265,"description":266,"metaDescription":267,"tags":268,"stack":269,"role":270,"result":271},"pochtoy-prostobox","07","Pochtoy & Prostobox","https:\u002F\u002Fpochtoy.com\u002F","pochtoy.com",{"src":244,"width":96,"height":97,"variants":245},"\u002F_nuxt\u002Fpreview.C_9pqUA1.webp",[246,248,250,252,254],{"src":247,"width":20},"\u002F_nuxt\u002Fpreview.Dk-xrNgy.webp",{"src":249,"width":23},"\u002F_nuxt\u002Fpreview.CTPHhq6E.webp",{"src":251,"width":26},"\u002F_nuxt\u002Fpreview.Dp6TtUVh.webp",{"src":253,"width":107},"\u002F_nuxt\u002Fpreview.CQcyDZ3O.webp",{"src":244,"width":96},{"src":256,"width":30,"height":31,"variants":257},"\u002F_nuxt\u002Fpreview-mobile.Db-mWMrq.webp",[258,260,262],{"src":259,"width":35},"\u002F_nuxt\u002Fpreview-mobile.CnunxO3M.webp",{"src":261,"width":38},"\u002F_nuxt\u002Fpreview-mobile.C-QNAVjI.webp",{"src":256,"width":30},"Home page of Pochtoy.com and the mobile home page of Prostobox","DELIVERY FROM THE US · SUPPORT AND SPEED","Speeding up the storefronts of two brands on one platform","A service that delivers purchases from US stores: a warehouse in tax-free Delaware, buying items on the customer's behalf, shipping to Russia, Kazakhstan, Belarus and other countries.","A service delivering purchases from US stores: a tax-free Delaware warehouse, buying items for the customer, shipping to Russia, Kazakhstan, Belarus and more.",[123],[83,128,52,127,129],"Fullstack Developer in a team of three developers and a PM: the storefront frontend, its database queries and faster page loading.","The storefront got pagination, lazy-loaded images, separate scripts and styles for every page and speed tracking for real users. The Review Cashback module is mine: frontend and queries.",{"id":273,"isFavorite":170,"index":274,"name":275,"tone":10,"url":276,"host":277,"preview":278,"previewMobile":290,"previewFrame":40,"previewAlt":298,"subtitle":299,"headline":300,"description":301,"tags":302,"stack":303,"role":308,"result":309},"cdek-shopping","08","CDEK.Shopping","https:\u002F\u002Fcdek.shopping\u002F","cdek.shopping",{"src":279,"width":96,"height":97,"variants":280},"\u002F_nuxt\u002Fpreview.BtfYmZXg.webp",[281,283,285,287,289],{"src":282,"width":20},"\u002F_nuxt\u002Fpreview.IjjyXAk1.webp",{"src":284,"width":23},"\u002F_nuxt\u002Fpreview.Dnde0-O5.webp",{"src":286,"width":26},"\u002F_nuxt\u002Fpreview.CdA0MpR5.webp",{"src":288,"width":107},"\u002F_nuxt\u002Fpreview.Cd-F3LTm.webp",{"src":279,"width":96},{"src":291,"width":30,"height":31,"variants":292},"\u002F_nuxt\u002Fpreview-mobile.qB4EOKla.webp",[293,295,297],{"src":294,"width":35},"\u002F_nuxt\u002Fpreview-mobile.ClLqQ63Q.webp",{"src":296,"width":38},"\u002F_nuxt\u002Fpreview-mobile.eVrVSYYt.webp",{"src":291,"width":30},"Home page of the CDEK.Shopping website","SHOPPING FROM ABROAD · CUSTOMER ACCOUNT","37% fewer regression bugs","A CDEK group agent service for ordering products of foreign brands from 14 countries, paid with a Russian card at prices in rubles.",[122,47],[304,305,306,128,307],"Vue 2","Vuex","JavaScript","Jest","Middle Frontend Developer in a team of 15: the entire frontend of the customer account in Vue 2 and Vuex inside Laravel + Blade, refactoring of the jQuery legacy code, Laravel tasks.","The new service launched straight away with an interactive account that never reloads the page. After the legacy refactoring, regression bugs dropped by 37% according to QA reports.",{"id":311,"isFavorite":170,"index":312,"name":313,"tone":10,"url":65,"host":65,"preview":314,"previewMobile":326,"previewFrame":40,"previewAlt":334,"subtitle":335,"headline":336,"description":337,"tags":338,"stack":339,"role":342,"result":343},"fly-post","09","Fly Post",{"src":315,"width":96,"height":97,"variants":316},"\u002F_nuxt\u002Fpreview.C8X6Y8G4.webp",[317,319,321,323,325],{"src":318,"width":20},"\u002F_nuxt\u002Fpreview.0QkMr1Qz.webp",{"src":320,"width":23},"\u002F_nuxt\u002Fpreview.DA4fYd-7.webp",{"src":322,"width":26},"\u002F_nuxt\u002Fpreview.CB8ezYGX.webp",{"src":324,"width":107},"\u002F_nuxt\u002Fpreview.BXQsk5g8.webp",{"src":315,"width":96},{"src":327,"width":30,"height":31,"variants":328},"\u002F_nuxt\u002Fpreview-mobile.B_t0i6d9.webp",[329,331,333],{"src":330,"width":35},"\u002F_nuxt\u002Fpreview-mobile.UVy05DQ5.webp",{"src":332,"width":38},"\u002F_nuxt\u002Fpreview-mobile.CreLp-bD.webp",{"src":327,"width":30},"Profile in Fly Post: a table of shipments with statuses and the selected shipment's card","PIGGYBACK DELIVERY · INTERNAL SERVICE","An MVP of a crew-courier air delivery service in ~5 weeks","An internal service where flight crews pick up mail for their own flight and get paid for delivering it.",[123,47],[83,52,340,129,341],"NestJS","Docker","Led the project as a contractor: design and the UI kit, architecture, the NestJS backend, the Vue 3 frontend together with two developers and reviews of their code.","The client accepted the MVP built in about 5 weeks: the frontend and the backend went in parallel against a Swagger API contract.",{"id":345,"isFavorite":170,"index":346,"name":347,"tone":136,"url":65,"host":65,"preview":348,"previewMobile":65,"previewFrame":360,"previewAlt":361,"subtitle":362,"headline":363,"description":364,"tags":365,"stack":366,"role":367,"result":368},"someday","10","Someday",{"src":349,"width":350,"height":351,"variants":352},"\u002F_nuxt\u002Fpreview.DNFpwSnZ.webp",1156,800,[353,355,357,359],{"src":354,"width":20},"\u002F_nuxt\u002Fpreview.CMPJxUgW.webp",{"src":356,"width":23},"\u002F_nuxt\u002Fpreview.qElGncQg.webp",{"src":358,"width":26},"\u002F_nuxt\u002Fpreview.kgAz1Rh1.webp",{"src":349,"width":350},"terminal","Illustration: a retro CRT monitor showing a diagram of the Someday ESP32 board and its wired modules","DRIVER LIBRARIES · ELECTRONICS FOR A ROLE-PLAYING GAME","11 ESP32 drivers for role-playing game devices","C++ driver libraries for ESP32 that game devices are built from, for a S.T.A.L.K.E.R. field role-playing game in the Urals.",[],[],"All the software in the three-person KB Someday team. In this case, the author of 11 someday-* driver libraries in C++ for ESP32 and FreeRTOS.","Devices built on these libraries worked through the 2026 game: about 30 players went through the location's quests, and a device runs 18–20 hours on two 18650 batteries.",{"name":370,"alternateNames":371,"role":374,"skills":375},"Michael Malakhov",[372,373],"Михаил Малахов","Mikhail Malakhov","Fullstack Developer",[376,52,377,378,379,380,381,382,383,384,385,386,387,388,389,124,390,391,340,392,128,393,129,394,395,341,396,397,398,399,400,401,402,403,404,405,55,307,406,407,408,409,410,411,412,413,414,54,415,416,85,305,417,418,165,419,420,421,422,423,424,425],"JavaScript (ES6+)","HTML5","CSS3","Sass","Vue.js (Vue 2\u002FVue 3, Composition API)","Nuxt 3\u002F4","React","Next.js","Vue Router","Tailwind CSS","Bootstrap","SPA","SSR","MPA","Chrome DevTools","Node.js","Express","Rust","Redis","REST API","Nginx","CI\u002FCD","GitHub Actions","Vite","Webpack","Git","GitHub","GitLab","Figma","Redux","Tauri","Prometheus","Storybook","Jira","Claude Code","Codex","Gemini","MCP","Atlassian Rovo","SWR","TanStack Query","React Hook Form","Zod","GraphQL","WebSocket","Clinic.js","autocannon","Lighthouse","GitHub Copilot","AI agents",1793309468741]