[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-settings":3,"\u002Fapi\u002Fposts\u002Fproject-en":9},{"open_to_work":4,"show_search":4,"github_url":5,"telegram_url":6,"email":7,"years_experience":8},true,"https:\u002F\u002Fgithub.com\u002FWhoStoleMySleepDev","https:\u002F\u002Ft.me\u002FWhoStoleMySleep","whostolemysleep@gmail.com",4,[10,24,35,46,56,65,76,92,107,121,136,151,167],{"id":11,"slug":12,"type":13,"title":12,"excerpt":14,"url":15,"published_at":16,"updated_at":17,"tags":18,"images":23},22,"tauri-plugin-timer","project","Android ongoing timer notification for Tauri — system chronometer and action buttons held by a foreground service, so it keeps counting with no JavaScript running","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002Ftauri-plugin-timer",null,"2026-08-14 11:12:48.707",[19],{"id":20,"slug":21,"name":22},1,"personal","Personal",[],{"id":25,"slug":26,"type":13,"title":27,"excerpt":28,"url":29,"published_at":30,"updated_at":31,"tags":32,"images":34},25,"wave","Wave","Музыкальный клиент для ПК и Android, созданный на Tauri, React и Rust.","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002FWave","2026-10-18 03:28:00.000","2026-10-19 09:46:17.986",[33],{"id":20,"slug":21,"name":22},[],{"id":36,"slug":37,"type":13,"title":38,"excerpt":39,"url":40,"published_at":41,"updated_at":42,"tags":43,"images":45},20,"git-space","GitSpace","MacOS app for keeping git projects in order — Tauri 2 + Nuxt 4, tokens in the Keychain, batched parallel git status","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002FGitSpace","2026-08-14 06:31:00.000","2026-08-14 11:12:27.091",[44],{"id":20,"slug":21,"name":22},[],{"id":47,"slug":48,"type":13,"title":49,"excerpt":50,"url":51,"published_at":41,"updated_at":52,"tags":53,"images":55},21,"freel","Freel","Time tracking and invoicing for freelance work, desktop and Android — Tauri 2, React 19, SQLite, transactional sync with the token kept out of JavaScript","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002Ffreel-client","2026-08-14 11:12:54.358",[54],{"id":20,"slug":21,"name":22},[],{"id":57,"slug":58,"type":13,"title":58,"excerpt":59,"url":60,"published_at":41,"updated_at":61,"tags":62,"images":64},23,"attractions-sync","Rust data pipeline — pulls the Ministry of Culture registry from a Russian IP, converts photos to WebP and commits the dataset into the site repo, so the build makes no network calls","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002Fattractions42-sync","2026-08-14 11:12:42.062",[63],{"id":20,"slug":21,"name":22},[],{"id":66,"slug":67,"type":13,"title":68,"excerpt":69,"url":70,"published_at":71,"updated_at":72,"tags":73,"images":75},10,"","Vestibule","Desktop focus tracker that gives distraction a price — Rust workspace of four crates, privileged helper over a Unix socket, site blocking via \u002Fetc\u002Fhosts and app freezing via SIGSTOP, 196 tests","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002FVestibule","2026-07-08 06:48:00.000","2026-08-14 11:12:35.245",[74],{"id":20,"slug":21,"name":22},[],{"id":77,"slug":78,"type":13,"title":79,"excerpt":80,"url":81,"published_at":82,"updated_at":83,"tags":84,"images":86},9,"attractions42","Attractions42","Nuxt 4 · ISR · Nitro cache · SSR — cultural heritage landmarks of Kemerovo region from Ministry of Culture open API ","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002Fattractions42","2026-06-07 12:26:00.000","2026-06-12 06:53:29.325",[85],{"id":20,"slug":21,"name":22},[87],{"id":88,"url":89,"alt":90,"position":91},18,"https:\u002F\u002Fumihgl7z2ekcut1l.public.blob.vercel-storage.com\u002Fmain-1.webp","The main page of the Attractions42 website",0,{"id":93,"slug":94,"type":13,"title":95,"excerpt":96,"url":97,"published_at":98,"updated_at":99,"tags":100,"images":102},8,"current-personal-website","Current personal website","Full-stack portfolio — Nuxt 4, Drizzle ORM, Neon, Vercel ISR, built-in CMS, EN\u002FRU","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002Fwhostolemysleep-ru","2026-06-06 23:48:00.000","2026-06-12 06:51:40.455",[101],{"id":20,"slug":21,"name":22},[103],{"id":104,"url":105,"alt":106,"position":91},17,"https:\u002F\u002Fumihgl7z2ekcut1l.public.blob.vercel-storage.com\u002Fhero.webp","To view the personal website, go to the main page",{"id":108,"slug":109,"type":13,"title":110,"excerpt":111,"url":112,"published_at":113,"updated_at":114,"tags":115,"images":117},5,"protected-gallery","Protected Gallery","A personal encrypted media vault for Android. PIN-protected, AES-256-GCM, fully offline.","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleepDev\u002Fprotected-gallery","2026-05-14 10:56:00.000","2026-05-21 07:11:27.167",[116],{"id":20,"slug":21,"name":22},[118],{"id":66,"url":119,"alt":120,"position":91},"https:\u002F\u002Fumihgl7z2ekcut1l.public.blob.vercel-storage.com\u002Fseapp.webp","Protected Gallery - Main screen",{"id":122,"slug":123,"type":13,"title":124,"excerpt":125,"url":126,"published_at":127,"updated_at":128,"tags":129,"images":131},7,"logger-connect-nuxt","@wsms\u002Flogger-connect-nuxt","Nuxt 3\u002F4 module for @wsms\u002Flogger — structured file logging with auto-imports for both server routes and Vue components.","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleep\u002Flogger-connect-nuxt","2026-03-04 03:58:00.000","2026-06-12 06:55:49.092",[130],{"id":20,"slug":21,"name":22},[132],{"id":133,"url":134,"alt":135,"position":91},19,"https:\u002F\u002Fumihgl7z2ekcut1l.public.blob.vercel-storage.com\u002Fasd.webp","Tests of the @wms\u002Flogger library in which it shows good results",{"id":137,"slug":138,"type":13,"title":139,"excerpt":140,"url":141,"published_at":142,"updated_at":143,"tags":144,"images":146},6,"logger","@wsms\u002Flogger","Zero-dependency structured logger for Node.js — async writes (~700k logs\u002Fsec), log rotation, child loggers","https:\u002F\u002Fgithub.com\u002FWhoStoleMySleepDev\u002Flogger","2026-03-03 11:01:00.000","2026-05-21 07:07:36.579",[145],{"id":20,"slug":21,"name":22},[147],{"id":148,"url":149,"alt":150,"position":91},16,"https:\u002F\u002Fumihgl7z2ekcut1l.public.blob.vercel-storage.com\u002FScreenshot%202026-05-21%20at%2014.03.31.webp","Benchmark logger",{"id":8,"slug":152,"type":13,"title":153,"excerpt":154,"url":155,"published_at":156,"updated_at":157,"tags":158,"images":163},"pochtabank","Pochtabank","Pochta Bank website — my first steps in commercial development.","https:\u002F\u002Fwww.pochtabank.ru\u002F","2023-04-05 07:07:00.000","2026-05-21 06:47:06.777",[159],{"id":160,"slug":161,"name":162},2,"work","Work",[164],{"id":165,"url":166,"alt":153,"position":20},13,"https:\u002F\u002Fumihgl7z2ekcut1l.public.blob.vercel-storage.com\u002F418de20e9e3f83727bb480d9abe06ac3.webp",{"id":168,"slug":169,"type":13,"title":170,"excerpt":171,"url":172,"published_at":173,"updated_at":174,"tags":175,"images":177},3,"sberspasibo","Sberspasibo","The Spasibo website (Sber's loyalty program) is an important project for me — taking part in its development gave me a huge push forward in my growth.","https:\u002F\u002Fspasibosberbank.ru\u002F","2022-02-01 07:05:00.000","2026-05-21 06:49:00.503",[176],{"id":160,"slug":161,"name":162},[178],{"id":179,"url":180,"alt":170,"position":20},14,"https:\u002F\u002Fumihgl7z2ekcut1l.public.blob.vercel-storage.com\u002Fsber-2.webp"]