[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"global":3,"services:en":200,"technology-names:en":248,"project:delight:en":296},{"id":4,"documentId":5,"siteName":6,"siteUrl":7,"createdAt":8,"updatedAt":9,"publishedAt":10,"locale":11,"logo":12,"ogImage":26,"nav":71,"headerCta":94,"contact":99,"footer":114,"organization":133,"brief":147},5,"pdvc9bpy99219el368k0axyu","Spot","https:\u002F\u002Fwespot.ru","2026-10-27T11:56:47.515Z","2026-10-28T01:53:56.708Z","2026-10-28T01:53:56.790Z","en",{"id":13,"documentId":14,"name":15,"alternativeText":6,"caption":16,"focalPoint":16,"width":17,"height":18,"formats":16,"hash":19,"ext":20,"mime":21,"size":22,"url":23,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":25,"updatedAt":25,"publishedAt":25},28,"tampnmiu5mwua40w53mjugw8","logo-spot.svg",null,116,34,"logo_spot_53ec7bfdce",".svg","image\u002Fsvg+xml",8.28,"\u002Fuploads\u002Flogo_spot_53ec7bfdce.svg","local","2026-10-26T22:32:01.303Z",{"id":27,"documentId":28,"name":29,"alternativeText":6,"caption":16,"focalPoint":16,"width":30,"height":31,"formats":32,"hash":67,"ext":34,"mime":37,"size":68,"url":69,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":70,"updatedAt":70,"publishedAt":70},29,"g7keq692g2z8vgqzkv8bzt0r","spot.jpg",1200,630,{"large":33,"small":43,"medium":51,"thumbnail":59},{"ext":34,"url":35,"hash":36,"mime":37,"name":38,"path":16,"size":39,"width":40,"height":41,"sizeInBytes":42},".jpg","\u002Fuploads\u002Flarge_spot_e52160dbaa.jpg","large_spot_e52160dbaa","image\u002Fjpeg","large_spot.jpg",26.66,1000,525,26659,{"ext":34,"url":44,"hash":45,"mime":37,"name":46,"path":16,"size":47,"width":48,"height":49,"sizeInBytes":50},"\u002Fuploads\u002Fsmall_spot_e52160dbaa.jpg","small_spot_e52160dbaa","small_spot.jpg",10.21,500,263,10208,{"ext":34,"url":52,"hash":53,"mime":37,"name":54,"path":16,"size":55,"width":56,"height":57,"sizeInBytes":58},"\u002Fuploads\u002Fmedium_spot_e52160dbaa.jpg","medium_spot_e52160dbaa","medium_spot.jpg",17.69,750,394,17692,{"ext":34,"url":60,"hash":61,"mime":37,"name":62,"path":16,"size":63,"width":64,"height":65,"sizeInBytes":66},"\u002Fuploads\u002Fthumbnail_spot_e52160dbaa.jpg","thumbnail_spot_e52160dbaa","thumbnail_spot.jpg",3.81,245,129,3808,"spot_e52160dbaa",33.67,"\u002Fuploads\u002Fspot_e52160dbaa.jpg","2026-10-26T22:32:01.363Z",[72,78,82,86,90],{"id":73,"label":74,"href":75,"kind":76,"strong":77,"external":77},174,"Services","\u002Fservices","text",false,{"id":79,"label":80,"href":81,"kind":76,"strong":77,"external":77},175,"Projects","\u002Fcases",{"id":83,"label":84,"href":85,"kind":76,"strong":77,"external":77},176,"Expertise","\u002F#expertise",{"id":87,"label":88,"href":89,"kind":76,"strong":77,"external":77},177,"How we work","\u002F#how",{"id":91,"label":92,"href":93,"kind":76,"strong":77,"external":77},178,"Contacts","#contact",{"id":95,"label":96,"href":97,"kind":98,"strong":77,"external":77},179,"Discuss a project","#brief","btn-a",{"id":4,"heading":100,"text":101,"cta":102,"links":104},"Let's discuss your project","We reply the same day. The first step is a 30-minute call or a brief in Telegram.",{"id":103,"label":96,"href":97,"kind":98,"strong":77,"external":77},180,[105,109],{"id":106,"label":107,"href":108,"kind":76,"strong":77,"external":77},181,"push@wespot.ru","mailto:push@wespot.ru",{"id":110,"label":111,"href":112,"kind":76,"strong":77,"external":113},182,"@khudyakv","https:\u002F\u002Ft.me\u002Fkhudyakv",true,{"id":4,"legal":115,"links":116},"© 2022–2026 Spot",[117,121,125,129],{"id":118,"label":119,"href":120,"kind":76,"strong":77,"external":77},183,"Privacy policy","\u002Fprivacy",{"id":122,"label":123,"href":124,"kind":76,"strong":77,"external":77},184,"Terms of use","\u002Fterms",{"id":126,"label":127,"href":128,"kind":76,"strong":113,"external":113},185,"Habr","https:\u002F\u002Fhabr.com\u002Fru\u002Fusers\u002Fkhudyakv\u002Farticles\u002F",{"id":130,"label":131,"href":132,"kind":76,"strong":113,"external":113},186,"Telegram","https:\u002F\u002Ft.me\u002Ffrontend_lite",{"id":134,"name":6,"alternateNames":135,"legalName":16,"inn":16,"email":107,"phone":16,"telegram":112,"country":136,"description":137,"sameAs":138},6,"Wespot","RU","We build the online touchpoints between a business and its customers, partners and employees: customer accounts and stores, dealer and partner portals, CRM and internal systems for teams.",[139,141,144],{"id":140,"label":131,"href":112,"kind":76,"strong":77,"external":113},187,{"id":142,"label":143,"href":132,"kind":76,"strong":77,"external":113},188,"Read on Telegram",{"id":145,"label":146,"href":128,"kind":76,"strong":77,"external":113},189,"Articles on Habr",{"id":4,"label":96,"title":148,"submit":149,"successText":150,"errorText":151,"people":152,"fields":175,"consent":196},"Fill in a brief \u003Cspan style=\"color: #6B6B72\">about your task\u003C\u002Fspan>","Send the brief","Thank you! We have your brief and will get back to you as soon as we can.","The brief could not be sent. Write to us at push@wespot.ru or on Telegram @khudyakv.",[153],{"id":154,"name":155,"role":156,"photo":157},9,"Vladislav Khudyakov","Founder",{"id":158,"documentId":159,"name":160,"alternativeText":161,"caption":16,"focalPoint":16,"width":162,"height":162,"formats":163,"hash":171,"ext":34,"mime":37,"size":172,"url":173,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":174,"updatedAt":174,"publishedAt":174},30,"fbfagczmqep6lcsch1v3c81f","vladislav-khudyakov.jpg","Владислав Худяков",160,{"thumbnail":164},{"ext":34,"url":165,"hash":166,"mime":37,"name":167,"path":16,"size":168,"width":169,"height":169,"sizeInBytes":170},"\u002Fuploads\u002Fthumbnail_vladislav_khudyakov_0a1f3babcf.jpg","thumbnail_vladislav_khudyakov_0a1f3babcf","thumbnail_vladislav-khudyakov.jpg",5.61,156,5606,"vladislav_khudyakov_0a1f3babcf",5.82,"\u002Fuploads\u002Fvladislav_khudyakov_0a1f3babcf.jpg","2026-10-26T22:32:01.379Z",[176,183,189],{"id":177,"label":178,"name":179,"tag":180,"type":76,"placeholder":181,"autocomplete":179,"rows":182,"required":113},13,"Name*","name","input","How should we address you?",0,{"id":184,"label":185,"name":186,"tag":180,"type":76,"placeholder":187,"autocomplete":188,"rows":182,"required":113},14,"How can we reach you*","contact","Messenger, phone, email","off",{"id":190,"label":191,"name":192,"tag":193,"type":76,"placeholder":194,"autocomplete":188,"rows":195,"required":77},15,"About the task","task","textarea","What needs to be done, the timeline, any constraints",4,{"id":4,"before":197,"link":198,"href":120,"after":199},"I agree to the processing of my personal data. See the ","privacy policy",".",[201,209,218,226,234,241],{"id":202,"documentId":203,"title":204,"slug":205,"num":206,"text":207,"isLinked":77,"order":182,"ctaLabel":208},36,"xom9f9b8uov8k5jzse6cawd0","Customer accounts and portals","lk","01","Accounts for customers, partners and employees: orders, payments, requests, history and access roles.","Discuss the task",{"id":210,"documentId":211,"title":212,"slug":213,"num":214,"text":215,"isLinked":77,"order":216,"ctaLabel":217},35,"tumsah9k2m6m0sewkabpw61e","Corporate systems","corporate","02","CRM, ERP and internal systems. Customers, finances, requests and access in one place.",1,"Discuss a system",{"id":219,"documentId":220,"title":221,"slug":222,"num":223,"text":224,"isLinked":77,"order":225,"ctaLabel":208},37,"zunn9dms6ad8texoqw6y3tdr","Mini Apps and web services","mini-apps","03","Mini Apps, chatbots and web services that automate individual business processes.",2,{"id":227,"documentId":228,"title":229,"slug":230,"num":231,"text":232,"isLinked":77,"order":233,"ctaLabel":208},38,"jhuw9zs2spni1yu9a682x04h","Special projects and complex interfaces","special","04","Web games, configurators and calculators. Built for Alfa-Bank, Raiffeisen Life and SPLAT.",3,{"id":235,"documentId":236,"title":237,"slug":238,"num":239,"text":240,"isLinked":77,"order":195,"ctaLabel":208},39,"ckrj708ld8bs46wv7klunsjo","Service integrations","integrations","05","Data exchange with 1C, CRM, YooKassa, Stripe, delivery services and SMS gateways.",{"id":242,"documentId":243,"title":244,"slug":245,"num":246,"text":247,"isLinked":77,"order":4,"ctaLabel":208},40,"yuha2yu8lv44n7tn7bacrsgk","Support and scaling","support","06","We join existing products and work with someone else's code. We optimise performance and move legacy to a new stack.",[249,253,257,260,264,268,272,276,280,284,288,292],{"id":250,"documentId":251,"name":252},169,"p8vqp4j7u4d5hczr7szvpixb","Vue",{"id":254,"documentId":255,"name":256},128,"cz2o7v44o0aco9e5ug991orw","React",{"id":65,"documentId":258,"name":259},"xlc3e2f0g2e8d21dtz56fhqq","Nuxt",{"id":261,"documentId":262,"name":263},130,"tn8tizd5lz1g7lobpen0g8jp","Next.js",{"id":265,"documentId":266,"name":267},131,"j4b9wdar97fh6a7n4np1ol1b","TypeScript",{"id":269,"documentId":270,"name":271},132,"y119214qgyryif676kl65vzm","Vite",{"id":273,"documentId":274,"name":275},133,"h32yowozezgx7shnoavwhdhr","Sass",{"id":277,"documentId":278,"name":279},134,"nptn5i4h1260f2i8vsf05xm8","Pinia",{"id":281,"documentId":282,"name":283},135,"deb59z0fojzpks7jg8zqhy9x","GSAP",{"id":285,"documentId":286,"name":287},136,"ipa2daxz0h944wz1bpkhaphz","Canvas",{"id":289,"documentId":290,"name":291},137,"rzotygp0g2fxn3ynxnucq3jp","Anime.js",{"id":293,"documentId":294,"name":295},138,"hd8evrxia67rvyuvmv0tij7o","Figma",{"id":297,"documentId":298,"title":299,"slug":300,"order":301,"lede":302,"desc":302,"collab":113,"clientName":303,"kind":304,"stack":305,"site":306,"noSiteText":307,"task":308,"result":309,"createdAt":310,"updatedAt":311,"publishedAt":312,"locale":11,"tags":313,"partner":319,"formats":1311,"points":1312,"slides":1313,"cover":1314,"coverSettings":1320,"categories":1321,"services":1586,"client":1587,"taskList":1616,"done":1617,"gallery":1622,"testimonial":16,"nextProject":1623,"seo":1962},53,"dxsron1w40fz28dk6ltwj8ji","Corporate website of a cosmetics brand","delight",11,"The frontend of an Italian professional cosmetics brand's website.","Constant Delight","Corporate website","Nunjucks, SCSS, GreenSock Animation, Gulp, Webpack","https:\u002F\u002Fconstanta-cd.ru\u002F","","\u003Cp>Build a creative front-end for the corporate website of an Italian professional cosmetics brand for WordPress.\u003C\u002Fp>\n\u003Cp>The pages must work smoothly and equally well on any screen: a fully fluid layout, animations, video and a map of the salon network.\u003C\u002Fp>","The brand site is built on front-end code the client's team integrated and fills in WordPress themselves: animations and video run smoothly, and the fluid layout makes the site predictable on any device.","2026-10-27T11:56:46.529Z","2026-10-28T01:53:58.963Z","2026-10-28T01:53:59.025Z",[314,316],{"id":315,"label":303},487,{"id":317,"label":318},488,"Cosmetics",{"id":195,"documentId":320,"name":321,"url":16,"order":182,"createdAt":322,"updatedAt":323,"publishedAt":324,"locale":11,"logo":16,"projects":325},"aftb92nnhw9ls4rpwg67z6o7","Pragmatica","2026-10-27T11:54:45.840Z","2026-10-27T12:06:29.363Z","2026-10-27T12:06:29.365Z",[326,555,647,750,858,964,1155,1250],{"id":327,"documentId":328,"title":329,"slug":330,"order":233,"lede":331,"desc":331,"collab":113,"clientName":332,"kind":333,"stack":334,"site":307,"noSiteText":335,"task":336,"result":337,"createdAt":338,"updatedAt":339,"publishedAt":340,"locale":11,"tags":341,"formats":347,"points":356,"slides":369,"cover":443,"coverSettings":449,"taskList":451,"done":452,"gallery":473,"seo":551},43,"dz53r8mitt3dtxzu29ni7apu","An onboarding game for a loyalty programme","more-vygody","A web game that onboards customers into the bank's loyalty system.","Alfa-Bank","Web game in a WebView","Vue.js, Pinia, CSS3 Animation, Laravel (PHP), Zabbix","Inside the bank's app","\u003Cp>Introduce the bank's customers to the loyalty programme through a game and motivate them to earn and spend points.\u003C\u002Fp>\n\u003Cp>Build two mechanics: a quiz that explains the programme rules and grants attempts, and fishing with collectible items and real prizes. Collect player behaviour analytics to improve the game experience.\u003C\u002Fp>","The game runs inside the bank's app as onboarding into the loyalty programme: the quiz explains the rules, and customers get collectible items and prizes for their attempts.","2026-10-27T11:56:46.091Z","2026-10-27T12:27:43.482Z","2026-10-27T12:27:43.493Z",[342,343,345],{"id":103,"label":332},{"id":106,"label":344},"“Sea of Benefits”",{"id":110,"label":346},"Fintech",[348,350,352,354],{"id":118,"label":349},"Interactive special project",{"id":122,"label":351},"Mini game",{"id":126,"label":353},"QA",{"id":130,"label":355},"DevOps",[357,360,363,366],{"id":358,"text":359},320,"A quiz about points gives attempts to “cast the line”",{"id":361,"text":362},321,"Fishing with collectible items and prizes",{"id":364,"text":365},322,"Collection and achievement screens",{"id":367,"text":368},323,"User behaviour analytics",[370,406],{"id":184,"documentId":371,"name":372,"alternativeText":373,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":376,"hash":402,"ext":34,"mime":37,"size":403,"url":404,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":405,"updatedAt":405,"publishedAt":405},"iopyhg9unqem19v5fxg7a1t0","alfa-more-vygody.jpg","Игра для онбординга в программу лояльности",1490,782,{"large":377,"small":383,"medium":390,"thumbnail":396},{"ext":34,"url":378,"hash":379,"mime":37,"name":380,"path":16,"size":381,"width":40,"height":41,"sizeInBytes":382},"\u002Fuploads\u002Flarge_alfa_more_vygody_a40f2b5e07.jpg","large_alfa_more_vygody_a40f2b5e07","large_alfa-more-vygody.jpg",62.26,62259,{"ext":34,"url":384,"hash":385,"mime":37,"name":386,"path":16,"size":387,"width":48,"height":388,"sizeInBytes":389},"\u002Fuploads\u002Fsmall_alfa_more_vygody_a40f2b5e07.jpg","small_alfa_more_vygody_a40f2b5e07","small_alfa-more-vygody.jpg",21.68,262,21681,{"ext":34,"url":391,"hash":392,"mime":37,"name":393,"path":16,"size":394,"width":56,"height":57,"sizeInBytes":395},"\u002Fuploads\u002Fmedium_alfa_more_vygody_a40f2b5e07.jpg","medium_alfa_more_vygody_a40f2b5e07","medium_alfa-more-vygody.jpg",40.2,40195,{"ext":34,"url":397,"hash":398,"mime":37,"name":399,"path":16,"size":400,"width":64,"height":254,"sizeInBytes":401},"\u002Fuploads\u002Fthumbnail_alfa_more_vygody_a40f2b5e07.jpg","thumbnail_alfa_more_vygody_a40f2b5e07","thumbnail_alfa-more-vygody.jpg",7.15,7147,"alfa_more_vygody_a40f2b5e07",113.12,"\u002Fuploads\u002Falfa_more_vygody_a40f2b5e07.jpg","2026-10-26T22:31:59.106Z",{"id":190,"documentId":407,"name":408,"alternativeText":373,"caption":16,"focalPoint":16,"width":409,"height":410,"formats":411,"hash":439,"ext":34,"mime":37,"size":440,"url":441,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":442,"updatedAt":442,"publishedAt":442},"flis01idcvbjx8027ys4enxt","more-vygody-screens.jpg",2400,1284,{"large":412,"small":419,"medium":426,"thumbnail":433},{"ext":34,"url":413,"hash":414,"mime":37,"name":415,"path":16,"size":416,"width":40,"height":417,"sizeInBytes":418},"\u002Fuploads\u002Flarge_more_vygody_screens_3ac7b0bc6f.jpg","large_more_vygody_screens_3ac7b0bc6f","large_more-vygody-screens.jpg",74.94,535,74940,{"ext":34,"url":420,"hash":421,"mime":37,"name":422,"path":16,"size":423,"width":48,"height":424,"sizeInBytes":425},"\u002Fuploads\u002Fsmall_more_vygody_screens_3ac7b0bc6f.jpg","small_more_vygody_screens_3ac7b0bc6f","small_more-vygody-screens.jpg",27.25,268,27246,{"ext":34,"url":427,"hash":428,"mime":37,"name":429,"path":16,"size":430,"width":56,"height":431,"sizeInBytes":432},"\u002Fuploads\u002Fmedium_more_vygody_screens_3ac7b0bc6f.jpg","medium_more_vygody_screens_3ac7b0bc6f","medium_more-vygody-screens.jpg",49.52,401,49524,{"ext":34,"url":434,"hash":435,"mime":37,"name":436,"path":16,"size":437,"width":64,"height":265,"sizeInBytes":438},"\u002Fuploads\u002Fthumbnail_more_vygody_screens_3ac7b0bc6f.jpg","thumbnail_more_vygody_screens_3ac7b0bc6f","thumbnail_more-vygody-screens.jpg",9.16,9162,"more_vygody_screens_3ac7b0bc6f",263.45,"\u002Fuploads\u002Fmore_vygody_screens_3ac7b0bc6f.jpg","2026-10-26T22:31:59.276Z",{"id":184,"documentId":371,"name":372,"alternativeText":373,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":444,"hash":402,"ext":34,"mime":37,"size":403,"url":404,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":405,"updatedAt":405,"publishedAt":405},{"large":445,"small":446,"medium":447,"thumbnail":448},{"ext":34,"url":378,"hash":379,"mime":37,"name":380,"path":16,"size":381,"width":40,"height":41,"sizeInBytes":382},{"ext":34,"url":384,"hash":385,"mime":37,"name":386,"path":16,"size":387,"width":48,"height":388,"sizeInBytes":389},{"ext":34,"url":391,"hash":392,"mime":37,"name":393,"path":16,"size":394,"width":56,"height":57,"sizeInBytes":395},{"ext":34,"url":397,"hash":398,"mime":37,"name":399,"path":16,"size":400,"width":64,"height":254,"sizeInBytes":401},{"id":327,"ratio":307,"position":450,"scale":216},"50% 50%",[],[453,456,459,462,465,468,471],{"id":454,"text":455},324,"Quiz about the loyalty programme rules",{"id":457,"text":458},325,"Reactive frontend",{"id":460,"text":461},326,"Fishing animation",{"id":463,"text":464},327,"Prize delivery system",{"id":466,"text":467},328,"Extended device support",{"id":469,"text":470},329,"Per-event analytics of game sessions",{"id":472,"text":365},330,[474,515],{"id":475,"caption":476,"image":477},17,"Game screens: collections, quiz, reward, achievements",{"id":478,"documentId":479,"name":480,"alternativeText":481,"caption":16,"focalPoint":16,"width":409,"height":482,"formats":483,"hash":511,"ext":34,"mime":37,"size":512,"url":513,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":514,"updatedAt":514,"publishedAt":514},16,"b29ct1td30fhj53cwi338osy","more-vygody-game-screens.jpg","Экраны игры: коллекции, квиз, награда, достижения",1350,{"large":484,"small":491,"medium":498,"thumbnail":505},{"ext":34,"url":485,"hash":486,"mime":37,"name":487,"path":16,"size":488,"width":40,"height":489,"sizeInBytes":490},"\u002Fuploads\u002Flarge_more_vygody_game_screens_92ec58de83.jpg","large_more_vygody_game_screens_92ec58de83","large_more-vygody-game-screens.jpg",71.58,563,71577,{"ext":34,"url":492,"hash":493,"mime":37,"name":494,"path":16,"size":495,"width":48,"height":496,"sizeInBytes":497},"\u002Fuploads\u002Fsmall_more_vygody_game_screens_92ec58de83.jpg","small_more_vygody_game_screens_92ec58de83","small_more-vygody-game-screens.jpg",26.4,281,26401,{"ext":34,"url":499,"hash":500,"mime":37,"name":501,"path":16,"size":502,"width":56,"height":503,"sizeInBytes":504},"\u002Fuploads\u002Fmedium_more_vygody_game_screens_92ec58de83.jpg","medium_more_vygody_game_screens_92ec58de83","medium_more-vygody-game-screens.jpg",45.95,422,45954,{"ext":34,"url":506,"hash":507,"mime":37,"name":508,"path":16,"size":509,"width":64,"height":289,"sizeInBytes":510},"\u002Fuploads\u002Fthumbnail_more_vygody_game_screens_92ec58de83.jpg","thumbnail_more_vygody_game_screens_92ec58de83","thumbnail_more-vygody-game-screens.jpg",8.6,8600,"more_vygody_game_screens_92ec58de83",229.3,"\u002Fuploads\u002Fmore_vygody_game_screens_92ec58de83.jpg","2026-10-26T22:31:59.426Z",{"id":516,"caption":517,"image":518},18,"Player event analytics and the game's promo page",{"id":475,"documentId":519,"name":520,"alternativeText":521,"caption":16,"focalPoint":16,"width":409,"height":482,"formats":522,"hash":547,"ext":34,"mime":37,"size":548,"url":549,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":550,"updatedAt":550,"publishedAt":550},"m36xo0unxbphyfzq89hu3wfo","more-vygody-analytics.jpg","Аналитика событий игрока и промо-страница игры",{"large":523,"small":529,"medium":535,"thumbnail":541},{"ext":34,"url":524,"hash":525,"mime":37,"name":526,"path":16,"size":527,"width":40,"height":489,"sizeInBytes":528},"\u002Fuploads\u002Flarge_more_vygody_analytics_d9357f34fa.jpg","large_more_vygody_analytics_d9357f34fa","large_more-vygody-analytics.jpg",51.25,51251,{"ext":34,"url":530,"hash":531,"mime":37,"name":532,"path":16,"size":533,"width":48,"height":496,"sizeInBytes":534},"\u002Fuploads\u002Fsmall_more_vygody_analytics_d9357f34fa.jpg","small_more_vygody_analytics_d9357f34fa","small_more-vygody-analytics.jpg",17.75,17754,{"ext":34,"url":536,"hash":537,"mime":37,"name":538,"path":16,"size":539,"width":56,"height":503,"sizeInBytes":540},"\u002Fuploads\u002Fmedium_more_vygody_analytics_d9357f34fa.jpg","medium_more_vygody_analytics_d9357f34fa","medium_more-vygody-analytics.jpg",32.96,32960,{"ext":34,"url":542,"hash":543,"mime":37,"name":544,"path":16,"size":545,"width":64,"height":289,"sizeInBytes":546},"\u002Fuploads\u002Fthumbnail_more_vygody_analytics_d9357f34fa.jpg","thumbnail_more_vygody_analytics_d9357f34fa","thumbnail_more-vygody-analytics.jpg",6.11,6109,"more_vygody_analytics_d9357f34fa",179.12,"\u002Fuploads\u002Fmore_vygody_analytics_d9357f34fa.jpg","2026-10-26T22:31:59.577Z",{"id":552,"metaTitle":553,"metaDescription":554,"canonical":16,"noIndex":77,"ogImage":16},55,"Web game for Alfa-Bank's loyalty programme in a WebView","Development of the “Sea of Benefits” game on Vue.js and Laravel: a quiz, fishing with prizes, collections and event analytics.",{"id":556,"documentId":557,"title":558,"slug":559,"order":195,"lede":560,"desc":560,"collab":113,"clientName":561,"kind":562,"stack":563,"site":307,"noSiteText":564,"task":565,"result":566,"createdAt":567,"updatedAt":568,"publishedAt":569,"locale":11,"tags":570,"formats":576,"points":577,"slides":584,"cover":623,"coverSettings":629,"taskList":630,"done":631,"gallery":642,"seo":643},51,"qdeu7079nihj4cfspmqsvnx0","Calculators and services for an insurance company","raiffeisen","As part of support we improved the website and systems: the insured-event form and the policy issuing flow.","Raiffeisen Life","Calculators and services","1C-Bitrix, Native Frontend","Link no longer public","\u003Cp>Improve the insurer's website and internal services as part of support: simplify the insured-event form and update the policy issuing flow so the price on the site matches the price in the contract.\u003C\u002Fp>","Over a year of support we updated the main flows, the insured-event form and the policy issuing mechanism; the insurer's website and services keep evolving.","2026-10-27T11:56:46.153Z","2026-10-28T01:53:58.578Z","2026-10-28T01:53:58.669Z",[571,573],{"id":572,"label":561},483,{"id":574,"label":575},484,"Insurance",[],[578,581],{"id":579,"text":580},387,"Policy calculators",{"id":582,"text":583},388,"Insured-event scenarios",[585],{"id":516,"documentId":586,"name":587,"alternativeText":588,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":591,"hash":619,"ext":593,"mime":596,"size":620,"url":621,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":622,"updatedAt":622,"publishedAt":622},"erkuhx09vnbzhocyritt9cga","raiffeisen-laptop.webp","Калькуляторы и сервисы для страховой компании",1536,864,{"large":592,"small":601,"medium":607,"thumbnail":613},{"ext":593,"url":594,"hash":595,"mime":596,"name":597,"path":16,"size":598,"width":40,"height":599,"sizeInBytes":600},".webp","\u002Fuploads\u002Flarge_raiffeisen_laptop_8eebfcc8da.webp","large_raiffeisen_laptop_8eebfcc8da","image\u002Fwebp","large_raiffeisen-laptop.webp",25.82,562,25824,{"ext":593,"url":602,"hash":603,"mime":596,"name":604,"path":16,"size":605,"width":48,"height":496,"sizeInBytes":606},"\u002Fuploads\u002Fsmall_raiffeisen_laptop_8eebfcc8da.webp","small_raiffeisen_laptop_8eebfcc8da","small_raiffeisen-laptop.webp",10.66,10658,{"ext":593,"url":608,"hash":609,"mime":596,"name":610,"path":16,"size":611,"width":56,"height":503,"sizeInBytes":612},"\u002Fuploads\u002Fmedium_raiffeisen_laptop_8eebfcc8da.webp","medium_raiffeisen_laptop_8eebfcc8da","medium_raiffeisen-laptop.webp",18.15,18152,{"ext":593,"url":614,"hash":615,"mime":596,"name":616,"path":16,"size":617,"width":64,"height":293,"sizeInBytes":618},"\u002Fuploads\u002Fthumbnail_raiffeisen_laptop_8eebfcc8da.webp","thumbnail_raiffeisen_laptop_8eebfcc8da","thumbnail_raiffeisen-laptop.webp",4.4,4396,"raiffeisen_laptop_8eebfcc8da",48.37,"\u002Fuploads\u002Fraiffeisen_laptop_8eebfcc8da.webp","2026-10-26T22:31:59.820Z",{"id":516,"documentId":586,"name":587,"alternativeText":588,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":624,"hash":619,"ext":593,"mime":596,"size":620,"url":621,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":622,"updatedAt":622,"publishedAt":622},{"large":625,"small":626,"medium":627,"thumbnail":628},{"ext":593,"url":594,"hash":595,"mime":596,"name":597,"path":16,"size":598,"width":40,"height":599,"sizeInBytes":600},{"ext":593,"url":602,"hash":603,"mime":596,"name":604,"path":16,"size":605,"width":48,"height":496,"sizeInBytes":606},{"ext":593,"url":608,"hash":609,"mime":596,"name":610,"path":16,"size":611,"width":56,"height":503,"sizeInBytes":612},{"ext":593,"url":614,"hash":615,"mime":596,"name":616,"path":16,"size":617,"width":64,"height":293,"sizeInBytes":618},{"id":556,"ratio":307,"position":450,"scale":216},[],[632,634,636,639],{"id":633,"text":580},389,{"id":635,"text":583},390,{"id":637,"text":638},391,"Insured-event form",{"id":640,"text":641},392,"Policy issuing on the website",[],{"id":644,"metaTitle":645,"metaDescription":646,"canonical":16,"noIndex":77,"ogImage":16},117,"Policy calculators and services for the insurer Raiffeisen Life","Support of an insurance website on 1C-Bitrix: insured-event form, online policy issuing, calculators.",{"id":648,"documentId":649,"title":650,"slug":651,"order":4,"lede":652,"desc":652,"collab":113,"clientName":332,"kind":333,"stack":334,"site":307,"noSiteText":335,"task":653,"result":654,"createdAt":655,"updatedAt":656,"publishedAt":657,"locale":11,"tags":658,"formats":663,"points":672,"slides":682,"cover":721,"coverSettings":727,"taskList":728,"done":729,"gallery":745,"seo":746},44,"mdr5m390jta7okrng52xusvy","A quiz that recommends the Alfa card","atlas","A web quiz game with card-swipe mechanics that unlocks locations as you progress.","\u003Cp>Build a game around geographic locations: the player answers a series of questions about one of them, and a successful session unlocks a new location the next day. Track key events and player behaviour to improve the game experience.\u003C\u002Fp>","The game runs inside the bank's app: the swipe quiz brings players back every day for a new location, and key event analytics shows where the problems are and whether customers reach the card recommendation.","2026-10-27T11:56:46.202Z","2026-10-27T12:27:43.517Z","2026-10-27T12:27:43.532Z",[659,660,662],{"id":140,"label":332},{"id":142,"label":661},"“Atlas”",{"id":145,"label":346},[664,666,668,670],{"id":665,"label":349},190,{"id":667,"label":351},191,{"id":669,"label":353},192,{"id":671,"label":355},193,[673,676,679],{"id":674,"text":675},331,"Questions about geographic locations, answered with a swipe",{"id":677,"text":678},332,"A new location unlocks the day after a successful session",{"id":680,"text":681},333,"Behaviour and key event analytics",[683],{"id":684,"documentId":685,"name":686,"alternativeText":687,"caption":16,"focalPoint":16,"width":688,"height":689,"formats":690,"hash":717,"ext":34,"mime":37,"size":718,"url":719,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":720,"updatedAt":720,"publishedAt":720},19,"r9g8z3qtrbtt8g088945ng5m","alfa-atlas.jpg","Квиз для рекомендаций Альфа-карты",1024,537,{"large":691,"small":698,"medium":704,"thumbnail":711},{"ext":34,"url":692,"hash":693,"mime":37,"name":694,"path":16,"size":695,"width":40,"height":696,"sizeInBytes":697},"\u002Fuploads\u002Flarge_alfa_atlas_ddebcb2aae.jpg","large_alfa_atlas_ddebcb2aae","large_alfa-atlas.jpg",64.51,524,64513,{"ext":34,"url":699,"hash":700,"mime":37,"name":701,"path":16,"size":702,"width":48,"height":388,"sizeInBytes":703},"\u002Fuploads\u002Fsmall_alfa_atlas_ddebcb2aae.jpg","small_alfa_atlas_ddebcb2aae","small_alfa-atlas.jpg",21.24,21237,{"ext":34,"url":705,"hash":706,"mime":37,"name":707,"path":16,"size":708,"width":56,"height":709,"sizeInBytes":710},"\u002Fuploads\u002Fmedium_alfa_atlas_ddebcb2aae.jpg","medium_alfa_atlas_ddebcb2aae","medium_alfa-atlas.jpg",39.63,393,39627,{"ext":34,"url":712,"hash":713,"mime":37,"name":714,"path":16,"size":715,"width":64,"height":254,"sizeInBytes":716},"\u002Fuploads\u002Fthumbnail_alfa_atlas_ddebcb2aae.jpg","thumbnail_alfa_atlas_ddebcb2aae","thumbnail_alfa-atlas.jpg",6.97,6969,"alfa_atlas_ddebcb2aae",67.37,"\u002Fuploads\u002Falfa_atlas_ddebcb2aae.jpg","2026-10-26T22:31:59.898Z",{"id":684,"documentId":685,"name":686,"alternativeText":687,"caption":16,"focalPoint":16,"width":688,"height":689,"formats":722,"hash":717,"ext":34,"mime":37,"size":718,"url":719,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":720,"updatedAt":720,"publishedAt":720},{"large":723,"small":724,"medium":725,"thumbnail":726},{"ext":34,"url":692,"hash":693,"mime":37,"name":694,"path":16,"size":695,"width":40,"height":696,"sizeInBytes":697},{"ext":34,"url":699,"hash":700,"mime":37,"name":701,"path":16,"size":702,"width":48,"height":388,"sizeInBytes":703},{"ext":34,"url":705,"hash":706,"mime":37,"name":707,"path":16,"size":708,"width":56,"height":709,"sizeInBytes":710},{"ext":34,"url":712,"hash":713,"mime":37,"name":714,"path":16,"size":715,"width":64,"height":254,"sizeInBytes":716},{"id":648,"ratio":307,"position":450,"scale":216},[],[730,732,735,737,739,742],{"id":731,"text":458},334,{"id":733,"text":734},335,"Card swipe animation",{"id":736,"text":464},336,{"id":738,"text":467},337,{"id":740,"text":741},338,"Game session analytics",{"id":743,"text":744},339,"Managed content",[],{"id":747,"metaTitle":748,"metaDescription":749,"canonical":16,"noIndex":77,"ogImage":16},56,"A quiz game for a bank in a WebView: development on Vue.js and Laravel","The “Atlas” game for Alfa-Bank: a swipe quiz across locations, daily player returns, key event analytics.",{"id":552,"documentId":751,"title":752,"slug":753,"order":134,"lede":754,"desc":754,"collab":113,"clientName":755,"kind":756,"stack":305,"site":757,"noSiteText":307,"task":758,"result":759,"createdAt":760,"updatedAt":761,"publishedAt":762,"locale":11,"tags":763,"formats":772,"points":784,"slides":791,"cover":826,"coverSettings":832,"taskList":833,"done":834,"gallery":853,"seo":854},"tq1mf6bpc2x9nk1gfgzkdzh6","Creative frontend for the Heritage art gallery","heritage","The site presents exhibitions, a catalogue of pieces and online purchase through a cart.","Heritage","Showcase website and store","https:\u002F\u002Fheritage-gallery.ru\u002F","\u003Cp>Develop an animated frontend for an art gallery website from the designs of 22 functional pages.\u003C\u002Fp>\n\u003Cp>The pages should let the audience learn more about an exhibition and explore and buy the available pieces.\u003C\u002Fp>\n\u003Cp>Provide responsiveness, multiple languages and a convenient catalogue filtering system.\u003C\u002Fp>","22 pages in total with animations, a filtered catalogue, a cart and multiple languages. The layout is fluid, so exhibitions and pieces look predictable on any device, from a phone to a wide monitor.","2026-10-27T11:56:46.260Z","2026-10-28T01:53:59.295Z","2026-10-28T01:53:59.369Z",[764,766,769],{"id":765,"label":755},492,{"id":767,"label":768},493,"Art gallery",{"id":770,"label":771},494,"Culture",[773,776,779,781],{"id":774,"label":775},495,"Commercial development",{"id":777,"label":778},496,"Showcase website",{"id":780,"label":353},497,{"id":782,"label":783},498,"Development",[785,788],{"id":786,"text":787},426,"22 functional pages",{"id":789,"text":790},427,"Catalogue with a filter and a cart",[792],{"id":793,"documentId":794,"name":795,"alternativeText":796,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":797,"hash":822,"ext":34,"mime":37,"size":823,"url":824,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":825,"updatedAt":825,"publishedAt":825},20,"bcrmlyyf9imr22aox6kntczr","heritage-gallery.jpg","Креативный фронтенд для арт-галереи Эритаж",{"large":798,"small":804,"medium":810,"thumbnail":816},{"ext":34,"url":799,"hash":800,"mime":37,"name":801,"path":16,"size":802,"width":40,"height":41,"sizeInBytes":803},"\u002Fuploads\u002Flarge_heritage_gallery_29a47e9a87.jpg","large_heritage_gallery_29a47e9a87","large_heritage-gallery.jpg",48.83,48827,{"ext":34,"url":805,"hash":806,"mime":37,"name":807,"path":16,"size":808,"width":48,"height":388,"sizeInBytes":809},"\u002Fuploads\u002Fsmall_heritage_gallery_29a47e9a87.jpg","small_heritage_gallery_29a47e9a87","small_heritage-gallery.jpg",18.56,18563,{"ext":34,"url":811,"hash":812,"mime":37,"name":813,"path":16,"size":814,"width":56,"height":57,"sizeInBytes":815},"\u002Fuploads\u002Fmedium_heritage_gallery_29a47e9a87.jpg","medium_heritage_gallery_29a47e9a87","medium_heritage-gallery.jpg",32.86,32860,{"ext":34,"url":817,"hash":818,"mime":37,"name":819,"path":16,"size":820,"width":64,"height":254,"sizeInBytes":821},"\u002Fuploads\u002Fthumbnail_heritage_gallery_29a47e9a87.jpg","thumbnail_heritage_gallery_29a47e9a87","thumbnail_heritage-gallery.jpg",6.88,6884,"heritage_gallery_29a47e9a87",85.89,"\u002Fuploads\u002Fheritage_gallery_29a47e9a87.jpg","2026-10-26T22:31:59.999Z",{"id":793,"documentId":794,"name":795,"alternativeText":796,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":827,"hash":822,"ext":34,"mime":37,"size":823,"url":824,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":825,"updatedAt":825,"publishedAt":825},{"large":828,"small":829,"medium":830,"thumbnail":831},{"ext":34,"url":799,"hash":800,"mime":37,"name":801,"path":16,"size":802,"width":40,"height":41,"sizeInBytes":803},{"ext":34,"url":805,"hash":806,"mime":37,"name":807,"path":16,"size":808,"width":48,"height":388,"sizeInBytes":809},{"ext":34,"url":811,"hash":812,"mime":37,"name":813,"path":16,"size":814,"width":56,"height":57,"sizeInBytes":815},{"ext":34,"url":817,"hash":818,"mime":37,"name":819,"path":16,"size":820,"width":64,"height":254,"sizeInBytes":821},{"id":552,"ratio":307,"position":450,"scale":216},[],[835,838,841,844,847,850],{"id":836,"text":837},428,"CMS-ready markup",{"id":839,"text":840},429,"Web animation",{"id":842,"text":843},430,"Catalogue with a filter",{"id":845,"text":846},431,"Cart functionality",{"id":848,"text":849},432,"Multiple languages",{"id":851,"text":852},433,"Responsive layout",[],{"id":855,"metaTitle":856,"metaDescription":857,"canonical":16,"noIndex":77,"ogImage":16},122,"An art gallery website with a catalogue and online purchase: frontend development","22 pages with GSAP animation, a filtered catalogue, a cart, multiple languages and a fluid layout for the Heritage gallery.",{"id":747,"documentId":859,"title":860,"slug":861,"order":862,"lede":863,"desc":863,"collab":113,"clientName":864,"kind":865,"stack":866,"site":867,"noSiteText":307,"task":868,"result":869,"createdAt":870,"updatedAt":871,"publishedAt":872,"locale":11,"tags":873,"formats":881,"points":891,"slides":901,"cover":937,"coverSettings":943,"taskList":944,"done":945,"gallery":959,"seo":960},"lk30ochj0lodm4n4putc256c","HR pages for Rostelecom","rostelecom",7,"An animated website for the company's HR division and collecting applications.","Rostelecom","HR services website","Nuxt 3, Sendmail, CSS3 Animation, GreenSock Animation","https:\u002F\u002Fdev.rostelecom-hr.wespot.ru\u002F","\u003Cp>Develop an animated website for the HR division from the designs.\u003C\u002Fp>\n\u003Cp>Build several pages for different audience segments: tell about the benefits of working at the company and let an applicant submit their profile for review with a city choice.\u003C\u002Fp>","The animated HR pages launched on a tight deadline: every audience segment sees its own benefits of working at Rostelecom, and applications arrive linked to the chosen city.","2026-10-27T11:56:46.315Z","2026-10-28T01:53:59.465Z","2026-10-28T01:53:59.524Z",[874,876,878],{"id":875,"label":864},499,{"id":48,"label":877},"HR",{"id":879,"label":880},501,"Telecom",[882,884,886,888],{"id":883,"label":775},502,{"id":885,"label":865},503,{"id":887,"label":353},504,{"id":889,"label":890},505,"Frontend",[892,895,898],{"id":893,"text":894},434,"Delivered on a tight deadline and a limited budget",{"id":896,"text":897},435,"Separate pages for different audience segments",{"id":899,"text":900},436,"Applicant form with a city choice",[902],{"id":903,"documentId":904,"name":905,"alternativeText":906,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":907,"hash":932,"ext":34,"mime":37,"size":933,"url":934,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":935,"updatedAt":935,"publishedAt":936},21,"ibfb5rgfvr7tbiryetohgtuk","rostelecom-hr.jpg","HR-страницы для Ростелекома",{"large":908,"small":914,"medium":920,"thumbnail":926},{"ext":34,"url":909,"hash":910,"mime":37,"name":911,"path":16,"size":912,"width":40,"height":41,"sizeInBytes":913},"\u002Fuploads\u002Flarge_rostelecom_hr_27bd7a1d89.jpg","large_rostelecom_hr_27bd7a1d89","large_rostelecom-hr.jpg",38.27,38267,{"ext":34,"url":915,"hash":916,"mime":37,"name":917,"path":16,"size":918,"width":48,"height":388,"sizeInBytes":919},"\u002Fuploads\u002Fsmall_rostelecom_hr_27bd7a1d89.jpg","small_rostelecom_hr_27bd7a1d89","small_rostelecom-hr.jpg",15.39,15390,{"ext":34,"url":921,"hash":922,"mime":37,"name":923,"path":16,"size":924,"width":56,"height":57,"sizeInBytes":925},"\u002Fuploads\u002Fmedium_rostelecom_hr_27bd7a1d89.jpg","medium_rostelecom_hr_27bd7a1d89","medium_rostelecom-hr.jpg",26.16,26163,{"ext":34,"url":927,"hash":928,"mime":37,"name":929,"path":16,"size":930,"width":64,"height":254,"sizeInBytes":931},"\u002Fuploads\u002Fthumbnail_rostelecom_hr_27bd7a1d89.jpg","thumbnail_rostelecom_hr_27bd7a1d89","thumbnail_rostelecom-hr.jpg",5.83,5829,"rostelecom_hr_27bd7a1d89",65.3,"\u002Fuploads\u002Frostelecom_hr_27bd7a1d89.jpg","2026-10-26T22:32:00.115Z","2026-10-26T22:32:00.116Z",{"id":903,"documentId":904,"name":905,"alternativeText":906,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":938,"hash":932,"ext":34,"mime":37,"size":933,"url":934,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":935,"updatedAt":935,"publishedAt":936},{"large":939,"small":940,"medium":941,"thumbnail":942},{"ext":34,"url":909,"hash":910,"mime":37,"name":911,"path":16,"size":912,"width":40,"height":41,"sizeInBytes":913},{"ext":34,"url":915,"hash":916,"mime":37,"name":917,"path":16,"size":918,"width":48,"height":388,"sizeInBytes":919},{"ext":34,"url":921,"hash":922,"mime":37,"name":923,"path":16,"size":924,"width":56,"height":57,"sizeInBytes":925},{"ext":34,"url":927,"hash":928,"mime":37,"name":929,"path":16,"size":930,"width":64,"height":254,"sizeInBytes":931},{"id":747,"ratio":307,"position":450,"scale":216},[],[946,949,951,954,956],{"id":947,"text":948},437,"Pages for different audience segments",{"id":950,"text":840},438,{"id":952,"text":953},439,"Application form by city",{"id":955,"text":458},440,{"id":957,"text":958},441,"Fully responsive layout",[],{"id":961,"metaTitle":962,"metaDescription":963,"canonical":16,"noIndex":77,"ogImage":16},123,"An HR website for Rostelecom on Nuxt with animation and an application form","Animated pages for applicant segments, applications with a city choice. Built on Nuxt 3 and GSAP.",{"id":965,"documentId":966,"title":967,"slug":968,"order":969,"lede":970,"desc":970,"collab":113,"clientName":971,"kind":972,"stack":973,"site":974,"noSiteText":307,"task":975,"result":976,"createdAt":977,"updatedAt":978,"publishedAt":979,"locale":11,"tags":980,"formats":989,"points":996,"slides":1003,"cover":1110,"coverSettings":1116,"taskList":1117,"done":1118,"gallery":1136,"seo":1151},47,"ooxg56w21e9uft4wk5oh2x7o","Launch landing page for Splat Biohack+","splat",8,"Build awareness of the new brand among customers and reveal its unique selling points.","SPLAT","Product page","Nuxt 3, Wordpress (Headless), GraphQL","https:\u002F\u002Fwww.splatbiohack.com\u002F","\u003Cp>Develop a landing page for the BIOHACK+ launch on a tight deadline together with the design team.\u003C\u002Fp>\n\u003Cp>Make the page editable: the client's team must manage the content themselves, add new products and manage marketplace links for a quick purchase.\u003C\u002Fp>","The landing page launched on time for the product start: the SPLAT team updates content, adds products and marketplace links through the content management system without developers.","2026-10-27T11:56:46.392Z","2026-10-27T12:27:43.627Z","2026-10-27T12:27:43.642Z",[981,983,986],{"id":982,"label":971},208,{"id":984,"label":985},209,"BIOHACK+",{"id":987,"label":988},210,"FMCG",[990,992,994],{"id":991,"label":775},211,{"id":993,"label":972},212,{"id":995,"label":783},213,[997,1000],{"id":998,"text":999},356,"Parallax animation, content from a CMS",{"id":1001,"text":1002},357,"Marketplace links for a quick purchase",[1004,1038,1078],{"id":1005,"documentId":1006,"name":1007,"alternativeText":1008,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1009,"hash":1034,"ext":34,"mime":37,"size":1035,"url":1036,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1037,"updatedAt":1037,"publishedAt":1037},22,"eliis544sttmp6mn8ktgcvt2","splat-biohack.jpg","Лендинг для запуска продукта Splat Biohack+",{"large":1010,"small":1016,"medium":1022,"thumbnail":1028},{"ext":34,"url":1011,"hash":1012,"mime":37,"name":1013,"path":16,"size":1014,"width":40,"height":41,"sizeInBytes":1015},"\u002Fuploads\u002Flarge_splat_biohack_f6f5447ce0.jpg","large_splat_biohack_f6f5447ce0","large_splat-biohack.jpg",64.42,64418,{"ext":34,"url":1017,"hash":1018,"mime":37,"name":1019,"path":16,"size":1020,"width":48,"height":388,"sizeInBytes":1021},"\u002Fuploads\u002Fsmall_splat_biohack_f6f5447ce0.jpg","small_splat_biohack_f6f5447ce0","small_splat-biohack.jpg",22.65,22645,{"ext":34,"url":1023,"hash":1024,"mime":37,"name":1025,"path":16,"size":1026,"width":56,"height":57,"sizeInBytes":1027},"\u002Fuploads\u002Fmedium_splat_biohack_f6f5447ce0.jpg","medium_splat_biohack_f6f5447ce0","medium_splat-biohack.jpg",42.1,42097,{"ext":34,"url":1029,"hash":1030,"mime":37,"name":1031,"path":16,"size":1032,"width":64,"height":254,"sizeInBytes":1033},"\u002Fuploads\u002Fthumbnail_splat_biohack_f6f5447ce0.jpg","thumbnail_splat_biohack_f6f5447ce0","thumbnail_splat-biohack.jpg",7.37,7365,"splat_biohack_f6f5447ce0",116.95,"\u002Fuploads\u002Fsplat_biohack_f6f5447ce0.jpg","2026-10-26T22:32:00.226Z",{"id":1039,"documentId":1040,"name":1041,"alternativeText":1008,"caption":16,"focalPoint":16,"width":688,"height":1042,"formats":1043,"hash":1073,"ext":1045,"mime":1048,"size":1074,"url":1075,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1076,"updatedAt":1076,"publishedAt":1077},23,"bodqv5hatwvh1g4wy89b9ett","splat-magnesium.png",532,{"large":1044,"small":1053,"medium":1060,"thumbnail":1066},{"ext":1045,"url":1046,"hash":1047,"mime":1048,"name":1049,"path":16,"size":1050,"width":40,"height":1051,"sizeInBytes":1052},".png","\u002Fuploads\u002Flarge_splat_magnesium_07bb9f39c6.png","large_splat_magnesium_07bb9f39c6","image\u002Fpng","large_splat-magnesium.png",40.31,520,40314,{"ext":1045,"url":1054,"hash":1055,"mime":1048,"name":1056,"path":16,"size":1057,"width":48,"height":1058,"sizeInBytes":1059},"\u002Fuploads\u002Fsmall_splat_magnesium_07bb9f39c6.png","small_splat_magnesium_07bb9f39c6","small_splat-magnesium.png",13.8,260,13803,{"ext":1045,"url":1061,"hash":1062,"mime":1048,"name":1063,"path":16,"size":1064,"width":56,"height":635,"sizeInBytes":1065},"\u002Fuploads\u002Fmedium_splat_magnesium_07bb9f39c6.png","medium_splat_magnesium_07bb9f39c6","medium_splat-magnesium.png",25.37,25373,{"ext":1045,"url":1067,"hash":1068,"mime":1048,"name":1069,"path":16,"size":1070,"width":64,"height":1071,"sizeInBytes":1072},"\u002Fuploads\u002Fthumbnail_splat_magnesium_07bb9f39c6.png","thumbnail_splat_magnesium_07bb9f39c6","thumbnail_splat-magnesium.png",4.8,127,4798,"splat_magnesium_07bb9f39c6",41.3,"\u002Fuploads\u002Fsplat_magnesium_07bb9f39c6.png","2026-10-26T22:32:00.279Z","2026-10-26T22:32:00.280Z",{"id":1079,"documentId":1080,"name":1081,"alternativeText":1008,"caption":16,"focalPoint":16,"width":688,"height":1042,"formats":1082,"hash":1106,"ext":1045,"mime":1048,"size":1107,"url":1108,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1109,"updatedAt":1109,"publishedAt":1109},24,"wlwhiy6u9tmsf2l4wyu9wwlj","splat-feedback.png",{"large":1083,"small":1089,"medium":1095,"thumbnail":1101},{"ext":1045,"url":1084,"hash":1085,"mime":1048,"name":1086,"path":16,"size":1087,"width":40,"height":1051,"sizeInBytes":1088},"\u002Fuploads\u002Flarge_splat_feedback_b44a81f2c5.png","large_splat_feedback_b44a81f2c5","large_splat-feedback.png",52.11,52110,{"ext":1045,"url":1090,"hash":1091,"mime":1048,"name":1092,"path":16,"size":1093,"width":48,"height":1058,"sizeInBytes":1094},"\u002Fuploads\u002Fsmall_splat_feedback_b44a81f2c5.png","small_splat_feedback_b44a81f2c5","small_splat-feedback.png",16.91,16913,{"ext":1045,"url":1096,"hash":1097,"mime":1048,"name":1098,"path":16,"size":1099,"width":56,"height":635,"sizeInBytes":1100},"\u002Fuploads\u002Fmedium_splat_feedback_b44a81f2c5.png","medium_splat_feedback_b44a81f2c5","medium_splat-feedback.png",32.02,32016,{"ext":1045,"url":1102,"hash":1103,"mime":1048,"name":1104,"path":16,"size":168,"width":64,"height":1071,"sizeInBytes":1105},"\u002Fuploads\u002Fthumbnail_splat_feedback_b44a81f2c5.png","thumbnail_splat_feedback_b44a81f2c5","thumbnail_splat-feedback.png",5613,"splat_feedback_b44a81f2c5",55.04,"\u002Fuploads\u002Fsplat_feedback_b44a81f2c5.png","2026-10-26T22:32:00.335Z",{"id":1005,"documentId":1006,"name":1007,"alternativeText":1008,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1111,"hash":1034,"ext":34,"mime":37,"size":1035,"url":1036,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1037,"updatedAt":1037,"publishedAt":1037},{"large":1112,"small":1113,"medium":1114,"thumbnail":1115},{"ext":34,"url":1011,"hash":1012,"mime":37,"name":1013,"path":16,"size":1014,"width":40,"height":41,"sizeInBytes":1015},{"ext":34,"url":1017,"hash":1018,"mime":37,"name":1019,"path":16,"size":1020,"width":48,"height":388,"sizeInBytes":1021},{"ext":34,"url":1023,"hash":1024,"mime":37,"name":1025,"path":16,"size":1026,"width":56,"height":57,"sizeInBytes":1027},{"ext":34,"url":1029,"hash":1030,"mime":37,"name":1031,"path":16,"size":1032,"width":64,"height":254,"sizeInBytes":1033},{"id":965,"ratio":307,"position":450,"scale":216},[],[1119,1122,1125,1128,1130,1133],{"id":1120,"text":1121},358,"Scroll parallax animation on GSAP",{"id":1123,"text":1124},359,"Editable page through a CMS",{"id":1126,"text":1127},360,"Product cards with marketplace links",{"id":1129,"text":458},361,{"id":1131,"text":1132},362,"Form with data validation",{"id":1134,"text":1135},363,"Fluid layout",[1137,1144],{"id":684,"caption":307,"image":1138},{"id":1039,"documentId":1040,"name":1041,"alternativeText":1008,"caption":16,"focalPoint":16,"width":688,"height":1042,"formats":1139,"hash":1073,"ext":1045,"mime":1048,"size":1074,"url":1075,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1076,"updatedAt":1076,"publishedAt":1077},{"large":1140,"small":1141,"medium":1142,"thumbnail":1143},{"ext":1045,"url":1046,"hash":1047,"mime":1048,"name":1049,"path":16,"size":1050,"width":40,"height":1051,"sizeInBytes":1052},{"ext":1045,"url":1054,"hash":1055,"mime":1048,"name":1056,"path":16,"size":1057,"width":48,"height":1058,"sizeInBytes":1059},{"ext":1045,"url":1061,"hash":1062,"mime":1048,"name":1063,"path":16,"size":1064,"width":56,"height":635,"sizeInBytes":1065},{"ext":1045,"url":1067,"hash":1068,"mime":1048,"name":1069,"path":16,"size":1070,"width":64,"height":1071,"sizeInBytes":1072},{"id":793,"caption":307,"image":1145},{"id":1079,"documentId":1080,"name":1081,"alternativeText":1008,"caption":16,"focalPoint":16,"width":688,"height":1042,"formats":1146,"hash":1106,"ext":1045,"mime":1048,"size":1107,"url":1108,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1109,"updatedAt":1109,"publishedAt":1109},{"large":1147,"small":1148,"medium":1149,"thumbnail":1150},{"ext":1045,"url":1084,"hash":1085,"mime":1048,"name":1086,"path":16,"size":1087,"width":40,"height":1051,"sizeInBytes":1088},{"ext":1045,"url":1090,"hash":1091,"mime":1048,"name":1092,"path":16,"size":1093,"width":48,"height":1058,"sizeInBytes":1094},{"ext":1045,"url":1096,"hash":1097,"mime":1048,"name":1098,"path":16,"size":1099,"width":56,"height":635,"sizeInBytes":1100},{"ext":1045,"url":1102,"hash":1103,"mime":1048,"name":1104,"path":16,"size":168,"width":64,"height":1071,"sizeInBytes":1105},{"id":1152,"metaTitle":1153,"metaDescription":1154,"canonical":16,"noIndex":77,"ogImage":16},59,"A product launch landing page on Nuxt and headless WordPress","The SPLAT BIOHACK+ page with GSAP parallax animation. The brand team updates products and marketplace links through the CMS themselves.",{"id":1156,"documentId":1157,"title":1158,"slug":1159,"order":1160,"lede":1161,"desc":1162,"collab":113,"clientName":1163,"kind":1164,"stack":1165,"site":1166,"noSiteText":307,"task":1167,"result":1168,"createdAt":1169,"updatedAt":1170,"publishedAt":1171,"locale":11,"tags":1172,"formats":1180,"points":1189,"slides":1190,"cover":1191,"coverSettings":1225,"taskList":1229,"done":1230,"gallery":1245,"seo":1246},57,"y3bgu9i55nsue99dr1vsqtjo","Animated pages for an HR service","career",10,"The goal was to adapt the website to the service's expanded range of products and features.","Modular pages the client's team assembles themselves.","Career.io","HR service website","React\u002FRemix, Styled components, GreenSock Animation, Contentful CMS","https:\u002F\u002Fcareer.io\u002F","\u003Cp>Together with a design studio, update the HR service website for its expanded product range: build universal pages for different audience segments.\u003C\u002Fp>\n\u003Cp>Assemble the home page with animations and move the site to reusable blocks so the client's team can build new product pages in Contentful themselves.\u003C\u002Fp>","The site now fits the expanded range of products and features: pages are assembled from reusable blocks, the home page got GSAP timeline animations, and the Career.io team builds new product pages in Contentful themselves.","2026-10-27T11:56:46.489Z","2026-10-28T01:53:59.623Z","2026-10-28T01:53:59.685Z",[1173,1175,1178],{"id":1174,"label":1163},506,{"id":1176,"label":1177},507,"HR service",{"id":1179,"label":877},508,[1181,1183,1185,1187],{"id":1182,"label":775},509,{"id":1184,"label":1164},510,{"id":1186,"label":353},511,{"id":1188,"label":783},512,[],[],{"id":1192,"documentId":1193,"name":1194,"alternativeText":1195,"caption":16,"focalPoint":16,"width":409,"height":482,"formats":1196,"hash":1221,"ext":34,"mime":37,"size":1222,"url":1223,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1224,"updatedAt":1224,"publishedAt":1224},26,"rnphb5thkn1kgo0h42mypjld","career-cover.jpg","Анимированные страницы для HR-сервиса",{"large":1197,"small":1203,"medium":1209,"thumbnail":1215},{"ext":34,"url":1198,"hash":1199,"mime":37,"name":1200,"path":16,"size":1201,"width":40,"height":489,"sizeInBytes":1202},"\u002Fuploads\u002Flarge_career_cover_0347603c8b.jpg","large_career_cover_0347603c8b","large_career-cover.jpg",62.3,62297,{"ext":34,"url":1204,"hash":1205,"mime":37,"name":1206,"path":16,"size":1207,"width":48,"height":496,"sizeInBytes":1208},"\u002Fuploads\u002Fsmall_career_cover_0347603c8b.jpg","small_career_cover_0347603c8b","small_career-cover.jpg",22.32,22324,{"ext":34,"url":1210,"hash":1211,"mime":37,"name":1212,"path":16,"size":1213,"width":56,"height":503,"sizeInBytes":1214},"\u002Fuploads\u002Fmedium_career_cover_0347603c8b.jpg","medium_career_cover_0347603c8b","medium_career-cover.jpg",40.53,40535,{"ext":34,"url":1216,"hash":1217,"mime":37,"name":1218,"path":16,"size":1219,"width":64,"height":289,"sizeInBytes":1220},"\u002Fuploads\u002Fthumbnail_career_cover_0347603c8b.jpg","thumbnail_career_cover_0347603c8b","thumbnail_career-cover.jpg",7.65,7652,"career_cover_0347603c8b",227.09,"\u002Fuploads\u002Fcareer_cover_0347603c8b.jpg","2026-10-26T22:32:00.650Z",{"id":1156,"ratio":1226,"position":1227,"scale":1228},"1693 \u002F 906","50% 80%",1.13,[],[1231,1234,1237,1240,1243],{"id":1232,"text":1233},447,"Home page and universal page templates",{"id":1235,"text":1236},448,"Timeline animations on GSAP",{"id":1238,"text":1239},449,"Modular pages from reusable blocks",{"id":1241,"text":1242},450,"Headless CMS Contentful integration",{"id":1244,"text":458},451,[],{"id":1247,"metaTitle":1248,"metaDescription":1249,"canonical":16,"noIndex":77,"ogImage":16},124,"An HR service website on React and Contentful with GSAP animation","Universal pages for Career.io: modular blocks, timeline animations; the client's team assembles pages in the CMS themselves.",{"id":297,"documentId":298,"title":299,"slug":300,"order":301,"lede":302,"desc":302,"collab":113,"clientName":303,"kind":304,"stack":305,"site":306,"noSiteText":307,"task":308,"result":309,"createdAt":310,"updatedAt":311,"publishedAt":312,"locale":11,"tags":1251,"formats":1254,"points":1255,"slides":1256,"cover":1257,"coverSettings":1291,"taskList":1292,"done":1293,"gallery":1306,"seo":1307},[1252,1253],{"id":315,"label":303},{"id":317,"label":318},[],[],[],{"id":1258,"documentId":1259,"name":1260,"alternativeText":1261,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1262,"hash":1287,"ext":34,"mime":37,"size":1288,"url":1289,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1290,"updatedAt":1290,"publishedAt":1290},27,"lm07k9exlzwo82uvkwbwvcvq","delight-site.jpg","Корпоративный сайт бренда косметики",{"large":1263,"small":1269,"medium":1275,"thumbnail":1281},{"ext":34,"url":1264,"hash":1265,"mime":37,"name":1266,"path":16,"size":1267,"width":40,"height":41,"sizeInBytes":1268},"\u002Fuploads\u002Flarge_delight_site_8c8eb1cf75.jpg","large_delight_site_8c8eb1cf75","large_delight-site.jpg",55.37,55366,{"ext":34,"url":1270,"hash":1271,"mime":37,"name":1272,"path":16,"size":1273,"width":48,"height":388,"sizeInBytes":1274},"\u002Fuploads\u002Fsmall_delight_site_8c8eb1cf75.jpg","small_delight_site_8c8eb1cf75","small_delight-site.jpg",19.44,19441,{"ext":34,"url":1276,"hash":1277,"mime":37,"name":1278,"path":16,"size":1279,"width":56,"height":57,"sizeInBytes":1280},"\u002Fuploads\u002Fmedium_delight_site_8c8eb1cf75.jpg","medium_delight_site_8c8eb1cf75","medium_delight-site.jpg",36.06,36060,{"ext":34,"url":1282,"hash":1283,"mime":37,"name":1284,"path":16,"size":1285,"width":64,"height":254,"sizeInBytes":1286},"\u002Fuploads\u002Fthumbnail_delight_site_8c8eb1cf75.jpg","thumbnail_delight_site_8c8eb1cf75","thumbnail_delight-site.jpg",6.53,6527,"delight_site_8c8eb1cf75",99.99,"\u002Fuploads\u002Fdelight_site_8c8eb1cf75.jpg","2026-10-26T22:32:00.758Z",{"id":297,"ratio":307,"position":450,"scale":216},[],[1294,1297,1300,1303],{"id":1295,"text":1296},409,"Creative front-end for WordPress",{"id":1298,"text":1299},410,"Video player and GSAP web animation",{"id":1301,"text":1302},411,"Network map on Mapbox",{"id":1304,"text":1305},412,"Fully fluid layout",[],{"id":1308,"metaTitle":1309,"metaDescription":1310,"canonical":16,"noIndex":77,"ogImage":16},120,"Creative front-end for a corporate WordPress website","The Constant Delight cosmetics brand website: fluid layout, video, GSAP animation, a salon map on Mapbox.",[],[],[],{"id":1258,"documentId":1259,"name":1260,"alternativeText":1261,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1315,"hash":1287,"ext":34,"mime":37,"size":1288,"url":1289,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1290,"updatedAt":1290,"publishedAt":1290},{"large":1316,"small":1317,"medium":1318,"thumbnail":1319},{"ext":34,"url":1264,"hash":1265,"mime":37,"name":1266,"path":16,"size":1267,"width":40,"height":41,"sizeInBytes":1268},{"ext":34,"url":1270,"hash":1271,"mime":37,"name":1272,"path":16,"size":1273,"width":48,"height":388,"sizeInBytes":1274},{"ext":34,"url":1276,"hash":1277,"mime":37,"name":1278,"path":16,"size":1279,"width":56,"height":57,"sizeInBytes":1280},{"ext":34,"url":1282,"hash":1283,"mime":37,"name":1284,"path":16,"size":1285,"width":64,"height":254,"sizeInBytes":1286},{"id":297,"ratio":307,"position":450,"scale":216},[1322],{"id":184,"documentId":1323,"label":1324,"slug":1325,"order":216,"createdAt":1326,"updatedAt":1327,"publishedAt":1328,"locale":11,"projects":1329},"lko2vn42mhotyi1l1swd5gxi","Websites and stores","sites","2026-10-27T11:54:45.708Z","2026-10-27T12:06:29.158Z","2026-10-27T12:06:29.160Z",[1330,1424,1462,1499,1536,1564],{"id":1331,"documentId":1332,"title":1333,"slug":1334,"order":225,"lede":1335,"desc":1335,"collab":77,"clientName":1336,"kind":1337,"stack":1338,"site":1339,"noSiteText":307,"task":1340,"result":1341,"createdAt":1342,"updatedAt":1343,"publishedAt":1344,"locale":11,"tags":1345,"formats":1353,"points":1354,"slides":1361,"cover":1395,"coverSettings":1401,"taskList":1402,"done":1403,"gallery":1419,"seo":1420},54,"jf35hvefa8t9rhg8jii1vxs3","Extended the online store of sports brand Vetersport","vetersport","Added bundles and discounts and sped up the site before Black Friday.","Vetersport","Online store","Redis, Nginx, 1C, S3 + CDN, Prometheus","https:\u002F\u002Fveter.cc\u002F","\u003Cp>Improve the online store of a sports equipment brand and prepare the server for sales-season load.\u003C\u002Fp>\n\u003Cp>Launch product bundles with a set discount and simplify checkout with form suggestions. Take load off the server: move files to cloud storage, set up caching and monitoring so the store runs without failures on Black Friday.\u003C\u002Fp>","The site configuration was updated for higher throughput; the store got bundles and monitoring to track problems on Black Friday.","2026-10-27T11:56:46.044Z","2026-10-28T01:53:59.108Z","2026-10-28T01:53:59.190Z",[1346,1348,1350],{"id":1347,"label":1336},489,{"id":1349,"label":1337},490,{"id":1351,"label":1352},491,"Retail",[],[1355,1358],{"id":1356,"text":1357},413,"Connected an address and data suggestion service for forms",{"id":1359,"text":1360},414,"Moved file uploads to S3 cloud storage",[1362],{"id":177,"documentId":1363,"name":1364,"alternativeText":1365,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":1366,"hash":1391,"ext":593,"mime":596,"size":1392,"url":1393,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1394,"updatedAt":1394,"publishedAt":1394},"fgctemnasxypnn1xc1g8hxy8","vetersport-laptop.webp","Расширили функционал интернет-магазина производителя Ветерспорт",{"large":1367,"small":1373,"medium":1379,"thumbnail":1385},{"ext":593,"url":1368,"hash":1369,"mime":596,"name":1370,"path":16,"size":1371,"width":40,"height":599,"sizeInBytes":1372},"\u002Fuploads\u002Flarge_vetersport_laptop_0a3b6dc2cd.webp","large_vetersport_laptop_0a3b6dc2cd","large_vetersport-laptop.webp",27.51,27514,{"ext":593,"url":1374,"hash":1375,"mime":596,"name":1376,"path":16,"size":1377,"width":48,"height":496,"sizeInBytes":1378},"\u002Fuploads\u002Fsmall_vetersport_laptop_0a3b6dc2cd.webp","small_vetersport_laptop_0a3b6dc2cd","small_vetersport-laptop.webp",12.07,12072,{"ext":593,"url":1380,"hash":1381,"mime":596,"name":1382,"path":16,"size":1383,"width":56,"height":503,"sizeInBytes":1384},"\u002Fuploads\u002Fmedium_vetersport_laptop_0a3b6dc2cd.webp","medium_vetersport_laptop_0a3b6dc2cd","medium_vetersport-laptop.webp",19.85,19848,{"ext":593,"url":1386,"hash":1387,"mime":596,"name":1388,"path":16,"size":1389,"width":64,"height":293,"sizeInBytes":1390},"\u002Fuploads\u002Fthumbnail_vetersport_laptop_0a3b6dc2cd.webp","thumbnail_vetersport_laptop_0a3b6dc2cd","thumbnail_vetersport-laptop.webp",5.21,5210,"vetersport_laptop_0a3b6dc2cd",51.76,"\u002Fuploads\u002Fvetersport_laptop_0a3b6dc2cd.webp","2026-10-26T22:31:58.988Z",{"id":177,"documentId":1363,"name":1364,"alternativeText":1365,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":1396,"hash":1391,"ext":593,"mime":596,"size":1392,"url":1393,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1394,"updatedAt":1394,"publishedAt":1394},{"large":1397,"small":1398,"medium":1399,"thumbnail":1400},{"ext":593,"url":1368,"hash":1369,"mime":596,"name":1370,"path":16,"size":1371,"width":40,"height":599,"sizeInBytes":1372},{"ext":593,"url":1374,"hash":1375,"mime":596,"name":1376,"path":16,"size":1377,"width":48,"height":496,"sizeInBytes":1378},{"ext":593,"url":1380,"hash":1381,"mime":596,"name":1382,"path":16,"size":1383,"width":56,"height":503,"sizeInBytes":1384},{"ext":593,"url":1386,"hash":1387,"mime":596,"name":1388,"path":16,"size":1389,"width":64,"height":293,"sizeInBytes":1390},{"id":1331,"ratio":307,"position":450,"scale":216},[],[1404,1407,1410,1413,1416],{"id":1405,"text":1406},415,"Product bundles with a set discount",{"id":1408,"text":1409},416,"Address and data suggestions in forms",{"id":1411,"text":1412},417,"File uploads moved to S3 with CDN delivery",{"id":1414,"text":1415},418,"Server optimisation and caching",{"id":1417,"text":1418},419,"Monitoring and failure alerts",[],{"id":1421,"metaTitle":1422,"metaDescription":1423,"canonical":16,"noIndex":77,"ogImage":16},121,"Preparing a sports equipment online store for Black Friday","Discounted bundles, S3 and CDN, caching and monitoring for the Vetersport store. The site held the sales-day load.",{"id":648,"documentId":649,"title":650,"slug":651,"order":4,"lede":652,"desc":652,"collab":113,"clientName":332,"kind":333,"stack":334,"site":307,"noSiteText":335,"task":653,"result":654,"createdAt":655,"updatedAt":656,"publishedAt":657,"locale":11,"tags":1425,"formats":1429,"points":1434,"slides":1438,"cover":1445,"coverSettings":1451,"taskList":1452,"done":1453,"gallery":1460,"seo":1461},[1426,1427,1428],{"id":140,"label":332},{"id":142,"label":661},{"id":145,"label":346},[1430,1431,1432,1433],{"id":665,"label":349},{"id":667,"label":351},{"id":669,"label":353},{"id":671,"label":355},[1435,1436,1437],{"id":674,"text":675},{"id":677,"text":678},{"id":680,"text":681},[1439],{"id":684,"documentId":685,"name":686,"alternativeText":687,"caption":16,"focalPoint":16,"width":688,"height":689,"formats":1440,"hash":717,"ext":34,"mime":37,"size":718,"url":719,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":720,"updatedAt":720,"publishedAt":720},{"large":1441,"small":1442,"medium":1443,"thumbnail":1444},{"ext":34,"url":692,"hash":693,"mime":37,"name":694,"path":16,"size":695,"width":40,"height":696,"sizeInBytes":697},{"ext":34,"url":699,"hash":700,"mime":37,"name":701,"path":16,"size":702,"width":48,"height":388,"sizeInBytes":703},{"ext":34,"url":705,"hash":706,"mime":37,"name":707,"path":16,"size":708,"width":56,"height":709,"sizeInBytes":710},{"ext":34,"url":712,"hash":713,"mime":37,"name":714,"path":16,"size":715,"width":64,"height":254,"sizeInBytes":716},{"id":684,"documentId":685,"name":686,"alternativeText":687,"caption":16,"focalPoint":16,"width":688,"height":689,"formats":1446,"hash":717,"ext":34,"mime":37,"size":718,"url":719,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":720,"updatedAt":720,"publishedAt":720},{"large":1447,"small":1448,"medium":1449,"thumbnail":1450},{"ext":34,"url":692,"hash":693,"mime":37,"name":694,"path":16,"size":695,"width":40,"height":696,"sizeInBytes":697},{"ext":34,"url":699,"hash":700,"mime":37,"name":701,"path":16,"size":702,"width":48,"height":388,"sizeInBytes":703},{"ext":34,"url":705,"hash":706,"mime":37,"name":707,"path":16,"size":708,"width":56,"height":709,"sizeInBytes":710},{"ext":34,"url":712,"hash":713,"mime":37,"name":714,"path":16,"size":715,"width":64,"height":254,"sizeInBytes":716},{"id":648,"ratio":307,"position":450,"scale":216},[],[1454,1455,1456,1457,1458,1459],{"id":731,"text":458},{"id":733,"text":734},{"id":736,"text":464},{"id":738,"text":467},{"id":740,"text":741},{"id":743,"text":744},[],{"id":747,"metaTitle":748,"metaDescription":749,"canonical":16,"noIndex":77,"ogImage":16},{"id":552,"documentId":751,"title":752,"slug":753,"order":134,"lede":754,"desc":754,"collab":113,"clientName":755,"kind":756,"stack":305,"site":757,"noSiteText":307,"task":758,"result":759,"createdAt":760,"updatedAt":761,"publishedAt":762,"locale":11,"tags":1463,"formats":1467,"points":1472,"slides":1475,"cover":1482,"coverSettings":1488,"taskList":1489,"done":1490,"gallery":1497,"seo":1498},[1464,1465,1466],{"id":765,"label":755},{"id":767,"label":768},{"id":770,"label":771},[1468,1469,1470,1471],{"id":774,"label":775},{"id":777,"label":778},{"id":780,"label":353},{"id":782,"label":783},[1473,1474],{"id":786,"text":787},{"id":789,"text":790},[1476],{"id":793,"documentId":794,"name":795,"alternativeText":796,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1477,"hash":822,"ext":34,"mime":37,"size":823,"url":824,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":825,"updatedAt":825,"publishedAt":825},{"large":1478,"small":1479,"medium":1480,"thumbnail":1481},{"ext":34,"url":799,"hash":800,"mime":37,"name":801,"path":16,"size":802,"width":40,"height":41,"sizeInBytes":803},{"ext":34,"url":805,"hash":806,"mime":37,"name":807,"path":16,"size":808,"width":48,"height":388,"sizeInBytes":809},{"ext":34,"url":811,"hash":812,"mime":37,"name":813,"path":16,"size":814,"width":56,"height":57,"sizeInBytes":815},{"ext":34,"url":817,"hash":818,"mime":37,"name":819,"path":16,"size":820,"width":64,"height":254,"sizeInBytes":821},{"id":793,"documentId":794,"name":795,"alternativeText":796,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1483,"hash":822,"ext":34,"mime":37,"size":823,"url":824,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":825,"updatedAt":825,"publishedAt":825},{"large":1484,"small":1485,"medium":1486,"thumbnail":1487},{"ext":34,"url":799,"hash":800,"mime":37,"name":801,"path":16,"size":802,"width":40,"height":41,"sizeInBytes":803},{"ext":34,"url":805,"hash":806,"mime":37,"name":807,"path":16,"size":808,"width":48,"height":388,"sizeInBytes":809},{"ext":34,"url":811,"hash":812,"mime":37,"name":813,"path":16,"size":814,"width":56,"height":57,"sizeInBytes":815},{"ext":34,"url":817,"hash":818,"mime":37,"name":819,"path":16,"size":820,"width":64,"height":254,"sizeInBytes":821},{"id":552,"ratio":307,"position":450,"scale":216},[],[1491,1492,1493,1494,1495,1496],{"id":836,"text":837},{"id":839,"text":840},{"id":842,"text":843},{"id":845,"text":846},{"id":848,"text":849},{"id":851,"text":852},[],{"id":855,"metaTitle":856,"metaDescription":857,"canonical":16,"noIndex":77,"ogImage":16},{"id":747,"documentId":859,"title":860,"slug":861,"order":862,"lede":863,"desc":863,"collab":113,"clientName":864,"kind":865,"stack":866,"site":867,"noSiteText":307,"task":868,"result":869,"createdAt":870,"updatedAt":871,"publishedAt":872,"locale":11,"tags":1500,"formats":1504,"points":1509,"slides":1513,"cover":1520,"coverSettings":1526,"taskList":1527,"done":1528,"gallery":1534,"seo":1535},[1501,1502,1503],{"id":875,"label":864},{"id":48,"label":877},{"id":879,"label":880},[1505,1506,1507,1508],{"id":883,"label":775},{"id":885,"label":865},{"id":887,"label":353},{"id":889,"label":890},[1510,1511,1512],{"id":893,"text":894},{"id":896,"text":897},{"id":899,"text":900},[1514],{"id":903,"documentId":904,"name":905,"alternativeText":906,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1515,"hash":932,"ext":34,"mime":37,"size":933,"url":934,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":935,"updatedAt":935,"publishedAt":936},{"large":1516,"small":1517,"medium":1518,"thumbnail":1519},{"ext":34,"url":909,"hash":910,"mime":37,"name":911,"path":16,"size":912,"width":40,"height":41,"sizeInBytes":913},{"ext":34,"url":915,"hash":916,"mime":37,"name":917,"path":16,"size":918,"width":48,"height":388,"sizeInBytes":919},{"ext":34,"url":921,"hash":922,"mime":37,"name":923,"path":16,"size":924,"width":56,"height":57,"sizeInBytes":925},{"ext":34,"url":927,"hash":928,"mime":37,"name":929,"path":16,"size":930,"width":64,"height":254,"sizeInBytes":931},{"id":903,"documentId":904,"name":905,"alternativeText":906,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1521,"hash":932,"ext":34,"mime":37,"size":933,"url":934,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":935,"updatedAt":935,"publishedAt":936},{"large":1522,"small":1523,"medium":1524,"thumbnail":1525},{"ext":34,"url":909,"hash":910,"mime":37,"name":911,"path":16,"size":912,"width":40,"height":41,"sizeInBytes":913},{"ext":34,"url":915,"hash":916,"mime":37,"name":917,"path":16,"size":918,"width":48,"height":388,"sizeInBytes":919},{"ext":34,"url":921,"hash":922,"mime":37,"name":923,"path":16,"size":924,"width":56,"height":57,"sizeInBytes":925},{"ext":34,"url":927,"hash":928,"mime":37,"name":929,"path":16,"size":930,"width":64,"height":254,"sizeInBytes":931},{"id":747,"ratio":307,"position":450,"scale":216},[],[1529,1530,1531,1532,1533],{"id":947,"text":948},{"id":950,"text":840},{"id":952,"text":953},{"id":955,"text":458},{"id":957,"text":958},[],{"id":961,"metaTitle":962,"metaDescription":963,"canonical":16,"noIndex":77,"ogImage":16},{"id":1156,"documentId":1157,"title":1158,"slug":1159,"order":1160,"lede":1161,"desc":1162,"collab":113,"clientName":1163,"kind":1164,"stack":1165,"site":1166,"noSiteText":307,"task":1167,"result":1168,"createdAt":1169,"updatedAt":1170,"publishedAt":1171,"locale":11,"tags":1537,"formats":1541,"points":1546,"slides":1547,"cover":1548,"coverSettings":1554,"taskList":1555,"done":1556,"gallery":1562,"seo":1563},[1538,1539,1540],{"id":1174,"label":1163},{"id":1176,"label":1177},{"id":1179,"label":877},[1542,1543,1544,1545],{"id":1182,"label":775},{"id":1184,"label":1164},{"id":1186,"label":353},{"id":1188,"label":783},[],[],{"id":1192,"documentId":1193,"name":1194,"alternativeText":1195,"caption":16,"focalPoint":16,"width":409,"height":482,"formats":1549,"hash":1221,"ext":34,"mime":37,"size":1222,"url":1223,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1224,"updatedAt":1224,"publishedAt":1224},{"large":1550,"small":1551,"medium":1552,"thumbnail":1553},{"ext":34,"url":1198,"hash":1199,"mime":37,"name":1200,"path":16,"size":1201,"width":40,"height":489,"sizeInBytes":1202},{"ext":34,"url":1204,"hash":1205,"mime":37,"name":1206,"path":16,"size":1207,"width":48,"height":496,"sizeInBytes":1208},{"ext":34,"url":1210,"hash":1211,"mime":37,"name":1212,"path":16,"size":1213,"width":56,"height":503,"sizeInBytes":1214},{"ext":34,"url":1216,"hash":1217,"mime":37,"name":1218,"path":16,"size":1219,"width":64,"height":289,"sizeInBytes":1220},{"id":1156,"ratio":1226,"position":1227,"scale":1228},[],[1557,1558,1559,1560,1561],{"id":1232,"text":1233},{"id":1235,"text":1236},{"id":1238,"text":1239},{"id":1241,"text":1242},{"id":1244,"text":458},[],{"id":1247,"metaTitle":1248,"metaDescription":1249,"canonical":16,"noIndex":77,"ogImage":16},{"id":297,"documentId":298,"title":299,"slug":300,"order":301,"lede":302,"desc":302,"collab":113,"clientName":303,"kind":304,"stack":305,"site":306,"noSiteText":307,"task":308,"result":309,"createdAt":310,"updatedAt":311,"publishedAt":312,"locale":11,"tags":1565,"formats":1568,"points":1569,"slides":1570,"cover":1571,"coverSettings":1577,"taskList":1578,"done":1579,"gallery":1584,"seo":1585},[1566,1567],{"id":315,"label":303},{"id":317,"label":318},[],[],[],{"id":1258,"documentId":1259,"name":1260,"alternativeText":1261,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1572,"hash":1287,"ext":34,"mime":37,"size":1288,"url":1289,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1290,"updatedAt":1290,"publishedAt":1290},{"large":1573,"small":1574,"medium":1575,"thumbnail":1576},{"ext":34,"url":1264,"hash":1265,"mime":37,"name":1266,"path":16,"size":1267,"width":40,"height":41,"sizeInBytes":1268},{"ext":34,"url":1270,"hash":1271,"mime":37,"name":1272,"path":16,"size":1273,"width":48,"height":388,"sizeInBytes":1274},{"ext":34,"url":1276,"hash":1277,"mime":37,"name":1278,"path":16,"size":1279,"width":56,"height":57,"sizeInBytes":1280},{"ext":34,"url":1282,"hash":1283,"mime":37,"name":1284,"path":16,"size":1285,"width":64,"height":254,"sizeInBytes":1286},{"id":297,"ratio":307,"position":450,"scale":216},[],[1580,1581,1582,1583],{"id":1295,"text":1296},{"id":1298,"text":1299},{"id":1301,"text":1302},{"id":1304,"text":1305},[],{"id":1308,"metaTitle":1309,"metaDescription":1310,"canonical":16,"noIndex":77,"ogImage":16},[],{"id":1588,"documentId":1589,"name":303,"order":478,"showInMarquee":113,"createdAt":1590,"updatedAt":1591,"publishedAt":1592,"locale":11,"logo":16,"projects":1593},71,"x1xo4a74aacay3lf622hkchu","2026-10-27T11:54:45.821Z","2026-10-27T12:06:29.339Z","2026-10-27T12:06:29.341Z",[1594],{"id":297,"documentId":298,"title":299,"slug":300,"order":301,"lede":302,"desc":302,"collab":113,"clientName":303,"kind":304,"stack":305,"site":306,"noSiteText":307,"task":308,"result":309,"createdAt":310,"updatedAt":311,"publishedAt":312,"locale":11,"tags":1595,"formats":1598,"points":1599,"slides":1600,"cover":1601,"coverSettings":1607,"taskList":1608,"done":1609,"gallery":1614,"seo":1615},[1596,1597],{"id":315,"label":303},{"id":317,"label":318},[],[],[],{"id":1258,"documentId":1259,"name":1260,"alternativeText":1261,"caption":16,"focalPoint":16,"width":374,"height":375,"formats":1602,"hash":1287,"ext":34,"mime":37,"size":1288,"url":1289,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1290,"updatedAt":1290,"publishedAt":1290},{"large":1603,"small":1604,"medium":1605,"thumbnail":1606},{"ext":34,"url":1264,"hash":1265,"mime":37,"name":1266,"path":16,"size":1267,"width":40,"height":41,"sizeInBytes":1268},{"ext":34,"url":1270,"hash":1271,"mime":37,"name":1272,"path":16,"size":1273,"width":48,"height":388,"sizeInBytes":1274},{"ext":34,"url":1276,"hash":1277,"mime":37,"name":1278,"path":16,"size":1279,"width":56,"height":57,"sizeInBytes":1280},{"ext":34,"url":1282,"hash":1283,"mime":37,"name":1284,"path":16,"size":1285,"width":64,"height":254,"sizeInBytes":1286},{"id":297,"ratio":307,"position":450,"scale":216},[],[1610,1611,1612,1613],{"id":1295,"text":1296},{"id":1298,"text":1299},{"id":1301,"text":1302},{"id":1304,"text":1305},[],{"id":1308,"metaTitle":1309,"metaDescription":1310,"canonical":16,"noIndex":77,"ogImage":16},[],[1618,1619,1620,1621],{"id":1295,"text":1296},{"id":1298,"text":1299},{"id":1301,"text":1302},{"id":1304,"text":1305},[],{"id":158,"documentId":1624,"title":1625,"slug":1626,"order":182,"lede":307,"desc":1627,"collab":77,"clientName":1628,"kind":1629,"stack":1630,"site":1631,"noSiteText":307,"task":1632,"result":1633,"createdAt":1634,"updatedAt":1635,"publishedAt":1636,"locale":11,"tags":1637,"partner":16,"formats":1644,"points":1645,"slides":1661,"cover":1730,"coverSettings":1736,"categories":1737,"services":1745,"client":1838,"taskList":1845,"done":1846,"gallery":1858,"testimonial":16,"nextProject":1866,"seo":1959},"g81budr6atjyj7c003mjw16y","Customer account for the Luzhniki Tennis Club","luzhniki","Court booking, 1C:Fitness integration, profile, payments and visit history.","Luzhniki Tennis Club","Customer account","Nuxt 4, TypeScript, Pinia, BFF, PostgreSQL, 1C:Fitness","https:\u002F\u002Flk.tkl.ru\u002F","\u003Cp>Build a customer account with booking of tennis and padel courts, profile management, training sessions and a personal balance.\u003C\u002Fp>\n\u003Cp>A full customer account: from training history to booking several courts at once, choosing a locker room and a coach, filtering, payments and membership.\u003C\u002Fp>","Courts are booked and paid for in the account. Customers choose the date, time, court, coach and locker room themselves, while payments and membership show real data from 1C:Fitness.","2026-10-27T11:56:45.933Z","2026-10-27T12:06:30.034Z","2026-10-27T12:06:30.043Z",[1638,1640,1642],{"id":855,"label":1639},"TKL.RF",{"id":961,"label":1641},"Sports",{"id":1247,"label":1643},"1C integration",[],[1646,1649,1652,1655,1658],{"id":1647,"text":1648},221,"Booking system",{"id":1650,"text":1651},222,"1C:Fitness integration",{"id":1653,"text":1654},223,"Sign-up and profile editing",{"id":1656,"text":1657},224,"Payments",{"id":1659,"text":1660},225,"Visit history",[1662,1695],{"id":1160,"documentId":1663,"name":1664,"alternativeText":1665,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":1666,"hash":1691,"ext":593,"mime":596,"size":1692,"url":1693,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1694,"updatedAt":1694,"publishedAt":1694},"mrssc8gaw5p1jmvqnoer1y3s","luzhniki-laptop.webp","Личный кабинет «Теннисного Клуба Лужники»",{"large":1667,"small":1673,"medium":1679,"thumbnail":1685},{"ext":593,"url":1668,"hash":1669,"mime":596,"name":1670,"path":16,"size":1671,"width":40,"height":599,"sizeInBytes":1672},"\u002Fuploads\u002Flarge_luzhniki_laptop_64b9d6396d.webp","large_luzhniki_laptop_64b9d6396d","large_luzhniki-laptop.webp",22.94,22942,{"ext":593,"url":1674,"hash":1675,"mime":596,"name":1676,"path":16,"size":1677,"width":48,"height":496,"sizeInBytes":1678},"\u002Fuploads\u002Fsmall_luzhniki_laptop_64b9d6396d.webp","small_luzhniki_laptop_64b9d6396d","small_luzhniki-laptop.webp",9.37,9372,{"ext":593,"url":1680,"hash":1681,"mime":596,"name":1682,"path":16,"size":1683,"width":56,"height":503,"sizeInBytes":1684},"\u002Fuploads\u002Fmedium_luzhniki_laptop_64b9d6396d.webp","medium_luzhniki_laptop_64b9d6396d","medium_luzhniki-laptop.webp",16.12,16124,{"ext":593,"url":1686,"hash":1687,"mime":596,"name":1688,"path":16,"size":1689,"width":64,"height":293,"sizeInBytes":1690},"\u002Fuploads\u002Fthumbnail_luzhniki_laptop_64b9d6396d.webp","thumbnail_luzhniki_laptop_64b9d6396d","thumbnail_luzhniki-laptop.webp",3.99,3988,"luzhniki_laptop_64b9d6396d",42.37,"\u002Fuploads\u002Fluzhniki_laptop_64b9d6396d.webp","2026-10-26T22:31:58.229Z",{"id":301,"documentId":1696,"name":1697,"alternativeText":1665,"caption":16,"focalPoint":16,"width":1698,"height":1699,"formats":1700,"hash":1726,"ext":593,"mime":596,"size":1727,"url":1728,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1729,"updatedAt":1729,"publishedAt":1729},"rwafok0cke6f44570471ll5t","luzhniki-booking.webp",2000,987,{"large":1701,"small":1707,"medium":1713,"thumbnail":1720},{"ext":593,"url":1702,"hash":1703,"mime":596,"name":1704,"path":16,"size":1705,"width":40,"height":770,"sizeInBytes":1706},"\u002Fuploads\u002Flarge_luzhniki_booking_e64bdfa8c7.webp","large_luzhniki_booking_e64bdfa8c7","large_luzhniki-booking.webp",20.14,20140,{"ext":593,"url":1708,"hash":1709,"mime":596,"name":1710,"path":16,"size":400,"width":48,"height":1711,"sizeInBytes":1712},"\u002Fuploads\u002Fsmall_luzhniki_booking_e64bdfa8c7.webp","small_luzhniki_booking_e64bdfa8c7","small_luzhniki-booking.webp",247,7148,{"ext":593,"url":1714,"hash":1715,"mime":596,"name":1716,"path":16,"size":1717,"width":56,"height":1718,"sizeInBytes":1719},"\u002Fuploads\u002Fmedium_luzhniki_booking_e64bdfa8c7.webp","medium_luzhniki_booking_e64bdfa8c7","medium_luzhniki-booking.webp",13.38,370,13382,{"ext":593,"url":1721,"hash":1722,"mime":596,"name":1723,"path":16,"size":1724,"width":64,"height":1421,"sizeInBytes":1725},"\u002Fuploads\u002Fthumbnail_luzhniki_booking_e64bdfa8c7.webp","thumbnail_luzhniki_booking_e64bdfa8c7","thumbnail_luzhniki-booking.webp",2.63,2634,"luzhniki_booking_e64bdfa8c7",49.63,"\u002Fuploads\u002Fluzhniki_booking_e64bdfa8c7.webp","2026-10-26T22:31:58.477Z",{"id":1160,"documentId":1663,"name":1664,"alternativeText":1665,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":1731,"hash":1691,"ext":593,"mime":596,"size":1692,"url":1693,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1694,"updatedAt":1694,"publishedAt":1694},{"large":1732,"small":1733,"medium":1734,"thumbnail":1735},{"ext":593,"url":1668,"hash":1669,"mime":596,"name":1670,"path":16,"size":1671,"width":40,"height":599,"sizeInBytes":1672},{"ext":593,"url":1674,"hash":1675,"mime":596,"name":1676,"path":16,"size":1677,"width":48,"height":496,"sizeInBytes":1678},{"ext":593,"url":1680,"hash":1681,"mime":596,"name":1682,"path":16,"size":1683,"width":56,"height":503,"sizeInBytes":1684},{"ext":593,"url":1686,"hash":1687,"mime":596,"name":1688,"path":16,"size":1689,"width":64,"height":293,"sizeInBytes":1690},{"id":158,"ratio":307,"position":450,"scale":216},[1738],{"id":177,"documentId":1739,"label":1740,"slug":1741,"order":182,"createdAt":1742,"updatedAt":1743,"publishedAt":1744,"locale":11},"tanodytymqmx8fmdfitrupv8","Accounts and CRM","crm","2026-10-27T11:54:45.703Z","2026-10-27T12:06:29.151Z","2026-10-27T12:06:29.154Z",[1746,1802],{"id":202,"documentId":203,"title":204,"slug":205,"num":206,"order":182,"text":207,"ctaLabel":208,"includes":1747,"isLinked":77,"createdAt":1748,"updatedAt":1749,"publishedAt":1750,"locale":11,"blocks":1751,"seo":1799},"[Scope of the service: which tasks we solve and what the work includes]","2026-10-27T11:56:46.917Z","2026-10-28T01:53:57.590Z","2026-10-28T01:53:57.643Z",[1752,1756,1761,1792],{"id":1753,"heading":1754,"body":1747,"__component":1755},42,"What's included","blocks.includes",{"id":18,"heading":1757,"projects":1758,"__component":1760},"Cases",[1759],{"id":158,"documentId":1624,"title":1625,"slug":1626,"order":182,"lede":307,"desc":1627,"collab":77,"clientName":1628,"kind":1629,"stack":1630,"site":1631,"noSiteText":307,"task":1632,"result":1633,"createdAt":1634,"updatedAt":1635,"publishedAt":1636,"locale":11},"blocks.projects-cards",{"id":1762,"heading":88,"lead":1763,"principlesHeading":1764,"steps":1765,"principles":1781,"__component":1791},62,"We were doing custom development long before neural networks, and the process took shape back then. AI helps us ship and maintain the product faster. Stability and security are still on us.","You always know what is going on",[1766,1769,1773,1777],{"id":49,"num":206,"title":1767,"text":1768},"Brief and estimate","We discuss the task and estimate it. Then we write a specification: features, technical decisions, roles, rules and edge cases. We develop against it (SDD) and accept the result against it too.",{"id":1770,"num":214,"title":1771,"text":1772},264,"Clickable prototype","We build a prototype from your design or with neural networks. The scenarios can be walked through by hand before the main development starts.",{"id":1774,"num":223,"title":1775,"text":1776},265,"Development and integration","After the prototype demo we adjust the specification. Simple code is written with Codex and Claude Code: routine work goes faster and the budget goes further. We know where AI can go wrong, so every change is checked by a developer in code review. We connect the product to your systems and external services: CRM, payments and others. Everything built during the stage is available in the demo environment at the project link.",{"id":1778,"num":231,"title":1779,"text":1780},266,"Testing and release","Once the functionality is ready, we cover it with tests and prepare the launch on a staging environment: a copy of the production environment where the product is checked in real conditions. After the final testing we move it to production and set up monitoring.",[1782,1785,1788],{"id":122,"title":1783,"text":1784},"Reports","Every 1–2 weeks we send a report: what was done, what we take on next and where an overrun is possible if the tasks change. You learn about extra costs before they happen, not after.",{"id":126,"title":1786,"text":1787},"Demo link","The current version of the product is always open. Come in at any moment, try everything and send the link to colleagues.",{"id":130,"title":1789,"text":1790},"Direct line to the team","A shared chat with the developers, no chain of managers. Questions are answered by the people who write the code.","blocks.how",{"id":1793,"heading":1794,"cta":1795,"__component":1798},58,"F.A.Q",{"id":671,"label":1796,"href":97,"kind":1797,"strong":77,"external":77},"Ask your question","btn-d","blocks.faq",{"id":1800,"metaTitle":1801,"metaDescription":207,"canonical":16,"noIndex":77,"ogImage":16},111,"Customer accounts and portals — Spot",{"id":235,"documentId":236,"title":237,"slug":238,"num":239,"order":195,"text":240,"ctaLabel":208,"includes":1747,"isLinked":77,"createdAt":1803,"updatedAt":1804,"publishedAt":1805,"locale":11,"blocks":1806,"seo":1835},"2026-10-27T11:56:47.200Z","2026-10-28T01:53:58.119Z","2026-10-28T01:53:58.164Z",[1807,1809,1813,1831],{"id":1808,"heading":1754,"body":1747,"__component":1755},48,{"id":227,"heading":1757,"projects":1810,"__component":1760},[1811,1812],{"id":158,"documentId":1624,"title":1625,"slug":1626,"order":182,"lede":307,"desc":1627,"collab":77,"clientName":1628,"kind":1629,"stack":1630,"site":1631,"noSiteText":307,"task":1632,"result":1633,"createdAt":1634,"updatedAt":1635,"publishedAt":1636,"locale":11},{"id":1331,"documentId":1332,"title":1333,"slug":1334,"order":225,"lede":1335,"desc":1335,"collab":77,"clientName":1336,"kind":1337,"stack":1338,"site":1339,"noSiteText":307,"task":1340,"result":1341,"createdAt":1342,"updatedAt":1343,"publishedAt":1344,"locale":11},{"id":1814,"heading":88,"lead":1763,"principlesHeading":1764,"steps":1815,"principles":1824,"__component":1791},68,[1816,1818,1820,1822],{"id":1817,"num":206,"title":1767,"text":1768},287,{"id":1819,"num":214,"title":1771,"text":1772},288,{"id":1821,"num":223,"title":1775,"text":1776},289,{"id":1823,"num":231,"title":1779,"text":1780},290,[1825,1827,1829],{"id":1826,"title":1783,"text":1784},202,{"id":1828,"title":1786,"text":1787},203,{"id":1830,"title":1789,"text":1790},204,{"id":1832,"heading":1794,"cta":1833,"__component":1798},64,{"id":1834,"label":1796,"href":97,"kind":1797,"strong":77,"external":77},199,{"id":1836,"metaTitle":1837,"metaDescription":240,"canonical":16,"noIndex":77,"ogImage":16},114,"Service integrations — Spot",{"id":1839,"documentId":1840,"name":1628,"order":1841,"showInMarquee":113,"createdAt":1842,"updatedAt":1843,"publishedAt":1844,"locale":11,"logo":16},67,"n0elolio4gvxc94xuq2sm2xn",12,"2026-10-27T11:54:45.799Z","2026-10-27T12:06:29.307Z","2026-10-27T12:06:29.310Z",[],[1847,1849,1851,1853,1856],{"id":1848,"text":1648},226,{"id":1850,"text":1651},227,{"id":1852,"text":1654},228,{"id":1854,"text":1855},229,"Payments and membership",{"id":1857,"text":1660},230,[1859],{"id":1841,"caption":307,"image":1860},{"id":301,"documentId":1696,"name":1697,"alternativeText":1665,"caption":16,"focalPoint":16,"width":1698,"height":1699,"formats":1861,"hash":1726,"ext":593,"mime":596,"size":1727,"url":1728,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1729,"updatedAt":1729,"publishedAt":1729},{"large":1862,"small":1863,"medium":1864,"thumbnail":1865},{"ext":593,"url":1702,"hash":1703,"mime":596,"name":1704,"path":16,"size":1705,"width":40,"height":770,"sizeInBytes":1706},{"ext":593,"url":1708,"hash":1709,"mime":596,"name":1710,"path":16,"size":400,"width":48,"height":1711,"sizeInBytes":1712},{"ext":593,"url":1714,"hash":1715,"mime":596,"name":1716,"path":16,"size":1717,"width":56,"height":1718,"sizeInBytes":1719},{"ext":593,"url":1721,"hash":1722,"mime":596,"name":1723,"path":16,"size":1724,"width":64,"height":1421,"sizeInBytes":1725},{"id":1867,"documentId":1868,"title":1869,"slug":1870,"order":216,"lede":1871,"desc":1871,"collab":77,"clientName":1872,"kind":1873,"stack":1874,"site":307,"noSiteText":1875,"task":1876,"result":307,"createdAt":1877,"updatedAt":1878,"publishedAt":1879,"locale":11,"tags":1880,"formats":1887,"points":1888,"slides":1898,"cover":1931,"coverSettings":1937,"taskList":1938,"done":1939,"gallery":1955,"seo":1956},50,"jzhsxo67cxtotrobtcmid5rg","Three years developing the CRM of the Virtuozy music school chain","virtuozy","Every branch got a reactive real-time schedule and a set of useful business management modules.","Virtuozy music school chain","CRM system","Vue.js, Pinia, PrimeVue, PHP, Socket.IO","Internal system","\u003Cp>Optimise the schedule and take the load off the administrators of the school chain: lessons, substitutions and reschedules must update in every branch at once, without calls and manual reconciliation.\u003C\u002Fp>\n\u003Cp>Deliver real-time and fill the system with business management modules: students, teachers, payments and reporting in one CRM.\u003C\u002Fp>","2026-10-27T11:56:45.992Z","2026-10-28T01:53:58.401Z","2026-10-28T01:53:58.485Z",[1881,1884],{"id":1882,"label":1883},481,"Virtuozy",{"id":1885,"label":1886},482,"Education",[],[1889,1892,1895],{"id":1890,"text":1891},378,"Frontend stack migration to Vue.js",{"id":1893,"text":1894},379,"Modular system introduced",{"id":1896,"text":1897},380,"Reactive forms, recurring lessons",[1899],{"id":1841,"documentId":1900,"name":1901,"alternativeText":1902,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":1903,"hash":1927,"ext":593,"mime":596,"size":1928,"url":1929,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1930,"updatedAt":1930,"publishedAt":1930},"oepj2jygdk1n4z0b7wxud8tm","virtuozy-laptop.webp","3 года развиваем CRM сети музыкальных школ «Виртуозы»",{"large":1904,"small":1910,"medium":1916,"thumbnail":1922},{"ext":593,"url":1905,"hash":1906,"mime":596,"name":1907,"path":16,"size":1908,"width":40,"height":599,"sizeInBytes":1909},"\u002Fuploads\u002Flarge_virtuozy_laptop_ceee7f8cbb.webp","large_virtuozy_laptop_ceee7f8cbb","large_virtuozy-laptop.webp",32.99,32994,{"ext":593,"url":1911,"hash":1912,"mime":596,"name":1913,"path":16,"size":1914,"width":48,"height":496,"sizeInBytes":1915},"\u002Fuploads\u002Fsmall_virtuozy_laptop_ceee7f8cbb.webp","small_virtuozy_laptop_ceee7f8cbb","small_virtuozy-laptop.webp",13.39,13394,{"ext":593,"url":1917,"hash":1918,"mime":596,"name":1919,"path":16,"size":1920,"width":56,"height":503,"sizeInBytes":1921},"\u002Fuploads\u002Fmedium_virtuozy_laptop_ceee7f8cbb.webp","medium_virtuozy_laptop_ceee7f8cbb","medium_virtuozy-laptop.webp",23.22,23220,{"ext":593,"url":1923,"hash":1924,"mime":596,"name":1925,"path":16,"size":1389,"width":64,"height":293,"sizeInBytes":1926},"\u002Fuploads\u002Fthumbnail_virtuozy_laptop_ceee7f8cbb.webp","thumbnail_virtuozy_laptop_ceee7f8cbb","thumbnail_virtuozy-laptop.webp",5212,"virtuozy_laptop_ceee7f8cbb",66.57,"\u002Fuploads\u002Fvirtuozy_laptop_ceee7f8cbb.webp","2026-10-26T22:31:58.739Z",{"id":1841,"documentId":1900,"name":1901,"alternativeText":1902,"caption":16,"focalPoint":16,"width":589,"height":590,"formats":1932,"hash":1927,"ext":593,"mime":596,"size":1928,"url":1929,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1930,"updatedAt":1930,"publishedAt":1930},{"large":1933,"small":1934,"medium":1935,"thumbnail":1936},{"ext":593,"url":1905,"hash":1906,"mime":596,"name":1907,"path":16,"size":1908,"width":40,"height":599,"sizeInBytes":1909},{"ext":593,"url":1911,"hash":1912,"mime":596,"name":1913,"path":16,"size":1914,"width":48,"height":496,"sizeInBytes":1915},{"ext":593,"url":1917,"hash":1918,"mime":596,"name":1919,"path":16,"size":1920,"width":56,"height":503,"sizeInBytes":1921},{"ext":593,"url":1923,"hash":1924,"mime":596,"name":1925,"path":16,"size":1389,"width":64,"height":293,"sizeInBytes":1926},{"id":1867,"ratio":307,"position":450,"scale":216},[],[1940,1942,1945,1948,1950,1953],{"id":1941,"text":1891},381,{"id":1943,"text":1944},382,"Real-time schedule in every branch on Socket.IO",{"id":1946,"text":1947},383,"Substitutions and reschedules without manual reconciliation",{"id":1949,"text":1894},384,{"id":1951,"text":1952},385,"Student, teacher, payment and reporting modules",{"id":1954,"text":1897},386,[],{"id":17,"metaTitle":1957,"metaDescription":1958,"canonical":16,"noIndex":77,"ogImage":16},"CRM development for a music school chain on Vue.js","3 years of developing the Virtuozy CRM: real-time schedule on Socket.IO, students, payments and reporting for every branch.",{"id":1753,"metaTitle":1960,"metaDescription":1961,"canonical":16,"noIndex":77,"ogImage":16},"Tennis club customer account with court booking and 1C:Fitness integration","A customer account for Luzhniki Tennis Club on Nuxt 4: court booking, payment, membership, coaches. Data synced with 1C:Fitness.",{"id":1308,"metaTitle":1309,"metaDescription":1310,"canonical":16,"noIndex":77,"ogImage":16}]