[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"global":3,"services:en":200,"technology-names:en":248,"home-page:en":296,"posts:en":593,"projects:en":943,"technologies:en":1786,"clients:en":2009},{"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":177,"documentId":297,"createdAt":298,"updatedAt":299,"publishedAt":300,"locale":11,"blocks":301,"seo":590},"xymer0hfgablp0pzdtz5310b","2026-10-27T11:56:47.322Z","2026-10-28T02:22:45.718Z","2026-10-28T02:22:45.796Z",[302,422,433,442,448,460,494,529],{"id":303,"title":304,"subtitle":137,"cardsHtml":305,"cta":306,"fan":308,"__component":421},22,"We build and scale customer-facing services","\u003Cdiv class=\"hero-card\" data-depth=\"0.6\" data-rot=\"-4\" style=\"left: 3%; top: 168px; width: 272px; transform: rotate(-4deg)\">\n        \u003Cspan class=\"hero-card__tag\">\u003Cspan class=\"hero-card__dot\">\u003C\u002Fspan>AI assistant\u003C\u002Fspan>\n        \u003Cp class=\"hero-card__question\">Show this week's returned orders\u003C\u002Fp>\n        \u003Cp class=\"hero-card__answer\">Found 12 orders. 3 are waiting for a manager.\u003C\u002Fp>\n        \u003Cspan class=\"hero-card__typing\">\u003Ci>\u003C\u002Fi>\u003Ci>\u003C\u002Fi>\u003Ci>\u003C\u002Fi>\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"hero-card\" data-depth=\"1\" data-rot=\"3\" style=\"left: 6%; top: 452px; width: 272px; transform: rotate(3deg)\">\n        \u003Cspan class=\"hero-card__tag\">feat\u002Forders → dev\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__code\">$ git push origin feat\u002Forders\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__row\">\u003Cspan>Tests\u003C\u002Fspan>\u003Cspan class=\"hero-card__ok\">✓ 128\u002F128\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__row\">\u003Cspan>Build\u003C\u002Fspan>\u003Cspan class=\"hero-card__ok\">✓ 42 s\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__row\">\u003Cspan>Deploy\u003C\u002Fspan>\u003Cspan class=\"hero-card__live\">running\u003C\u002Fspan>\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"hero-card\" data-depth=\"0.8\" data-rot=\"3\" style=\"right: 3%; top: 208px; width: 256px; transform: rotate(3deg)\">\n        \u003Cspan class=\"hero-card__title\">\u003Cspan class=\"hero-card__check\">✓\u003C\u002Fspan>Court No. 1 booked\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__meta\">25 October, 18:00–18:55\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__line\">\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__row\">\u003Cspan>Paid by card\u003C\u002Fspan>\u003Cspan style=\"color: #FFFFFF\">2 400 ₽\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan class=\"hero-card__row\">\u003Cspan>Points earned\u003C\u002Fspan>\u003Cspan class=\"hero-card__ok\">+120\u003C\u002Fspan>\u003C\u002Fspan>\n      \u003C\u002Fdiv>",{"id":307,"label":96,"href":97,"kind":98,"strong":77,"external":77},268,[309,345,380],{"id":303,"documentId":310,"name":311,"alternativeText":312,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":315,"hash":341,"ext":34,"mime":37,"size":342,"url":343,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":344,"updatedAt":344,"publishedAt":344},"eliis544sttmp6mn8ktgcvt2","splat-biohack.jpg","Лендинг для запуска продукта Splat Biohack+",1490,782,{"large":316,"small":322,"medium":329,"thumbnail":335},{"ext":34,"url":317,"hash":318,"mime":37,"name":319,"path":16,"size":320,"width":40,"height":41,"sizeInBytes":321},"\u002Fuploads\u002Flarge_splat_biohack_f6f5447ce0.jpg","large_splat_biohack_f6f5447ce0","large_splat-biohack.jpg",64.42,64418,{"ext":34,"url":323,"hash":324,"mime":37,"name":325,"path":16,"size":326,"width":48,"height":327,"sizeInBytes":328},"\u002Fuploads\u002Fsmall_splat_biohack_f6f5447ce0.jpg","small_splat_biohack_f6f5447ce0","small_splat-biohack.jpg",22.65,262,22645,{"ext":34,"url":330,"hash":331,"mime":37,"name":332,"path":16,"size":333,"width":56,"height":57,"sizeInBytes":334},"\u002Fuploads\u002Fmedium_splat_biohack_f6f5447ce0.jpg","medium_splat_biohack_f6f5447ce0","medium_splat-biohack.jpg",42.1,42097,{"ext":34,"url":336,"hash":337,"mime":37,"name":338,"path":16,"size":339,"width":64,"height":254,"sizeInBytes":340},"\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":346,"documentId":347,"name":348,"alternativeText":349,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":350,"hash":375,"ext":34,"mime":37,"size":376,"url":377,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":378,"updatedAt":378,"publishedAt":379},21,"ibfb5rgfvr7tbiryetohgtuk","rostelecom-hr.jpg","HR-страницы для Ростелекома",{"large":351,"small":357,"medium":363,"thumbnail":369},{"ext":34,"url":352,"hash":353,"mime":37,"name":354,"path":16,"size":355,"width":40,"height":41,"sizeInBytes":356},"\u002Fuploads\u002Flarge_rostelecom_hr_27bd7a1d89.jpg","large_rostelecom_hr_27bd7a1d89","large_rostelecom-hr.jpg",38.27,38267,{"ext":34,"url":358,"hash":359,"mime":37,"name":360,"path":16,"size":361,"width":48,"height":327,"sizeInBytes":362},"\u002Fuploads\u002Fsmall_rostelecom_hr_27bd7a1d89.jpg","small_rostelecom_hr_27bd7a1d89","small_rostelecom-hr.jpg",15.39,15390,{"ext":34,"url":364,"hash":365,"mime":37,"name":366,"path":16,"size":367,"width":56,"height":57,"sizeInBytes":368},"\u002Fuploads\u002Fmedium_rostelecom_hr_27bd7a1d89.jpg","medium_rostelecom_hr_27bd7a1d89","medium_rostelecom-hr.jpg",26.16,26163,{"ext":34,"url":370,"hash":371,"mime":37,"name":372,"path":16,"size":373,"width":64,"height":254,"sizeInBytes":374},"\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":381,"documentId":382,"name":383,"alternativeText":384,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":387,"hash":417,"ext":389,"mime":392,"size":418,"url":419,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":420,"updatedAt":420,"publishedAt":420},10,"mrssc8gaw5p1jmvqnoer1y3s","luzhniki-laptop.webp","Личный кабинет «Теннисного Клуба Лужники»",1536,864,{"large":388,"small":397,"medium":404,"thumbnail":411},{"ext":389,"url":390,"hash":391,"mime":392,"name":393,"path":16,"size":394,"width":40,"height":395,"sizeInBytes":396},".webp","\u002Fuploads\u002Flarge_luzhniki_laptop_64b9d6396d.webp","large_luzhniki_laptop_64b9d6396d","image\u002Fwebp","large_luzhniki-laptop.webp",22.94,562,22942,{"ext":389,"url":398,"hash":399,"mime":392,"name":400,"path":16,"size":401,"width":48,"height":402,"sizeInBytes":403},"\u002Fuploads\u002Fsmall_luzhniki_laptop_64b9d6396d.webp","small_luzhniki_laptop_64b9d6396d","small_luzhniki-laptop.webp",9.37,281,9372,{"ext":389,"url":405,"hash":406,"mime":392,"name":407,"path":16,"size":408,"width":56,"height":409,"sizeInBytes":410},"\u002Fuploads\u002Fmedium_luzhniki_laptop_64b9d6396d.webp","medium_luzhniki_laptop_64b9d6396d","medium_luzhniki-laptop.webp",16.12,422,16124,{"ext":389,"url":412,"hash":413,"mime":392,"name":414,"path":16,"size":415,"width":64,"height":293,"sizeInBytes":416},"\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","blocks.hero-main",{"id":423,"heading":424,"lead":425,"text":426,"cta":427,"services":431,"__component":432},32,"Our services","We build the product around your processes instead of bending the business to an off-the-shelf solution.","We dig into other people's code and take on tasks no one has solved before.",{"id":428,"label":429,"href":75,"kind":430,"strong":77,"external":77},269,"All services","btn-d",[],"blocks.services",{"id":303,"heading":434,"lead":435,"text":436,"initial":233,"step":233,"cta":437,"projects":440,"__component":441},"Projects and results","After launch we often stay on and keep developing the product. We would rather build things that run for years than one-off projects.","Our clients include Alfa-Bank, Rostelecom, Raiffeisen Life, Sber Education, Selectel Academy and SPLAT.",{"id":438,"label":439,"href":81,"kind":430,"strong":77,"external":77},270,"All projects",[],"blocks.projects",{"id":303,"heading":443,"lead":444,"text":445,"technologies":446,"__component":447},"Technologies","We build products on a proven stack that is easy to develop and maintain.","Any experienced team will find their way around our frontend, backend and infrastructure if the project ever has to be handed over. AI takes care of the routine: boilerplate code, tests and documentation.",[],"blocks.stack",{"id":303,"heading":449,"lead":450,"text":451,"initial":195,"links":452,"posts":458,"__component":459},"Sharing expertise","We talk about working solutions and share tools and approaches with the community","Not only in writing: we speak at MoscowCSS × Yandex and MSK Vue.",[453,455],{"id":454,"label":143,"href":132,"kind":430,"strong":77,"external":113},272,{"id":456,"label":146,"href":128,"kind":457,"strong":77,"external":113},273,"btn-l",[],"blocks.expertise",{"id":461,"heading":88,"lead":462,"principlesHeading":463,"steps":464,"principles":481,"__component":493},82,"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",[465,469,473,477],{"id":466,"num":206,"title":467,"text":468},343,"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":470,"num":214,"title":471,"text":472},344,"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":474,"num":223,"title":475,"text":476},345,"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":478,"num":231,"title":479,"text":480},346,"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.",[482,486,489],{"id":483,"title":484,"text":485},244,"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":64,"title":487,"text":488},"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":490,"title":491,"text":492},246,"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":303,"clients":495,"testimonial":496,"__component":528},[],{"id":195,"documentId":497,"text":498,"name":499,"role":500,"createdAt":501,"updatedAt":502,"publishedAt":503,"locale":11,"photo":504,"client":520},"yzg2zta62sp74w1dtqx0bjeg","“Together with Spot we moved our internal CRM to Vue.js. The online schedule and the key modules run reliably across every branch of our music school chain.”","Dmitry Bidulya","CEO, Virtuozy","2026-10-27T11:56:45.782Z","2026-10-27T12:06:29.444Z","2026-10-27T12:06:29.448Z",{"id":216,"documentId":505,"name":506,"alternativeText":507,"caption":16,"focalPoint":16,"width":83,"height":83,"formats":508,"hash":515,"ext":34,"mime":37,"size":516,"url":517,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":518,"updatedAt":518,"publishedAt":519},"o07v86mfumrgwdobzggkp4qp","dmitry-bidulya.jpg","Дмитрий Бидуля",{"thumbnail":509},{"ext":34,"url":510,"hash":511,"mime":37,"name":512,"path":16,"size":513,"width":169,"height":169,"sizeInBytes":514},"\u002Fuploads\u002Fthumbnail_dmitry_bidulya_e8819c9f79.jpg","thumbnail_dmitry_bidulya_e8819c9f79","thumbnail_dmitry-bidulya.jpg",6.31,6311,"dmitry_bidulya_e8819c9f79",7.39,"\u002Fuploads\u002Fdmitry_bidulya_e8819c9f79.jpg","2026-10-26T22:31:57.378Z","2026-10-26T22:31:57.379Z",{"id":521,"documentId":522,"name":523,"order":524,"showInMarquee":113,"createdAt":525,"updatedAt":526,"publishedAt":527,"locale":11,"logo":16},66,"sw4ys6qn5d0mehqodmpe8j1o","Virtuozy",11,"2026-10-27T11:54:45.794Z","2026-10-27T12:06:29.298Z","2026-10-27T12:06:29.301Z","blocks.clients",{"id":530,"heading":531,"items":532,"cta":586,"__component":589},78,"F.A.Q",[533,541,549,557,564,571,578],{"id":534,"documentId":535,"question":536,"answer":537,"order":182,"createdAt":538,"updatedAt":539,"publishedAt":540,"locale":11},25,"dmecq2q423srweqrd068vdkx","We already have a system, but the contractor disappeared. Will you take it over?","Yes. First we study the code and write down in a specification the rules the system follows today. Then we decide together what to improve and what to rewrite.","2026-10-27T11:56:45.706Z","2026-10-27T12:06:29.370Z","2026-10-27T12:06:29.373Z",{"id":542,"documentId":543,"question":544,"answer":545,"order":216,"createdAt":546,"updatedAt":547,"publishedAt":548,"locale":11},26,"isakfq4sz4tlv93qye86sm2a","Can we start with a small part?","Yes, and most of the time that is the right way. We launch one scenario and expand once the first real users appear.","2026-10-27T11:56:45.744Z","2026-10-27T12:06:29.378Z","2026-10-27T12:06:29.381Z",{"id":550,"documentId":551,"question":552,"answer":553,"order":225,"createdAt":554,"updatedAt":555,"publishedAt":556,"locale":11},27,"m93dux663mw3o0su76g2hb6o","How much does it cost and how long does it take?","We give an estimate after the brief: the price and timeline depend on the number of roles, integrations and scenarios. To make the scope clear earlier, the first stage is a clickable prototype — you can walk through it before the main development and adjust the specification.","2026-10-27T11:56:45.755Z","2026-10-27T12:06:29.385Z","2026-10-27T12:06:29.388Z",{"id":18,"documentId":558,"question":559,"answer":560,"order":233,"createdAt":561,"updatedAt":562,"publishedAt":563,"locale":11},"lrwdw5domnj5cksjo5z693vu","How does the work go?","Four stages: brief and estimate, clickable prototype, development with integrations, testing and release. At the first stage we write a specification — roles, rules and edge cases — and develop against it. Before launch we test in a staging environment and connect monitoring.","2026-10-27T11:56:45.758Z","2026-10-28T01:53:59.841Z","2026-10-28T01:53:59.855Z",{"id":27,"documentId":565,"question":566,"answer":567,"order":195,"createdAt":568,"updatedAt":569,"publishedAt":570,"locale":11},"b1qz515rjys8nojrx0kan4k0","How do you use AI, and will quality suffer?","AI writes boilerplate code and speeds up routine work, but every change goes through code review and tests. We know where neural networks make mistakes, so business logic and integrations are checked by hand. The code lives in git and is backed up.","2026-10-27T11:56:45.763Z","2026-10-27T12:06:29.401Z","2026-10-27T12:06:29.404Z",{"id":158,"documentId":572,"question":573,"answer":574,"order":4,"createdAt":575,"updatedAt":576,"publishedAt":577,"locale":11},"mh0h6u9yy2kj6xsv2i5oykak","Do you integrate with 1C, payments and external services?","Yes. Customer accounts and CRMs are usually connected to 1C, payment acquiring, telephony and analytics: we sync data both ways and fix the exchange rules in the specification. An example is the Luzhniki Tennis Club account with 1C:Fitness, payments and membership.","2026-10-27T11:56:45.766Z","2026-10-27T12:06:29.409Z","2026-10-27T12:06:29.412Z",{"id":579,"documentId":580,"question":581,"answer":582,"order":134,"createdAt":583,"updatedAt":584,"publishedAt":585,"locale":11},31,"jm8geopu3odeyz4zrig6dth1","What happens to the project after launch?","We stay on for support and development: we watch the monitoring, ship improvements and scale for growing load. The stack is proven and the code is documented — a new team can join the project easily if needed.","2026-10-27T11:56:45.771Z","2026-10-27T12:06:29.427Z","2026-10-27T12:06:29.430Z",{"id":587,"label":588,"href":97,"kind":430,"strong":77,"external":77},271,"Ask your question","blocks.faq",{"id":261,"metaTitle":591,"metaDescription":592,"canonical":16,"noIndex":77,"ogImage":16},"Customer portals, CRM and integrations on Vue and Laravel — Spot","We build customer accounts, portals, CRM and Mini Apps with 1C, payment and CRM integrations. Alfa-Bank, Rostelecom, SPLAT. Estimate after a brief, prototype before the start.",[594,645,694,740,786,830,860,907],{"id":27,"documentId":595,"kind":596,"typeLabel":597,"source":598,"venue":599,"meta":16,"title":600,"url":601,"ratio":602,"order":182,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":603,"updatedAt":604,"publishedAt":605,"locale":11,"image":606},"sk651ii62yuj11spwicn9am0","talk","Talk","YouTube","MoscowCSS × Yandex","Timeline animations: from simple approaches to fully controlled ones","https:\u002F\u002Fyoutu.be\u002FbPgiOkMyxJQ?t=2168","1024 \u002F 725","2026-10-27T11:56:45.796Z","2026-10-27T12:06:29.461Z","2026-10-27T12:06:29.466Z",{"id":225,"documentId":607,"name":608,"alternativeText":609,"caption":16,"focalPoint":16,"width":610,"height":611,"formats":612,"hash":641,"ext":34,"mime":37,"size":642,"url":643,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":644,"updatedAt":644,"publishedAt":644},"crdkgqnfq3s5r0ro4kfma7bf","blog-moscowcss-timeline.jpg","Способы реализации от простых до управляемых timeline анимаций",1024,725,{"large":613,"small":620,"medium":627,"thumbnail":634},{"ext":34,"url":614,"hash":615,"mime":37,"name":616,"path":16,"size":617,"width":40,"height":618,"sizeInBytes":619},"\u002Fuploads\u002Flarge_blog_moscowcss_timeline_8147778268.jpg","large_blog_moscowcss_timeline_8147778268","large_blog-moscowcss-timeline.jpg",68.01,708,68014,{"ext":34,"url":621,"hash":622,"mime":37,"name":623,"path":16,"size":624,"width":48,"height":625,"sizeInBytes":626},"\u002Fuploads\u002Fsmall_blog_moscowcss_timeline_8147778268.jpg","small_blog_moscowcss_timeline_8147778268","small_blog-moscowcss-timeline.jpg",25.01,354,25010,{"ext":34,"url":628,"hash":629,"mime":37,"name":630,"path":16,"size":631,"width":56,"height":632,"sizeInBytes":633},"\u002Fuploads\u002Fmedium_blog_moscowcss_timeline_8147778268.jpg","medium_blog_moscowcss_timeline_8147778268","medium_blog-moscowcss-timeline.jpg",44.92,531,44922,{"ext":34,"url":635,"hash":636,"mime":37,"name":637,"path":16,"size":638,"width":639,"height":169,"sizeInBytes":640},"\u002Fuploads\u002Fthumbnail_blog_moscowcss_timeline_8147778268.jpg","thumbnail_blog_moscowcss_timeline_8147778268","thumbnail_blog-moscowcss-timeline.jpg",7.29,221,7294,"blog_moscowcss_timeline_8147778268",71.93,"\u002Fuploads\u002Fblog_moscowcss_timeline_8147778268.jpg","2026-10-26T22:31:57.500Z",{"id":158,"documentId":646,"kind":647,"typeLabel":648,"source":127,"venue":16,"meta":649,"title":650,"url":651,"ratio":652,"order":216,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":653,"updatedAt":654,"publishedAt":655,"locale":11,"image":656},"pqcce7ea2ooly2i251mulhgx","article","Article","11 min · 9,700 views","How our team moved to low-code and closes backend tasks with the frontend","https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F702278\u002F","1720 \u002F 1000","2026-10-27T11:56:45.811Z","2026-10-27T12:06:29.471Z","2026-10-27T12:06:29.473Z",{"id":233,"documentId":657,"name":658,"alternativeText":659,"caption":16,"focalPoint":16,"width":660,"height":40,"formats":661,"hash":690,"ext":34,"mime":37,"size":691,"url":692,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":693,"updatedAt":693,"publishedAt":693},"big6399stlia2exljxrypdkh","blog-habr-lowcode.jpg","Как мы в команде пришли к low-code и закрываем задачи бэка силами фронта",1720,{"large":662,"small":669,"medium":676,"thumbnail":683},{"ext":34,"url":663,"hash":664,"mime":37,"name":665,"path":16,"size":666,"width":40,"height":667,"sizeInBytes":668},"\u002Fuploads\u002Flarge_blog_habr_lowcode_770843f34d.jpg","large_blog_habr_lowcode_770843f34d","large_blog-habr-lowcode.jpg",69.21,581,69213,{"ext":34,"url":670,"hash":671,"mime":37,"name":672,"path":16,"size":673,"width":48,"height":674,"sizeInBytes":675},"\u002Fuploads\u002Fsmall_blog_habr_lowcode_770843f34d.jpg","small_blog_habr_lowcode_770843f34d","small_blog-habr-lowcode.jpg",27.7,291,27704,{"ext":34,"url":677,"hash":678,"mime":37,"name":679,"path":16,"size":680,"width":56,"height":681,"sizeInBytes":682},"\u002Fuploads\u002Fmedium_blog_habr_lowcode_770843f34d.jpg","medium_blog_habr_lowcode_770843f34d","medium_blog-habr-lowcode.jpg",48.59,436,48588,{"ext":34,"url":684,"hash":685,"mime":37,"name":686,"path":16,"size":687,"width":64,"height":688,"sizeInBytes":689},"\u002Fuploads\u002Fthumbnail_blog_habr_lowcode_770843f34d.jpg","thumbnail_blog_habr_lowcode_770843f34d","thumbnail_blog-habr-lowcode.jpg",8.63,142,8627,"blog_habr_lowcode_770843f34d",133.32,"\u002Fuploads\u002Fblog_habr_lowcode_770843f34d.jpg","2026-10-26T22:31:57.607Z",{"id":579,"documentId":695,"kind":596,"typeLabel":597,"source":598,"venue":696,"meta":16,"title":697,"url":698,"ratio":699,"order":225,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":700,"updatedAt":701,"publishedAt":702,"locale":11,"image":703},"p31wxun771hlkleznnf8pffw","MSK Vue","Nuxt 3 as the base of a page and form builder","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=2Hph8w81VgY","1024 \u002F 682","2026-10-27T11:56:45.822Z","2026-10-27T12:06:29.479Z","2026-10-27T12:06:29.483Z",{"id":195,"documentId":704,"name":705,"alternativeText":706,"caption":16,"focalPoint":16,"width":610,"height":707,"formats":708,"hash":736,"ext":34,"mime":37,"size":737,"url":738,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":739,"updatedAt":739,"publishedAt":739},"taju8l5obnuu3pj1fyl1wxty","blog-msk-vue-nuxt.jpg","Nuxt 3 как основа конструктора страниц и форм",682,{"large":709,"small":716,"medium":723,"thumbnail":729},{"ext":34,"url":710,"hash":711,"mime":37,"name":712,"path":16,"size":713,"width":40,"height":714,"sizeInBytes":715},"\u002Fuploads\u002Flarge_blog_msk_vue_nuxt_ce04481823.jpg","large_blog_msk_vue_nuxt_ce04481823","large_blog-msk-vue-nuxt.jpg",51.68,666,51683,{"ext":34,"url":717,"hash":718,"mime":37,"name":719,"path":16,"size":720,"width":48,"height":721,"sizeInBytes":722},"\u002Fuploads\u002Fsmall_blog_msk_vue_nuxt_ce04481823.jpg","small_blog_msk_vue_nuxt_ce04481823","small_blog-msk-vue-nuxt.jpg",17.6,333,17604,{"ext":34,"url":724,"hash":725,"mime":37,"name":726,"path":16,"size":727,"width":56,"height":48,"sizeInBytes":728},"\u002Fuploads\u002Fmedium_blog_msk_vue_nuxt_ce04481823.jpg","medium_blog_msk_vue_nuxt_ce04481823","medium_blog-msk-vue-nuxt.jpg",32.7,32701,{"ext":34,"url":730,"hash":731,"mime":37,"name":732,"path":16,"size":733,"width":734,"height":169,"sizeInBytes":735},"\u002Fuploads\u002Fthumbnail_blog_msk_vue_nuxt_ce04481823.jpg","thumbnail_blog_msk_vue_nuxt_ce04481823","thumbnail_blog-msk-vue-nuxt.jpg",6.08,234,6084,"blog_msk_vue_nuxt_ce04481823",54.67,"\u002Fuploads\u002Fblog_msk_vue_nuxt_ce04481823.jpg","2026-10-26T22:31:57.679Z",{"id":423,"documentId":741,"kind":596,"typeLabel":597,"source":742,"venue":743,"meta":16,"title":744,"url":745,"ratio":746,"order":233,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":747,"updatedAt":748,"publishedAt":749,"locale":11,"image":750},"szsz980l1l26fjs5fevhrfex","VK Video","Evrone \u002F Innopolis","A development department without a backend: growing the frontend and saving the client's budget","https:\u002F\u002Fvk.com\u002Fvideo-117095393_456239224","1024 \u002F 575","2026-10-27T11:56:45.832Z","2026-10-27T12:06:29.488Z","2026-10-27T12:06:29.493Z",{"id":4,"documentId":751,"name":752,"alternativeText":753,"caption":16,"focalPoint":16,"width":610,"height":754,"formats":755,"hash":781,"ext":34,"mime":37,"size":782,"url":783,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":784,"updatedAt":784,"publishedAt":785},"acssc4e26znnp3mwok3sqt07","blog-no-backend-dept.jpg","Отдел разработки без бэкенда: растим фронтенд и сохраняем бюджет клиента",575,{"large":756,"small":762,"medium":768,"thumbnail":775},{"ext":34,"url":757,"hash":758,"mime":37,"name":759,"path":16,"size":760,"width":40,"height":395,"sizeInBytes":761},"\u002Fuploads\u002Flarge_blog_no_backend_dept_0dce14b8c0.jpg","large_blog_no_backend_dept_0dce14b8c0","large_blog-no-backend-dept.jpg",34.36,34364,{"ext":34,"url":763,"hash":764,"mime":37,"name":765,"path":16,"size":766,"width":48,"height":402,"sizeInBytes":767},"\u002Fuploads\u002Fsmall_blog_no_backend_dept_0dce14b8c0.jpg","small_blog_no_backend_dept_0dce14b8c0","small_blog-no-backend-dept.jpg",13.15,13145,{"ext":34,"url":769,"hash":770,"mime":37,"name":771,"path":16,"size":772,"width":56,"height":773,"sizeInBytes":774},"\u002Fuploads\u002Fmedium_blog_no_backend_dept_0dce14b8c0.jpg","medium_blog_no_backend_dept_0dce14b8c0","medium_blog-no-backend-dept.jpg",22.72,421,22722,{"ext":34,"url":776,"hash":777,"mime":37,"name":778,"path":16,"size":779,"width":64,"height":289,"sizeInBytes":780},"\u002Fuploads\u002Fthumbnail_blog_no_backend_dept_0dce14b8c0.jpg","thumbnail_blog_no_backend_dept_0dce14b8c0","thumbnail_blog-no-backend-dept.jpg",5.22,5224,"blog_no_backend_dept_0dce14b8c0",35.34,"\u002Fuploads\u002Fblog_no_backend_dept_0dce14b8c0.jpg","2026-10-26T22:31:57.738Z","2026-10-26T22:31:57.739Z",{"id":787,"documentId":788,"kind":596,"typeLabel":789,"source":598,"venue":790,"meta":16,"title":791,"url":792,"ratio":699,"order":195,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":793,"updatedAt":794,"publishedAt":795,"locale":11,"image":796},33,"tv2agii5fybwgnpmhvwpxzma","Meetup","Work Solutions \u002F Strapi","Multilingual content without pain: i18n in action","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1tq4Ic-fAmM","2026-10-27T11:56:45.844Z","2026-10-27T12:06:29.499Z","2026-10-27T12:06:29.503Z",{"id":134,"documentId":797,"name":798,"alternativeText":799,"caption":16,"focalPoint":16,"width":610,"height":707,"formats":800,"hash":825,"ext":34,"mime":37,"size":826,"url":827,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":828,"updatedAt":828,"publishedAt":829},"l1fmihvyd5ha0pgt5wez63dz","blog-i18n-youtube.jpg","Многоязычный контент без боли: i18n в действии",{"large":801,"small":807,"medium":813,"thumbnail":819},{"ext":34,"url":802,"hash":803,"mime":37,"name":804,"path":16,"size":805,"width":40,"height":714,"sizeInBytes":806},"\u002Fuploads\u002Flarge_blog_i18n_youtube_cc96cb58c2.jpg","large_blog_i18n_youtube_cc96cb58c2","large_blog-i18n-youtube.jpg",97.17,97167,{"ext":34,"url":808,"hash":809,"mime":37,"name":810,"path":16,"size":811,"width":48,"height":721,"sizeInBytes":812},"\u002Fuploads\u002Fsmall_blog_i18n_youtube_cc96cb58c2.jpg","small_blog_i18n_youtube_cc96cb58c2","small_blog-i18n-youtube.jpg",29.89,29890,{"ext":34,"url":814,"hash":815,"mime":37,"name":816,"path":16,"size":817,"width":56,"height":48,"sizeInBytes":818},"\u002Fuploads\u002Fmedium_blog_i18n_youtube_cc96cb58c2.jpg","medium_blog_i18n_youtube_cc96cb58c2","medium_blog-i18n-youtube.jpg",58.49,58491,{"ext":34,"url":820,"hash":821,"mime":37,"name":822,"path":16,"size":823,"width":734,"height":169,"sizeInBytes":824},"\u002Fuploads\u002Fthumbnail_blog_i18n_youtube_cc96cb58c2.jpg","thumbnail_blog_i18n_youtube_cc96cb58c2","thumbnail_blog-i18n-youtube.jpg",8.87,8871,"blog_i18n_youtube_cc96cb58c2",103.6,"\u002Fuploads\u002Fblog_i18n_youtube_cc96cb58c2.jpg","2026-10-26T22:31:57.811Z","2026-10-26T22:31:57.812Z",{"id":18,"documentId":831,"kind":647,"typeLabel":648,"source":127,"venue":16,"meta":832,"title":833,"url":834,"ratio":835,"order":4,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":836,"updatedAt":837,"publishedAt":838,"locale":11,"image":839},"b679q6ea7e4om1dn3phdelaz","2 min · 20,000 views","Vue, React or Angular: which stack is used in Russia. 180 websites analysed","https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F679150\u002F","477 \u002F 370","2026-10-27T11:56:45.854Z","2026-10-27T12:06:29.508Z","2026-10-27T12:06:29.512Z",{"id":840,"documentId":841,"name":842,"alternativeText":843,"caption":16,"focalPoint":16,"width":844,"height":845,"formats":846,"hash":856,"ext":848,"mime":851,"size":857,"url":858,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":859,"updatedAt":859,"publishedAt":859},7,"eq7rgejgjs0wryiiwrvwypop","blog-vue-react-angular-stack-table.png","Vue, React или Angular: какой стек используют в России. Проанализировал 180 сайтов",477,370,{"thumbnail":847},{"ext":848,"url":849,"hash":850,"mime":851,"name":852,"path":16,"size":853,"width":854,"height":169,"sizeInBytes":855},".png","\u002Fuploads\u002Fthumbnail_blog_vue_react_angular_stack_table_6be12d2ca2.png","thumbnail_blog_vue_react_angular_stack_table_6be12d2ca2","image\u002Fpng","thumbnail_blog-vue-react-angular-stack-table.png",13.51,201,13506,"blog_vue_react_angular_stack_table_6be12d2ca2",8.21,"\u002Fuploads\u002Fblog_vue_react_angular_stack_table_6be12d2ca2.png","2026-10-26T22:31:57.858Z",{"id":210,"documentId":861,"kind":647,"typeLabel":648,"source":127,"venue":16,"meta":862,"title":863,"url":864,"ratio":865,"order":134,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":866,"updatedAt":867,"publishedAt":868,"locale":11,"image":869},"h9dqqfg5jjtg3gntseara1nl","5 min · 12,000 views","A healthy dose of Vue. How to choose between React and Angular","https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F677896\u002F","1024 \u002F 594","2026-10-27T11:56:45.864Z","2026-10-27T12:06:29.518Z","2026-10-27T12:06:29.522Z",{"id":870,"documentId":871,"name":872,"alternativeText":873,"caption":16,"focalPoint":16,"width":610,"height":874,"formats":875,"hash":903,"ext":34,"mime":37,"size":904,"url":905,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":906,"updatedAt":906,"publishedAt":906},8,"fznuvo9ba1hg7jbhdcyvq1bl","blog-habr-vue-pragmatica.jpg","Vue здорового pragmatica. Как правильно делать выбор между React и Angular",594,{"large":876,"small":883,"medium":890,"thumbnail":897},{"ext":34,"url":877,"hash":878,"mime":37,"name":879,"path":16,"size":880,"width":40,"height":881,"sizeInBytes":882},"\u002Fuploads\u002Flarge_blog_habr_vue_pragmatica_521a609d9d.jpg","large_blog_habr_vue_pragmatica_521a609d9d","large_blog-habr-vue-pragmatica.jpg",67.42,580,67416,{"ext":34,"url":884,"hash":885,"mime":37,"name":886,"path":16,"size":887,"width":48,"height":888,"sizeInBytes":889},"\u002Fuploads\u002Fsmall_blog_habr_vue_pragmatica_521a609d9d.jpg","small_blog_habr_vue_pragmatica_521a609d9d","small_blog-habr-vue-pragmatica.jpg",27.06,290,27059,{"ext":34,"url":891,"hash":892,"mime":37,"name":893,"path":16,"size":894,"width":56,"height":895,"sizeInBytes":896},"\u002Fuploads\u002Fmedium_blog_habr_vue_pragmatica_521a609d9d.jpg","medium_blog_habr_vue_pragmatica_521a609d9d","medium_blog-habr-vue-pragmatica.jpg",45.84,435,45838,{"ext":34,"url":898,"hash":899,"mime":37,"name":900,"path":16,"size":901,"width":64,"height":688,"sizeInBytes":902},"\u002Fuploads\u002Fthumbnail_blog_habr_vue_pragmatica_521a609d9d.jpg","thumbnail_blog_habr_vue_pragmatica_521a609d9d","thumbnail_blog-habr-vue-pragmatica.jpg",9.07,9067,"blog_habr_vue_pragmatica_521a609d9d",67.86,"\u002Fuploads\u002Fblog_habr_vue_pragmatica_521a609d9d.jpg","2026-10-26T22:31:57.921Z",{"id":202,"documentId":908,"kind":909,"typeLabel":910,"source":131,"venue":911,"meta":16,"title":912,"url":913,"ratio":914,"order":840,"slug":16,"lede":16,"body":16,"publishedDate":16,"readingTime":16,"createdAt":915,"updatedAt":916,"publishedAt":917,"locale":11,"image":918},"fq5vlio3l1b1vuiarpjppsse","oss","Post","Open Source","We released an open-source library for Vue.js — vue-wave-player","https:\u002F\u002Ft.me\u002Ffrontend_lite\u002F150","689 \u002F 414","2026-10-27T11:56:45.877Z","2026-10-27T12:06:29.529Z","2026-10-27T12:06:29.531Z",{"id":154,"documentId":919,"name":920,"alternativeText":921,"caption":16,"focalPoint":16,"width":922,"height":923,"formats":924,"hash":939,"ext":848,"mime":851,"size":940,"url":941,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":942,"updatedAt":942,"publishedAt":942},"izj09dbhzewdtxqwnjxcolir","blog-vue-audio-player-oss.png","Выпустили в open-source библиотеку для Vue.js — vue-wave-player",689,414,{"small":925,"thumbnail":932},{"ext":848,"url":926,"hash":927,"mime":851,"name":928,"path":16,"size":929,"width":48,"height":930,"sizeInBytes":931},"\u002Fuploads\u002Fsmall_blog_vue_audio_player_oss_15d062f3bc.png","small_blog_vue_audio_player_oss_15d062f3bc","small_blog-vue-audio-player-oss.png",49.44,300,49440,{"ext":848,"url":933,"hash":934,"mime":851,"name":935,"path":16,"size":936,"width":64,"height":937,"sizeInBytes":938},"\u002Fuploads\u002Fthumbnail_blog_vue_audio_player_oss_15d062f3bc.png","thumbnail_blog_vue_audio_player_oss_15d062f3bc","thumbnail_blog-vue-audio-player-oss.png",20.24,147,20238,"blog_vue_audio_player_oss_15d062f3bc",8.74,"\u002Fuploads\u002Fblog_vue_audio_player_oss_15d062f3bc.png","2026-10-26T22:31:57.980Z",[944,1029,1094,1159,1270,1335,1402,1468,1507,1617,1679,1735],{"id":158,"documentId":945,"title":946,"slug":947,"lede":948,"desc":949,"collab":77,"order":182,"tags":950,"points":960,"slides":975,"cover":1019,"partner":16,"categories":1025},"g81budr6atjyj7c003mjw16y","Customer account for the Luzhniki Tennis Club","luzhniki","","Court booking, 1C:Fitness integration, profile, payments and visit history.",[951,954,957],{"id":952,"label":953},122,"TKL.RF",{"id":955,"label":956},123,"Sports",{"id":958,"label":959},124,"1C integration",[961,963,966,969,972],{"id":639,"text":962},"Booking system",{"id":964,"text":965},222,"1C:Fitness integration",{"id":967,"text":968},223,"Sign-up and profile editing",{"id":970,"text":971},224,"Payments",{"id":973,"text":974},225,"Visit history",[976,982],{"id":381,"documentId":382,"name":383,"alternativeText":384,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":977,"hash":417,"ext":389,"mime":392,"size":418,"url":419,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":420,"updatedAt":420,"publishedAt":420},{"large":978,"small":979,"medium":980,"thumbnail":981},{"ext":389,"url":390,"hash":391,"mime":392,"name":393,"path":16,"size":394,"width":40,"height":395,"sizeInBytes":396},{"ext":389,"url":398,"hash":399,"mime":392,"name":400,"path":16,"size":401,"width":48,"height":402,"sizeInBytes":403},{"ext":389,"url":405,"hash":406,"mime":392,"name":407,"path":16,"size":408,"width":56,"height":409,"sizeInBytes":410},{"ext":389,"url":412,"hash":413,"mime":392,"name":414,"path":16,"size":415,"width":64,"height":293,"sizeInBytes":416},{"id":524,"documentId":983,"name":984,"alternativeText":384,"caption":16,"focalPoint":16,"width":985,"height":986,"formats":987,"hash":1015,"ext":389,"mime":392,"size":1016,"url":1017,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1018,"updatedAt":1018,"publishedAt":1018},"rwafok0cke6f44570471ll5t","luzhniki-booking.webp",2000,987,{"large":988,"small":995,"medium":1002,"thumbnail":1008},{"ext":389,"url":989,"hash":990,"mime":392,"name":991,"path":16,"size":992,"width":40,"height":993,"sizeInBytes":994},"\u002Fuploads\u002Flarge_luzhniki_booking_e64bdfa8c7.webp","large_luzhniki_booking_e64bdfa8c7","large_luzhniki-booking.webp",20.14,494,20140,{"ext":389,"url":996,"hash":997,"mime":392,"name":998,"path":16,"size":999,"width":48,"height":1000,"sizeInBytes":1001},"\u002Fuploads\u002Fsmall_luzhniki_booking_e64bdfa8c7.webp","small_luzhniki_booking_e64bdfa8c7","small_luzhniki-booking.webp",7.15,247,7148,{"ext":389,"url":1003,"hash":1004,"mime":392,"name":1005,"path":16,"size":1006,"width":56,"height":845,"sizeInBytes":1007},"\u002Fuploads\u002Fmedium_luzhniki_booking_e64bdfa8c7.webp","medium_luzhniki_booking_e64bdfa8c7","medium_luzhniki-booking.webp",13.38,13382,{"ext":389,"url":1009,"hash":1010,"mime":392,"name":1011,"path":16,"size":1012,"width":64,"height":1013,"sizeInBytes":1014},"\u002Fuploads\u002Fthumbnail_luzhniki_booking_e64bdfa8c7.webp","thumbnail_luzhniki_booking_e64bdfa8c7","thumbnail_luzhniki-booking.webp",2.63,121,2634,"luzhniki_booking_e64bdfa8c7",49.63,"\u002Fuploads\u002Fluzhniki_booking_e64bdfa8c7.webp","2026-10-26T22:31:58.477Z",{"id":381,"documentId":382,"name":383,"alternativeText":384,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":1020,"hash":417,"ext":389,"mime":392,"size":418,"url":419,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":420,"updatedAt":420,"publishedAt":420},{"large":1021,"small":1022,"medium":1023,"thumbnail":1024},{"ext":389,"url":390,"hash":391,"mime":392,"name":393,"path":16,"size":394,"width":40,"height":395,"sizeInBytes":396},{"ext":389,"url":398,"hash":399,"mime":392,"name":400,"path":16,"size":401,"width":48,"height":402,"sizeInBytes":403},{"ext":389,"url":405,"hash":406,"mime":392,"name":407,"path":16,"size":408,"width":56,"height":409,"sizeInBytes":410},{"ext":389,"url":412,"hash":413,"mime":392,"name":414,"path":16,"size":415,"width":64,"height":293,"sizeInBytes":416},[1026],{"id":177,"documentId":1027,"slug":1028},"tanodytymqmx8fmdfitrupv8","crm",{"id":1030,"documentId":1031,"title":1032,"slug":1033,"lede":1034,"desc":1034,"collab":77,"order":216,"tags":1035,"points":1041,"slides":1051,"cover":1086,"partner":16,"categories":1092},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.",[1036,1038],{"id":1037,"label":523},481,{"id":1039,"label":1040},482,"Education",[1042,1045,1048],{"id":1043,"text":1044},378,"Frontend stack migration to Vue.js",{"id":1046,"text":1047},379,"Modular system introduced",{"id":1049,"text":1050},380,"Reactive forms, recurring lessons",[1052],{"id":1053,"documentId":1054,"name":1055,"alternativeText":1056,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":1057,"hash":1082,"ext":389,"mime":392,"size":1083,"url":1084,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1085,"updatedAt":1085,"publishedAt":1085},12,"oepj2jygdk1n4z0b7wxud8tm","virtuozy-laptop.webp","3 года развиваем CRM сети музыкальных школ «Виртуозы»",{"large":1058,"small":1064,"medium":1070,"thumbnail":1076},{"ext":389,"url":1059,"hash":1060,"mime":392,"name":1061,"path":16,"size":1062,"width":40,"height":395,"sizeInBytes":1063},"\u002Fuploads\u002Flarge_virtuozy_laptop_ceee7f8cbb.webp","large_virtuozy_laptop_ceee7f8cbb","large_virtuozy-laptop.webp",32.99,32994,{"ext":389,"url":1065,"hash":1066,"mime":392,"name":1067,"path":16,"size":1068,"width":48,"height":402,"sizeInBytes":1069},"\u002Fuploads\u002Fsmall_virtuozy_laptop_ceee7f8cbb.webp","small_virtuozy_laptop_ceee7f8cbb","small_virtuozy-laptop.webp",13.39,13394,{"ext":389,"url":1071,"hash":1072,"mime":392,"name":1073,"path":16,"size":1074,"width":56,"height":409,"sizeInBytes":1075},"\u002Fuploads\u002Fmedium_virtuozy_laptop_ceee7f8cbb.webp","medium_virtuozy_laptop_ceee7f8cbb","medium_virtuozy-laptop.webp",23.22,23220,{"ext":389,"url":1077,"hash":1078,"mime":392,"name":1079,"path":16,"size":1080,"width":64,"height":293,"sizeInBytes":1081},"\u002Fuploads\u002Fthumbnail_virtuozy_laptop_ceee7f8cbb.webp","thumbnail_virtuozy_laptop_ceee7f8cbb","thumbnail_virtuozy-laptop.webp",5.21,5212,"virtuozy_laptop_ceee7f8cbb",66.57,"\u002Fuploads\u002Fvirtuozy_laptop_ceee7f8cbb.webp","2026-10-26T22:31:58.739Z",{"id":1053,"documentId":1054,"name":1055,"alternativeText":1056,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":1087,"hash":1082,"ext":389,"mime":392,"size":1083,"url":1084,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1085,"updatedAt":1085,"publishedAt":1085},{"large":1088,"small":1089,"medium":1090,"thumbnail":1091},{"ext":389,"url":1059,"hash":1060,"mime":392,"name":1061,"path":16,"size":1062,"width":40,"height":395,"sizeInBytes":1063},{"ext":389,"url":1065,"hash":1066,"mime":392,"name":1067,"path":16,"size":1068,"width":48,"height":402,"sizeInBytes":1069},{"ext":389,"url":1071,"hash":1072,"mime":392,"name":1073,"path":16,"size":1074,"width":56,"height":409,"sizeInBytes":1075},{"ext":389,"url":1077,"hash":1078,"mime":392,"name":1079,"path":16,"size":1080,"width":64,"height":293,"sizeInBytes":1081},[1093],{"id":177,"documentId":1027,"slug":1028},{"id":1095,"documentId":1096,"title":1097,"slug":1098,"lede":1099,"desc":1099,"collab":77,"order":225,"tags":1100,"points":1110,"slides":1116,"cover":1149,"partner":16,"categories":1155},54,"jf35hvefa8t9rhg8jii1vxs3","Extended the online store of sports brand Vetersport","vetersport","Added bundles and discounts and sped up the site before Black Friday.",[1101,1104,1107],{"id":1102,"label":1103},489,"Vetersport",{"id":1105,"label":1106},490,"Online store",{"id":1108,"label":1109},491,"Retail",[1111,1114],{"id":1112,"text":1113},413,"Connected an address and data suggestion service for forms",{"id":923,"text":1115},"Moved file uploads to S3 cloud storage",[1117],{"id":177,"documentId":1118,"name":1119,"alternativeText":1120,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":1121,"hash":1145,"ext":389,"mime":392,"size":1146,"url":1147,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1148,"updatedAt":1148,"publishedAt":1148},"fgctemnasxypnn1xc1g8hxy8","vetersport-laptop.webp","Расширили функционал интернет-магазина производителя Ветерспорт",{"large":1122,"small":1128,"medium":1134,"thumbnail":1140},{"ext":389,"url":1123,"hash":1124,"mime":392,"name":1125,"path":16,"size":1126,"width":40,"height":395,"sizeInBytes":1127},"\u002Fuploads\u002Flarge_vetersport_laptop_0a3b6dc2cd.webp","large_vetersport_laptop_0a3b6dc2cd","large_vetersport-laptop.webp",27.51,27514,{"ext":389,"url":1129,"hash":1130,"mime":392,"name":1131,"path":16,"size":1132,"width":48,"height":402,"sizeInBytes":1133},"\u002Fuploads\u002Fsmall_vetersport_laptop_0a3b6dc2cd.webp","small_vetersport_laptop_0a3b6dc2cd","small_vetersport-laptop.webp",12.07,12072,{"ext":389,"url":1135,"hash":1136,"mime":392,"name":1137,"path":16,"size":1138,"width":56,"height":409,"sizeInBytes":1139},"\u002Fuploads\u002Fmedium_vetersport_laptop_0a3b6dc2cd.webp","medium_vetersport_laptop_0a3b6dc2cd","medium_vetersport-laptop.webp",19.85,19848,{"ext":389,"url":1141,"hash":1142,"mime":392,"name":1143,"path":16,"size":1080,"width":64,"height":293,"sizeInBytes":1144},"\u002Fuploads\u002Fthumbnail_vetersport_laptop_0a3b6dc2cd.webp","thumbnail_vetersport_laptop_0a3b6dc2cd","thumbnail_vetersport-laptop.webp",5210,"vetersport_laptop_0a3b6dc2cd",51.76,"\u002Fuploads\u002Fvetersport_laptop_0a3b6dc2cd.webp","2026-10-26T22:31:58.988Z",{"id":177,"documentId":1118,"name":1119,"alternativeText":1120,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":1150,"hash":1145,"ext":389,"mime":392,"size":1146,"url":1147,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1148,"updatedAt":1148,"publishedAt":1148},{"large":1151,"small":1152,"medium":1153,"thumbnail":1154},{"ext":389,"url":1123,"hash":1124,"mime":392,"name":1125,"path":16,"size":1126,"width":40,"height":395,"sizeInBytes":1127},{"ext":389,"url":1129,"hash":1130,"mime":392,"name":1131,"path":16,"size":1132,"width":48,"height":402,"sizeInBytes":1133},{"ext":389,"url":1135,"hash":1136,"mime":392,"name":1137,"path":16,"size":1138,"width":56,"height":409,"sizeInBytes":1139},{"ext":389,"url":1141,"hash":1142,"mime":392,"name":1143,"path":16,"size":1080,"width":64,"height":293,"sizeInBytes":1144},[1156],{"id":184,"documentId":1157,"slug":1158},"lko2vn42mhotyi1l1swd5gxi","sites",{"id":1160,"documentId":1161,"title":1162,"slug":1163,"lede":1164,"desc":1164,"collab":113,"order":233,"tags":1165,"points":1172,"slides":1185,"cover":1254,"partner":1260,"categories":1263},43,"dz53r8mitt3dtxzu29ni7apu","An onboarding game for a loyalty programme","more-vygody","A web game that onboards customers into the bank's loyalty system.",[1166,1168,1170],{"id":103,"label":1167},"Alfa-Bank",{"id":106,"label":1169},"“Sea of Benefits”",{"id":110,"label":1171},"Fintech",[1173,1176,1179,1182],{"id":1174,"text":1175},320,"A quiz about points gives attempts to “cast the line”",{"id":1177,"text":1178},321,"Fishing with collectible items and prizes",{"id":1180,"text":1181},322,"Collection and achievement screens",{"id":1183,"text":1184},323,"User behaviour analytics",[1186,1218],{"id":184,"documentId":1187,"name":1188,"alternativeText":1189,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1190,"hash":1214,"ext":34,"mime":37,"size":1215,"url":1216,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1217,"updatedAt":1217,"publishedAt":1217},"iopyhg9unqem19v5fxg7a1t0","alfa-more-vygody.jpg","Игра для онбординга в программу лояльности",{"large":1191,"small":1197,"medium":1203,"thumbnail":1209},{"ext":34,"url":1192,"hash":1193,"mime":37,"name":1194,"path":16,"size":1195,"width":40,"height":41,"sizeInBytes":1196},"\u002Fuploads\u002Flarge_alfa_more_vygody_a40f2b5e07.jpg","large_alfa_more_vygody_a40f2b5e07","large_alfa-more-vygody.jpg",62.26,62259,{"ext":34,"url":1198,"hash":1199,"mime":37,"name":1200,"path":16,"size":1201,"width":48,"height":327,"sizeInBytes":1202},"\u002Fuploads\u002Fsmall_alfa_more_vygody_a40f2b5e07.jpg","small_alfa_more_vygody_a40f2b5e07","small_alfa-more-vygody.jpg",21.68,21681,{"ext":34,"url":1204,"hash":1205,"mime":37,"name":1206,"path":16,"size":1207,"width":56,"height":57,"sizeInBytes":1208},"\u002Fuploads\u002Fmedium_alfa_more_vygody_a40f2b5e07.jpg","medium_alfa_more_vygody_a40f2b5e07","medium_alfa-more-vygody.jpg",40.2,40195,{"ext":34,"url":1210,"hash":1211,"mime":37,"name":1212,"path":16,"size":999,"width":64,"height":254,"sizeInBytes":1213},"\u002Fuploads\u002Fthumbnail_alfa_more_vygody_a40f2b5e07.jpg","thumbnail_alfa_more_vygody_a40f2b5e07","thumbnail_alfa-more-vygody.jpg",7147,"alfa_more_vygody_a40f2b5e07",113.12,"\u002Fuploads\u002Falfa_more_vygody_a40f2b5e07.jpg","2026-10-26T22:31:59.106Z",{"id":190,"documentId":1219,"name":1220,"alternativeText":1189,"caption":16,"focalPoint":16,"width":1221,"height":1222,"formats":1223,"hash":1250,"ext":34,"mime":37,"size":1251,"url":1252,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1253,"updatedAt":1253,"publishedAt":1253},"flis01idcvbjx8027ys4enxt","more-vygody-screens.jpg",2400,1284,{"large":1224,"small":1231,"medium":1237,"thumbnail":1244},{"ext":34,"url":1225,"hash":1226,"mime":37,"name":1227,"path":16,"size":1228,"width":40,"height":1229,"sizeInBytes":1230},"\u002Fuploads\u002Flarge_more_vygody_screens_3ac7b0bc6f.jpg","large_more_vygody_screens_3ac7b0bc6f","large_more-vygody-screens.jpg",74.94,535,74940,{"ext":34,"url":1232,"hash":1233,"mime":37,"name":1234,"path":16,"size":1235,"width":48,"height":307,"sizeInBytes":1236},"\u002Fuploads\u002Fsmall_more_vygody_screens_3ac7b0bc6f.jpg","small_more_vygody_screens_3ac7b0bc6f","small_more-vygody-screens.jpg",27.25,27246,{"ext":34,"url":1238,"hash":1239,"mime":37,"name":1240,"path":16,"size":1241,"width":56,"height":1242,"sizeInBytes":1243},"\u002Fuploads\u002Fmedium_more_vygody_screens_3ac7b0bc6f.jpg","medium_more_vygody_screens_3ac7b0bc6f","medium_more-vygody-screens.jpg",49.52,401,49524,{"ext":34,"url":1245,"hash":1246,"mime":37,"name":1247,"path":16,"size":1248,"width":64,"height":265,"sizeInBytes":1249},"\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":1187,"name":1188,"alternativeText":1189,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1255,"hash":1214,"ext":34,"mime":37,"size":1215,"url":1216,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1217,"updatedAt":1217,"publishedAt":1217},{"large":1256,"small":1257,"medium":1258,"thumbnail":1259},{"ext":34,"url":1192,"hash":1193,"mime":37,"name":1194,"path":16,"size":1195,"width":40,"height":41,"sizeInBytes":1196},{"ext":34,"url":1198,"hash":1199,"mime":37,"name":1200,"path":16,"size":1201,"width":48,"height":327,"sizeInBytes":1202},{"ext":34,"url":1204,"hash":1205,"mime":37,"name":1206,"path":16,"size":1207,"width":56,"height":57,"sizeInBytes":1208},{"ext":34,"url":1210,"hash":1211,"mime":37,"name":1212,"path":16,"size":999,"width":64,"height":254,"sizeInBytes":1213},{"id":195,"documentId":1261,"name":1262},"aftb92nnhw9ls4rpwg67z6o7","Pragmatica",[1264,1267],{"id":190,"documentId":1265,"slug":1266},"px7ocjz6yw8c5f1dv9lhszzc","games",{"id":1268,"documentId":1269,"slug":230},16,"p0gjo9lj5uk1xox3vvfqxjmh",{"id":1271,"documentId":1272,"title":1273,"slug":1274,"lede":1275,"desc":1275,"collab":113,"order":195,"tags":1276,"points":1283,"slides":1290,"cover":1325,"partner":1331,"categories":1332},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.",[1277,1280],{"id":1278,"label":1279},483,"Raiffeisen Life",{"id":1281,"label":1282},484,"Insurance",[1284,1287],{"id":1285,"text":1286},387,"Policy calculators",{"id":1288,"text":1289},388,"Insured-event scenarios",[1291],{"id":1292,"documentId":1293,"name":1294,"alternativeText":1295,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":1296,"hash":1321,"ext":389,"mime":392,"size":1322,"url":1323,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1324,"updatedAt":1324,"publishedAt":1324},18,"erkuhx09vnbzhocyritt9cga","raiffeisen-laptop.webp","Калькуляторы и сервисы для страховой компании",{"large":1297,"small":1303,"medium":1309,"thumbnail":1315},{"ext":389,"url":1298,"hash":1299,"mime":392,"name":1300,"path":16,"size":1301,"width":40,"height":395,"sizeInBytes":1302},"\u002Fuploads\u002Flarge_raiffeisen_laptop_8eebfcc8da.webp","large_raiffeisen_laptop_8eebfcc8da","large_raiffeisen-laptop.webp",25.82,25824,{"ext":389,"url":1304,"hash":1305,"mime":392,"name":1306,"path":16,"size":1307,"width":48,"height":402,"sizeInBytes":1308},"\u002Fuploads\u002Fsmall_raiffeisen_laptop_8eebfcc8da.webp","small_raiffeisen_laptop_8eebfcc8da","small_raiffeisen-laptop.webp",10.66,10658,{"ext":389,"url":1310,"hash":1311,"mime":392,"name":1312,"path":16,"size":1313,"width":56,"height":409,"sizeInBytes":1314},"\u002Fuploads\u002Fmedium_raiffeisen_laptop_8eebfcc8da.webp","medium_raiffeisen_laptop_8eebfcc8da","medium_raiffeisen-laptop.webp",18.15,18152,{"ext":389,"url":1316,"hash":1317,"mime":392,"name":1318,"path":16,"size":1319,"width":64,"height":293,"sizeInBytes":1320},"\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":1292,"documentId":1293,"name":1294,"alternativeText":1295,"caption":16,"focalPoint":16,"width":385,"height":386,"formats":1326,"hash":1321,"ext":389,"mime":392,"size":1322,"url":1323,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1324,"updatedAt":1324,"publishedAt":1324},{"large":1327,"small":1328,"medium":1329,"thumbnail":1330},{"ext":389,"url":1298,"hash":1299,"mime":392,"name":1300,"path":16,"size":1301,"width":40,"height":395,"sizeInBytes":1302},{"ext":389,"url":1304,"hash":1305,"mime":392,"name":1306,"path":16,"size":1307,"width":48,"height":402,"sizeInBytes":1308},{"ext":389,"url":1310,"hash":1311,"mime":392,"name":1312,"path":16,"size":1313,"width":56,"height":409,"sizeInBytes":1314},{"ext":389,"url":1316,"hash":1317,"mime":392,"name":1318,"path":16,"size":1319,"width":64,"height":293,"sizeInBytes":1320},{"id":195,"documentId":1261,"name":1262},[1333,1334],{"id":190,"documentId":1265,"slug":1266},{"id":1268,"documentId":1269,"slug":230},{"id":1336,"documentId":1337,"title":1338,"slug":1339,"lede":1340,"desc":1340,"collab":113,"order":4,"tags":1341,"points":1346,"slides":1355,"cover":1393,"partner":1399,"categories":1400},44,"mdr5m390jta7okrng52xusvy","A quiz that recommends the Alfa card","atlas","A web quiz game with card-swipe mechanics that unlocks locations as you progress.",[1342,1343,1345],{"id":140,"label":1167},{"id":142,"label":1344},"“Atlas”",{"id":145,"label":1171},[1347,1350,1353],{"id":1348,"text":1349},331,"Questions about geographic locations, answered with a swipe",{"id":1351,"text":1352},332,"A new location unlocks the day after a successful session",{"id":721,"text":1354},"Behaviour and key event analytics",[1356],{"id":1357,"documentId":1358,"name":1359,"alternativeText":1360,"caption":16,"focalPoint":16,"width":610,"height":1361,"formats":1362,"hash":1389,"ext":34,"mime":37,"size":1390,"url":1391,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1392,"updatedAt":1392,"publishedAt":1392},19,"r9g8z3qtrbtt8g088945ng5m","alfa-atlas.jpg","Квиз для рекомендаций Альфа-карты",537,{"large":1363,"small":1370,"medium":1376,"thumbnail":1383},{"ext":34,"url":1364,"hash":1365,"mime":37,"name":1366,"path":16,"size":1367,"width":40,"height":1368,"sizeInBytes":1369},"\u002Fuploads\u002Flarge_alfa_atlas_ddebcb2aae.jpg","large_alfa_atlas_ddebcb2aae","large_alfa-atlas.jpg",64.51,524,64513,{"ext":34,"url":1371,"hash":1372,"mime":37,"name":1373,"path":16,"size":1374,"width":48,"height":327,"sizeInBytes":1375},"\u002Fuploads\u002Fsmall_alfa_atlas_ddebcb2aae.jpg","small_alfa_atlas_ddebcb2aae","small_alfa-atlas.jpg",21.24,21237,{"ext":34,"url":1377,"hash":1378,"mime":37,"name":1379,"path":16,"size":1380,"width":56,"height":1381,"sizeInBytes":1382},"\u002Fuploads\u002Fmedium_alfa_atlas_ddebcb2aae.jpg","medium_alfa_atlas_ddebcb2aae","medium_alfa-atlas.jpg",39.63,393,39627,{"ext":34,"url":1384,"hash":1385,"mime":37,"name":1386,"path":16,"size":1387,"width":64,"height":254,"sizeInBytes":1388},"\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":1357,"documentId":1358,"name":1359,"alternativeText":1360,"caption":16,"focalPoint":16,"width":610,"height":1361,"formats":1394,"hash":1389,"ext":34,"mime":37,"size":1390,"url":1391,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1392,"updatedAt":1392,"publishedAt":1392},{"large":1395,"small":1396,"medium":1397,"thumbnail":1398},{"ext":34,"url":1364,"hash":1365,"mime":37,"name":1366,"path":16,"size":1367,"width":40,"height":1368,"sizeInBytes":1369},{"ext":34,"url":1371,"hash":1372,"mime":37,"name":1373,"path":16,"size":1374,"width":48,"height":327,"sizeInBytes":1375},{"ext":34,"url":1377,"hash":1378,"mime":37,"name":1379,"path":16,"size":1380,"width":56,"height":1381,"sizeInBytes":1382},{"ext":34,"url":1384,"hash":1385,"mime":37,"name":1386,"path":16,"size":1387,"width":64,"height":254,"sizeInBytes":1388},{"id":195,"documentId":1261,"name":1262},[1401],{"id":184,"documentId":1157,"slug":1158},{"id":1403,"documentId":1404,"title":1405,"slug":1406,"lede":1407,"desc":1407,"collab":113,"order":134,"tags":1408,"points":1417,"slides":1424,"cover":1459,"partner":1465,"categories":1466},55,"tq1mf6bpc2x9nk1gfgzkdzh6","Creative frontend for the Heritage art gallery","heritage","The site presents exhibitions, a catalogue of pieces and online purchase through a cart.",[1409,1412,1415],{"id":1410,"label":1411},492,"Heritage",{"id":1413,"label":1414},493,"Art gallery",{"id":993,"label":1416},"Culture",[1418,1421],{"id":1419,"text":1420},426,"22 functional pages",{"id":1422,"text":1423},427,"Catalogue with a filter and a cart",[1425],{"id":1426,"documentId":1427,"name":1428,"alternativeText":1429,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1430,"hash":1455,"ext":34,"mime":37,"size":1456,"url":1457,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1458,"updatedAt":1458,"publishedAt":1458},20,"bcrmlyyf9imr22aox6kntczr","heritage-gallery.jpg","Креативный фронтенд для арт-галереи Эритаж",{"large":1431,"small":1437,"medium":1443,"thumbnail":1449},{"ext":34,"url":1432,"hash":1433,"mime":37,"name":1434,"path":16,"size":1435,"width":40,"height":41,"sizeInBytes":1436},"\u002Fuploads\u002Flarge_heritage_gallery_29a47e9a87.jpg","large_heritage_gallery_29a47e9a87","large_heritage-gallery.jpg",48.83,48827,{"ext":34,"url":1438,"hash":1439,"mime":37,"name":1440,"path":16,"size":1441,"width":48,"height":327,"sizeInBytes":1442},"\u002Fuploads\u002Fsmall_heritage_gallery_29a47e9a87.jpg","small_heritage_gallery_29a47e9a87","small_heritage-gallery.jpg",18.56,18563,{"ext":34,"url":1444,"hash":1445,"mime":37,"name":1446,"path":16,"size":1447,"width":56,"height":57,"sizeInBytes":1448},"\u002Fuploads\u002Fmedium_heritage_gallery_29a47e9a87.jpg","medium_heritage_gallery_29a47e9a87","medium_heritage-gallery.jpg",32.86,32860,{"ext":34,"url":1450,"hash":1451,"mime":37,"name":1452,"path":16,"size":1453,"width":64,"height":254,"sizeInBytes":1454},"\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":1426,"documentId":1427,"name":1428,"alternativeText":1429,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1460,"hash":1455,"ext":34,"mime":37,"size":1456,"url":1457,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1458,"updatedAt":1458,"publishedAt":1458},{"large":1461,"small":1462,"medium":1463,"thumbnail":1464},{"ext":34,"url":1432,"hash":1433,"mime":37,"name":1434,"path":16,"size":1435,"width":40,"height":41,"sizeInBytes":1436},{"ext":34,"url":1438,"hash":1439,"mime":37,"name":1440,"path":16,"size":1441,"width":48,"height":327,"sizeInBytes":1442},{"ext":34,"url":1444,"hash":1445,"mime":37,"name":1446,"path":16,"size":1447,"width":56,"height":57,"sizeInBytes":1448},{"ext":34,"url":1450,"hash":1451,"mime":37,"name":1452,"path":16,"size":1453,"width":64,"height":254,"sizeInBytes":1454},{"id":195,"documentId":1261,"name":1262},[1467],{"id":184,"documentId":1157,"slug":1158},{"id":1469,"documentId":1470,"title":1471,"slug":1472,"lede":1473,"desc":1473,"collab":113,"order":840,"tags":1474,"points":1483,"slides":1491,"cover":1498,"partner":1504,"categories":1505},56,"lk30ochj0lodm4n4putc256c","HR pages for Rostelecom","rostelecom","An animated website for the company's HR division and collecting applications.",[1475,1478,1480],{"id":1476,"label":1477},499,"Rostelecom",{"id":48,"label":1479},"HR",{"id":1481,"label":1482},501,"Telecom",[1484,1487,1489],{"id":1485,"text":1486},434,"Delivered on a tight deadline and a limited budget",{"id":895,"text":1488},"Separate pages for different audience segments",{"id":681,"text":1490},"Applicant form with a city choice",[1492],{"id":346,"documentId":347,"name":348,"alternativeText":349,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1493,"hash":375,"ext":34,"mime":37,"size":376,"url":377,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":378,"updatedAt":378,"publishedAt":379},{"large":1494,"small":1495,"medium":1496,"thumbnail":1497},{"ext":34,"url":352,"hash":353,"mime":37,"name":354,"path":16,"size":355,"width":40,"height":41,"sizeInBytes":356},{"ext":34,"url":358,"hash":359,"mime":37,"name":360,"path":16,"size":361,"width":48,"height":327,"sizeInBytes":362},{"ext":34,"url":364,"hash":365,"mime":37,"name":366,"path":16,"size":367,"width":56,"height":57,"sizeInBytes":368},{"ext":34,"url":370,"hash":371,"mime":37,"name":372,"path":16,"size":373,"width":64,"height":254,"sizeInBytes":374},{"id":346,"documentId":347,"name":348,"alternativeText":349,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1499,"hash":375,"ext":34,"mime":37,"size":376,"url":377,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":378,"updatedAt":378,"publishedAt":379},{"large":1500,"small":1501,"medium":1502,"thumbnail":1503},{"ext":34,"url":352,"hash":353,"mime":37,"name":354,"path":16,"size":355,"width":40,"height":41,"sizeInBytes":356},{"ext":34,"url":358,"hash":359,"mime":37,"name":360,"path":16,"size":361,"width":48,"height":327,"sizeInBytes":362},{"ext":34,"url":364,"hash":365,"mime":37,"name":366,"path":16,"size":367,"width":56,"height":57,"sizeInBytes":368},{"ext":34,"url":370,"hash":371,"mime":37,"name":372,"path":16,"size":373,"width":64,"height":254,"sizeInBytes":374},{"id":195,"documentId":1261,"name":1262},[1506],{"id":184,"documentId":1157,"slug":1158},{"id":1508,"documentId":1509,"title":1510,"slug":1511,"lede":1512,"desc":1512,"collab":113,"order":870,"tags":1513,"points":1523,"slides":1530,"cover":1608,"partner":1614,"categories":1615},47,"ooxg56w21e9uft4wk5oh2x7o","Launch landing page for Splat Biohack+","splat","Build awareness of the new brand among customers and reveal its unique selling points.",[1514,1517,1520],{"id":1515,"label":1516},208,"SPLAT",{"id":1518,"label":1519},209,"BIOHACK+",{"id":1521,"label":1522},210,"FMCG",[1524,1527],{"id":1525,"text":1526},356,"Parallax animation, content from a CMS",{"id":1528,"text":1529},357,"Marketplace links for a quick purchase",[1531,1537,1576],{"id":303,"documentId":310,"name":311,"alternativeText":312,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1532,"hash":341,"ext":34,"mime":37,"size":342,"url":343,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":344,"updatedAt":344,"publishedAt":344},{"large":1533,"small":1534,"medium":1535,"thumbnail":1536},{"ext":34,"url":317,"hash":318,"mime":37,"name":319,"path":16,"size":320,"width":40,"height":41,"sizeInBytes":321},{"ext":34,"url":323,"hash":324,"mime":37,"name":325,"path":16,"size":326,"width":48,"height":327,"sizeInBytes":328},{"ext":34,"url":330,"hash":331,"mime":37,"name":332,"path":16,"size":333,"width":56,"height":57,"sizeInBytes":334},{"ext":34,"url":336,"hash":337,"mime":37,"name":338,"path":16,"size":339,"width":64,"height":254,"sizeInBytes":340},{"id":1538,"documentId":1539,"name":1540,"alternativeText":312,"caption":16,"focalPoint":16,"width":610,"height":1541,"formats":1542,"hash":1571,"ext":848,"mime":851,"size":1572,"url":1573,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1574,"updatedAt":1574,"publishedAt":1575},23,"bodqv5hatwvh1g4wy89b9ett","splat-magnesium.png",532,{"large":1543,"small":1550,"medium":1557,"thumbnail":1564},{"ext":848,"url":1544,"hash":1545,"mime":851,"name":1546,"path":16,"size":1547,"width":40,"height":1548,"sizeInBytes":1549},"\u002Fuploads\u002Flarge_splat_magnesium_07bb9f39c6.png","large_splat_magnesium_07bb9f39c6","large_splat-magnesium.png",40.31,520,40314,{"ext":848,"url":1551,"hash":1552,"mime":851,"name":1553,"path":16,"size":1554,"width":48,"height":1555,"sizeInBytes":1556},"\u002Fuploads\u002Fsmall_splat_magnesium_07bb9f39c6.png","small_splat_magnesium_07bb9f39c6","small_splat-magnesium.png",13.8,260,13803,{"ext":848,"url":1558,"hash":1559,"mime":851,"name":1560,"path":16,"size":1561,"width":56,"height":1562,"sizeInBytes":1563},"\u002Fuploads\u002Fmedium_splat_magnesium_07bb9f39c6.png","medium_splat_magnesium_07bb9f39c6","medium_splat-magnesium.png",25.37,390,25373,{"ext":848,"url":1565,"hash":1566,"mime":851,"name":1567,"path":16,"size":1568,"width":64,"height":1569,"sizeInBytes":1570},"\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":1577,"documentId":1578,"name":1579,"alternativeText":312,"caption":16,"focalPoint":16,"width":610,"height":1541,"formats":1580,"hash":1604,"ext":848,"mime":851,"size":1605,"url":1606,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1607,"updatedAt":1607,"publishedAt":1607},24,"wlwhiy6u9tmsf2l4wyu9wwlj","splat-feedback.png",{"large":1581,"small":1587,"medium":1593,"thumbnail":1599},{"ext":848,"url":1582,"hash":1583,"mime":851,"name":1584,"path":16,"size":1585,"width":40,"height":1548,"sizeInBytes":1586},"\u002Fuploads\u002Flarge_splat_feedback_b44a81f2c5.png","large_splat_feedback_b44a81f2c5","large_splat-feedback.png",52.11,52110,{"ext":848,"url":1588,"hash":1589,"mime":851,"name":1590,"path":16,"size":1591,"width":48,"height":1555,"sizeInBytes":1592},"\u002Fuploads\u002Fsmall_splat_feedback_b44a81f2c5.png","small_splat_feedback_b44a81f2c5","small_splat-feedback.png",16.91,16913,{"ext":848,"url":1594,"hash":1595,"mime":851,"name":1596,"path":16,"size":1597,"width":56,"height":1562,"sizeInBytes":1598},"\u002Fuploads\u002Fmedium_splat_feedback_b44a81f2c5.png","medium_splat_feedback_b44a81f2c5","medium_splat-feedback.png",32.02,32016,{"ext":848,"url":1600,"hash":1601,"mime":851,"name":1602,"path":16,"size":168,"width":64,"height":1569,"sizeInBytes":1603},"\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":303,"documentId":310,"name":311,"alternativeText":312,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1609,"hash":341,"ext":34,"mime":37,"size":342,"url":343,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":344,"updatedAt":344,"publishedAt":344},{"large":1610,"small":1611,"medium":1612,"thumbnail":1613},{"ext":34,"url":317,"hash":318,"mime":37,"name":319,"path":16,"size":320,"width":40,"height":41,"sizeInBytes":321},{"ext":34,"url":323,"hash":324,"mime":37,"name":325,"path":16,"size":326,"width":48,"height":327,"sizeInBytes":328},{"ext":34,"url":330,"hash":331,"mime":37,"name":332,"path":16,"size":333,"width":56,"height":57,"sizeInBytes":334},{"ext":34,"url":336,"hash":337,"mime":37,"name":338,"path":16,"size":339,"width":64,"height":254,"sizeInBytes":340},{"id":195,"documentId":1261,"name":1262},[1616],{"id":177,"documentId":1027,"slug":1028},{"id":1618,"documentId":1619,"title":1620,"slug":1621,"lede":1622,"desc":1622,"collab":77,"order":154,"tags":1623,"points":1630,"slides":1637,"cover":1671,"partner":16,"categories":1677},52,"lsfpzts1qol8bleck5gvqp79","A quiz for the interactive stand of the developer Praktika","praktika","One version for the touch panel, the employee's tablet and the visitor's phone.",[1624,1627],{"id":1625,"label":1626},485,"Praktika",{"id":1628,"label":1629},486,"Real estate",[1631,1634],{"id":1632,"text":1633},398,"Visitors join by QR code from their phone",{"id":1635,"text":1636},399,"Customer verification",[1638],{"id":534,"documentId":1639,"name":1640,"alternativeText":1641,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1642,"hash":1667,"ext":34,"mime":37,"size":1668,"url":1669,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1670,"updatedAt":1670,"publishedAt":1670},"rjny76gdmypzyetytdpr7xe8","praktika-quiz.jpg","Квиз для интерактивного стенда застройщика Практика",{"large":1643,"small":1649,"medium":1655,"thumbnail":1661},{"ext":34,"url":1644,"hash":1645,"mime":37,"name":1646,"path":16,"size":1647,"width":40,"height":41,"sizeInBytes":1648},"\u002Fuploads\u002Flarge_praktika_quiz_5e69f1f8c4.jpg","large_praktika_quiz_5e69f1f8c4","large_praktika-quiz.jpg",61.87,61870,{"ext":34,"url":1650,"hash":1651,"mime":37,"name":1652,"path":16,"size":1653,"width":48,"height":327,"sizeInBytes":1654},"\u002Fuploads\u002Fsmall_praktika_quiz_5e69f1f8c4.jpg","small_praktika_quiz_5e69f1f8c4","small_praktika-quiz.jpg",21.91,21905,{"ext":34,"url":1656,"hash":1657,"mime":37,"name":1658,"path":16,"size":1659,"width":56,"height":57,"sizeInBytes":1660},"\u002Fuploads\u002Fmedium_praktika_quiz_5e69f1f8c4.jpg","medium_praktika_quiz_5e69f1f8c4","medium_praktika-quiz.jpg",40.64,40644,{"ext":34,"url":1662,"hash":1663,"mime":37,"name":1664,"path":16,"size":1665,"width":64,"height":254,"sizeInBytes":1666},"\u002Fuploads\u002Fthumbnail_praktika_quiz_5e69f1f8c4.jpg","thumbnail_praktika_quiz_5e69f1f8c4","thumbnail_praktika-quiz.jpg",6.83,6833,"praktika_quiz_5e69f1f8c4",114.7,"\u002Fuploads\u002Fpraktika_quiz_5e69f1f8c4.jpg","2026-10-26T22:32:00.484Z",{"id":534,"documentId":1639,"name":1640,"alternativeText":1641,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1672,"hash":1667,"ext":34,"mime":37,"size":1668,"url":1669,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1670,"updatedAt":1670,"publishedAt":1670},{"large":1673,"small":1674,"medium":1675,"thumbnail":1676},{"ext":34,"url":1644,"hash":1645,"mime":37,"name":1646,"path":16,"size":1647,"width":40,"height":41,"sizeInBytes":1648},{"ext":34,"url":1650,"hash":1651,"mime":37,"name":1652,"path":16,"size":1653,"width":48,"height":327,"sizeInBytes":1654},{"ext":34,"url":1656,"hash":1657,"mime":37,"name":1658,"path":16,"size":1659,"width":56,"height":57,"sizeInBytes":1660},{"ext":34,"url":1662,"hash":1663,"mime":37,"name":1664,"path":16,"size":1665,"width":64,"height":254,"sizeInBytes":1666},[1678],{"id":1268,"documentId":1269,"slug":230},{"id":1680,"documentId":1681,"title":1682,"slug":1683,"lede":1684,"desc":1685,"collab":113,"order":381,"tags":1686,"points":1695,"slides":1696,"cover":1697,"partner":1732,"categories":1733},57,"y3bgu9i55nsue99dr1vsqtjo","Animated pages for an HR service","career","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.",[1687,1690,1693],{"id":1688,"label":1689},506,"Career.io",{"id":1691,"label":1692},507,"HR service",{"id":1694,"label":1479},508,[],[],{"id":542,"documentId":1698,"name":1699,"alternativeText":1700,"caption":16,"focalPoint":16,"width":1221,"height":1701,"formats":1702,"hash":1728,"ext":34,"mime":37,"size":1729,"url":1730,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1731,"updatedAt":1731,"publishedAt":1731},"rnphb5thkn1kgo0h42mypjld","career-cover.jpg","Анимированные страницы для HR-сервиса",1350,{"large":1703,"small":1710,"medium":1716,"thumbnail":1722},{"ext":34,"url":1704,"hash":1705,"mime":37,"name":1706,"path":16,"size":1707,"width":40,"height":1708,"sizeInBytes":1709},"\u002Fuploads\u002Flarge_career_cover_0347603c8b.jpg","large_career_cover_0347603c8b","large_career-cover.jpg",62.3,563,62297,{"ext":34,"url":1711,"hash":1712,"mime":37,"name":1713,"path":16,"size":1714,"width":48,"height":402,"sizeInBytes":1715},"\u002Fuploads\u002Fsmall_career_cover_0347603c8b.jpg","small_career_cover_0347603c8b","small_career-cover.jpg",22.32,22324,{"ext":34,"url":1717,"hash":1718,"mime":37,"name":1719,"path":16,"size":1720,"width":56,"height":409,"sizeInBytes":1721},"\u002Fuploads\u002Fmedium_career_cover_0347603c8b.jpg","medium_career_cover_0347603c8b","medium_career-cover.jpg",40.53,40535,{"ext":34,"url":1723,"hash":1724,"mime":37,"name":1725,"path":16,"size":1726,"width":64,"height":289,"sizeInBytes":1727},"\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":195,"documentId":1261,"name":1262},[1734],{"id":184,"documentId":1157,"slug":1158},{"id":1736,"documentId":1737,"title":1738,"slug":1739,"lede":1740,"desc":1740,"collab":113,"order":524,"tags":1741,"points":1748,"slides":1749,"cover":1750,"partner":1783,"categories":1784},53,"dxsron1w40fz28dk6ltwj8ji","Corporate website of a cosmetics brand","delight","The frontend of an Italian professional cosmetics brand's website.",[1742,1745],{"id":1743,"label":1744},487,"Constant Delight",{"id":1746,"label":1747},488,"Cosmetics",[],[],{"id":550,"documentId":1751,"name":1752,"alternativeText":1753,"caption":16,"focalPoint":16,"width":313,"height":314,"formats":1754,"hash":1779,"ext":34,"mime":37,"size":1780,"url":1781,"previewUrl":16,"provider":24,"provider_metadata":16,"createdAt":1782,"updatedAt":1782,"publishedAt":1782},"lm07k9exlzwo82uvkwbwvcvq","delight-site.jpg","Корпоративный сайт бренда косметики",{"large":1755,"small":1761,"medium":1767,"thumbnail":1773},{"ext":34,"url":1756,"hash":1757,"mime":37,"name":1758,"path":16,"size":1759,"width":40,"height":41,"sizeInBytes":1760},"\u002Fuploads\u002Flarge_delight_site_8c8eb1cf75.jpg","large_delight_site_8c8eb1cf75","large_delight-site.jpg",55.37,55366,{"ext":34,"url":1762,"hash":1763,"mime":37,"name":1764,"path":16,"size":1765,"width":48,"height":327,"sizeInBytes":1766},"\u002Fuploads\u002Fsmall_delight_site_8c8eb1cf75.jpg","small_delight_site_8c8eb1cf75","small_delight-site.jpg",19.44,19441,{"ext":34,"url":1768,"hash":1769,"mime":37,"name":1770,"path":16,"size":1771,"width":56,"height":57,"sizeInBytes":1772},"\u002Fuploads\u002Fmedium_delight_site_8c8eb1cf75.jpg","medium_delight_site_8c8eb1cf75","medium_delight-site.jpg",36.06,36060,{"ext":34,"url":1774,"hash":1775,"mime":37,"name":1776,"path":16,"size":1777,"width":64,"height":254,"sizeInBytes":1778},"\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":195,"documentId":1261,"name":1262},[1785],{"id":184,"documentId":1157,"slug":1158},[1787,1792,1795,1798,1801,1804,1807,1810,1813,1816,1819,1822,1825,1833,1839,1845,1850,1856,1863,1869,1875,1880,1886,1892,1898,1906,1912,1918,1924,1930,1935,1941,1947,1955,1960,1966,1972,1978,1984,1990,1996,2002],{"id":250,"documentId":251,"name":252,"description":1788,"order":182,"group":1789},"We have been writing Vue since 2016 — it is our main framework. Reactivity and component architecture: SPAs, customer accounts, corporate portals.",{"id":177,"documentId":1790,"name":1791},"q1xwv5q2go1jawf1y4chp45l","Frontend",{"id":254,"documentId":255,"name":256,"description":1793,"order":216,"group":1794},"Our choice when the client or their team already works with React. Declarative UI, a huge ecosystem of libraries and a familiar stack for joint work.",{"id":177,"documentId":1790,"name":1791},{"id":65,"documentId":258,"name":259,"description":1796,"order":225,"group":1797},"Nuxt 3 and 4 are our standard for Vue projects with SEO. SSR, SSG, auto-routing and DevTools out of the box: a fast first screen and easy deployment.",{"id":177,"documentId":1790,"name":1791},{"id":261,"documentId":262,"name":263,"description":1799,"order":233,"group":1800},"For React projects where SEO and load speed matter. SSR and static output out of the box — showcases, marketing sites, public sections of a CRM.",{"id":177,"documentId":1790,"name":1791},{"id":265,"documentId":266,"name":267,"description":1802,"order":195,"group":1803},"All product code is written in TypeScript only. Static typing cuts production bugs and makes refactoring safe.",{"id":177,"documentId":1790,"name":1791},{"id":269,"documentId":270,"name":271,"description":1805,"order":4,"group":1806},"Our standard bundler for all Vue and React projects. Instant dev server start and a fast production build — a short edit cycle.",{"id":177,"documentId":1790,"name":1791},{"id":273,"documentId":274,"name":275,"description":1808,"order":134,"group":1809},"Used for structured design systems: variables, mixins, nesting. Keeps styles readable on large projects.",{"id":177,"documentId":1790,"name":1791},{"id":277,"documentId":278,"name":279,"description":1811,"order":840,"group":1812},"The official state store for Vue 3. We manage the profile, cart, filters and user roles — without the extra complexity of Vuex.",{"id":177,"documentId":1790,"name":1791},{"id":281,"documentId":282,"name":283,"description":1814,"order":870,"group":1815},"For expressive motion: timelines, ScrollTrigger, complex easing. Landing pages and brand sites where animation is part of the product.",{"id":177,"documentId":1790,"name":1791},{"id":285,"documentId":286,"name":287,"description":1817,"order":154,"group":1818},"Pixel-level drawing in the browser: scramble effects, interactive backgrounds, custom heroes. Used where CSS is no longer enough.",{"id":177,"documentId":1790,"name":1791},{"id":289,"documentId":290,"name":291,"description":1820,"order":381,"group":1821},"A lightweight alternative to GSAP for simple scenarios: animating SVG, CSS properties and DOM attributes. No extra weight when you need flexibility.",{"id":177,"documentId":1790,"name":1791},{"id":293,"documentId":294,"name":295,"description":1823,"order":524,"group":1824},"All design work happens in Figma: mockups, component library, tokens, Code Connect. A shared language between designer and developer.",{"id":177,"documentId":1790,"name":1791},{"id":1826,"documentId":1827,"name":1828,"description":1829,"order":1053,"group":1830},139,"u456cn28nkbv1zz9dvekubp2","Python","The language for services, integrations and ML. Used together with Django and FastAPI — clean code, a rich ecosystem and a quick start.",{"id":184,"documentId":1831,"name":1832},"iyls8yjivvsdoe6x5ap5lttn","Backend",{"id":1834,"documentId":1835,"name":1836,"description":1837,"order":177,"group":1838},140,"qyjpbwpuwd4wg24y5xkykds4","Django","Our choice for Python projects with rich business logic. ORM, auth, migrations and a ready admin panel out of the box — we start fast.",{"id":184,"documentId":1831,"name":1832},{"id":1840,"documentId":1841,"name":1842,"description":1843,"order":184,"group":1844},141,"adbg36o1elr64dwmgkaaiyvl","FastAPI","For high-performance Python APIs: async, auto schemas and validation via Pydantic. Ideal for integrations, ML services and API gateways.",{"id":184,"documentId":1831,"name":1832},{"id":688,"documentId":1846,"name":1847,"description":1848,"order":190,"group":1849},"xb050cx9kspnuodnfducxw5l","NestJS","A TypeScript framework on Node.js: one language with the frontend, modular architecture, IoC. For complex REST APIs and microservices.",{"id":184,"documentId":1831,"name":1832},{"id":1851,"documentId":1852,"name":1853,"description":1854,"order":1268,"group":1855},143,"kdjqh6bfh1rmh7ardr5ttva7","Node.js","JavaScript on the server: one language with the frontend, one team. For WebSocket, streaming and highly concurrent tasks.",{"id":184,"documentId":1831,"name":1832},{"id":1857,"documentId":1858,"name":1859,"description":1860,"order":1861,"group":1862},144,"cdkl5sq681bv40e6ztc4mm7w","Laravel","Our main PHP framework: API, queues, auth, scheduler out of the box. A quick start for corporate CRMs and admin systems.",17,{"id":184,"documentId":1831,"name":1832},{"id":1864,"documentId":1865,"name":1866,"description":1867,"order":1292,"group":1868},145,"o8w71b4183oe6jo0ladc8ybm","WordPress","The most widespread CMS. For content sites where the client wants to edit materials themselves without a developer.",{"id":184,"documentId":1831,"name":1832},{"id":1870,"documentId":1871,"name":1872,"description":1873,"order":1357,"group":1874},146,"x8j4ouh0gck48z2xcz3l09lk","Strapi","A headless CMS on Node.js: REST and GraphQL out of the box, flexible content models. Backend and frontend are separated — each part changes independently.",{"id":184,"documentId":1831,"name":1832},{"id":937,"documentId":1876,"name":1877,"description":1878,"order":1426,"group":1879},"bhdiu1x5y35wctso074t2mfg","PostgreSQL","The main relational database in all our projects. Transactions, JSON columns, full-text search — catalogues, orders, financial reports, audit.",{"id":184,"documentId":1831,"name":1832},{"id":1881,"documentId":1882,"name":1883,"description":1884,"order":346,"group":1885},148,"pb8paue19hbp68kn9t6qkq9l","GraphQL","Where the frontend needs flexible data queries: one endpoint, a typed schema, no over- or under-fetching.",{"id":184,"documentId":1831,"name":1832},{"id":1887,"documentId":1888,"name":1889,"description":1890,"order":303,"group":1891},149,"bqoioy1uxg1mewbmh57biha1","RabbitMQ","A message broker for asynchronous tasks and integrations: notifications, event processing, decoupling services without direct calls.",{"id":184,"documentId":1831,"name":1832},{"id":1893,"documentId":1894,"name":1895,"description":1896,"order":1538,"group":1897},150,"iosoxgwgr6ppf2apfnvvcyn1","Swagger","All APIs are documented with OpenAPI\u002FSwagger: interactive docs, generated clients and a single contract between teams.",{"id":184,"documentId":1831,"name":1832},{"id":1899,"documentId":1900,"name":1901,"description":1902,"order":1577,"group":1903},151,"bqyg3ekms1plyk4ifxx1b363","Cursor","An AI editor with the full repository context: agents, chat with the code, auto-edits. Used to speed up features, documentation and code analysis.",{"id":190,"documentId":1904,"name":1905},"k1byyiuevgfj675u98ohxdnv","AI tools",{"id":1907,"documentId":1908,"name":1909,"description":1910,"order":534,"group":1911},152,"copt37s2218zm3ds7jvuskgx","Claude Code","AI for deep work with code: explanations, reviews, tests, bug analysis. Used where a long context and precise edits are needed.",{"id":190,"documentId":1904,"name":1905},{"id":1913,"documentId":1914,"name":1915,"description":1916,"order":542,"group":1917},153,"avbddyusffex7pittwwcol6k","OpenAI API","We integrate AI into products through the OpenAI API: chat, text generation, document analysis. Smart features without training our own models.",{"id":190,"documentId":1904,"name":1905},{"id":1919,"documentId":1920,"name":1921,"description":1922,"order":550,"group":1923},154,"u5jxwto73wqk1fh6g1wxfo81","Anthropic API","Anthropic API — Claude inside the product: long context, document analysis, chat and assistants. For B2B cases that need accuracy and safety.",{"id":190,"documentId":1904,"name":1905},{"id":1925,"documentId":1926,"name":1927,"description":1928,"order":13,"group":1929},155,"a0qb5ffeegxqyy1eusoqkpah","Gemini API","Google Gemini API — multimodal scenarios: text, images, documents. Convenient when the client already lives in Google Cloud.",{"id":190,"documentId":1904,"name":1905},{"id":169,"documentId":1931,"name":1932,"description":1933,"order":27,"group":1934},"l2es9iuhnq1njdkzjxxkd5in","DeepSeek API","DeepSeek API — an alternative to ChatGPT: code, reasoning, an affordable price. For chat and generation when quality and budget must balance.",{"id":190,"documentId":1904,"name":1905},{"id":1936,"documentId":1937,"name":1938,"description":1939,"order":158,"group":1940},157,"p20b6hyltg8e2av5znrugud9","GigaChat API","GigaChat API — a Russian LLM by Sber: chat, text generation, documents. For Russian-hosted products and Sber ecosystem integrations.",{"id":190,"documentId":1904,"name":1905},{"id":1942,"documentId":1943,"name":1944,"description":1945,"order":579,"group":1946},158,"vo6xg5yd4ama3bcv6e79hfir","YandexGPT API","YandexGPT API — a Russian alternative for chat and text generation. When the client needs data stored and processed in Russia.",{"id":190,"documentId":1904,"name":1905},{"id":1948,"documentId":1949,"name":1950,"description":1951,"order":423,"group":1952},159,"i3xkfa5pqqknleplvkdfifyw","Redis","Cache, sessions, queues and pub\u002Fsub in memory. Takes load off the database and speeds up API responses at peak moments — without changing the architecture.",{"id":1268,"documentId":1953,"name":1954},"iegwbilxrieknj9wcfaa2eww","DevOps",{"id":162,"documentId":1956,"name":1957,"description":1958,"order":787,"group":1959},"qvcadfhhntxs65ztor96g608","Docker","Every environment runs in containers: dev, stage and prod match. No more \"it worked on my machine\"; deployment and moving between servers get simpler.",{"id":1268,"documentId":1953,"name":1954},{"id":1961,"documentId":1962,"name":1963,"description":1964,"order":18,"group":1965},161,"vn91sl2lpnmft2nujzfz5zqn","GitLab CI","Automatic pipelines: build, tests, deploy on push. No manual releases; errors are caught before they reach production.",{"id":1268,"documentId":1953,"name":1954},{"id":1967,"documentId":1968,"name":1969,"description":1970,"order":210,"group":1971},162,"a3ikj78ba78mx8mx53zygvj0","S3","Object storage for media, backups and static files. Served through a CDN — fast downloads without load on the main server.",{"id":1268,"documentId":1953,"name":1954},{"id":1973,"documentId":1974,"name":1975,"description":1976,"order":202,"group":1977},163,"y1mcaboev3sl4qewdbmknvc9","Nginx","Our standard for proxying and serving static files. Load balancing, SSL and cache — the first line in front of the application on every project.",{"id":1268,"documentId":1953,"name":1954},{"id":1979,"documentId":1980,"name":1981,"description":1982,"order":219,"group":1983},164,"zbfn03xc7ub13datoa52c423","Cloudflare","CDN, WAF and DNS for all projects. DDoS protection, fast static delivery worldwide and domain management — in one place.",{"id":1268,"documentId":1953,"name":1954},{"id":1985,"documentId":1986,"name":1987,"description":1988,"order":227,"group":1989},165,"nasssnvj34h7xz77hgiz59vk","Prometheus","Prometheus — metrics from services and containers: CPU, memory, latency, errors. The base of monitoring for dashboards and alerts.",{"id":1268,"documentId":1953,"name":1954},{"id":1991,"documentId":1992,"name":1993,"description":1994,"order":235,"group":1995},166,"jjl5devqrppaae9o6qsoadit","Loki","Grafana Loki — storage and search for application logs. Logs linked with metrics in Grafana: the cause of a production incident is found faster.",{"id":1268,"documentId":1953,"name":1954},{"id":1997,"documentId":1998,"name":1999,"description":2000,"order":242,"group":2001},167,"xmad15w5641il5n5w6rsvriu","Grafana","Grafana — dashboards and alerts on metrics and logs. Prometheus and Loki in one place — we see production before the client complains.",{"id":1268,"documentId":1953,"name":1954},{"id":2003,"documentId":2004,"name":2005,"description":2006,"order":2007,"group":2008},168,"w4q82d7mq1xxzxda4rkeuj9n","Sentry","Real-time error monitoring: stack traces, user context, alerts. We learn about a production bug before the client notices it.",41,{"id":1268,"documentId":1953,"name":1954},[2010,2012,2015,2018,2022,2026,2029,2033,2037,2041,2045,2049,2050,2054,2057,2060,2063],{"id":1403,"documentId":2011,"name":1167,"order":182},"kx9kst2du7773gxcamc86h5i",{"id":1469,"documentId":2013,"name":2014,"order":216},"eit7plb7pabhdwtsjk6k67t7","Rostelecom HR",{"id":1680,"documentId":2016,"name":2017,"order":225},"dwu6sygzh2qos3alaw8788b4","Selectel Academy",{"id":2019,"documentId":2020,"name":2021,"order":233},58,"n6llsmfmitefq3w6lfyattjc","Splat Biohack",{"id":2023,"documentId":2024,"name":2025,"order":195},59,"dqsbrcukgnmgqcsjr9jccstj","Sber Education",{"id":2027,"documentId":2028,"name":1279,"order":4},60,"ym8t6y8mqdwq18zd11j8iaa3",{"id":2030,"documentId":2031,"name":2032,"order":134},61,"dv1hh8947rsnun0rtr27a662","LevelUpper",{"id":2034,"documentId":2035,"name":2036,"order":840},62,"qf9c0auuuarcdv0oisg3acmz","NeboSystems",{"id":2038,"documentId":2039,"name":2040,"order":870},63,"lya42yfnpor5myx6c5gl8duf","VTR",{"id":2042,"documentId":2043,"name":2044,"order":154},64,"hupzqp9iezi9goy65ypne39f","Pomosch",{"id":2046,"documentId":2047,"name":2048,"order":381},65,"nj3ziruwnautm9i240zsex6y","Alternativa",{"id":521,"documentId":522,"name":523,"order":524},{"id":2051,"documentId":2052,"name":2053,"order":1053},67,"n0elolio4gvxc94xuq2sm2xn","Luzhniki Tennis Club",{"id":2055,"documentId":2056,"name":1411,"order":177},68,"uhyi9yrbhg65rkrkdcde2sb5",{"id":2058,"documentId":2059,"name":1626,"order":184},69,"egvz3zdrbqg6480qx44352rq",{"id":2061,"documentId":2062,"name":1689,"order":190},70,"fcvk5sqtzfglf2dpfziamd77",{"id":2064,"documentId":2065,"name":1744,"order":1268},71,"x1xo4a74aacay3lf622hkchu"]