1import{e as H,r as x,f as X,c as o,o as t,a,g as B,n as Y,h as d,i as E,j as h,w as u,t as n,k as O,d as i,u as le,l as se,m as ne,p as ae,q as ie,b as r,F as y,s as v,v as V,x as z}from"./BGFXF08U.js";import{_ as R}from"./DBhVYmt5.js";import{_ as L,a as I}from"./C4Nt-CAX.js";import{_}from"./TaGkMdSL.js";import{_ as J}from"./hwcbV3gs.js";const re={key:0,class:"absolute bottom-0 left-0 h-12 bg-gradient-to-b from-transparent to-(--background-global) w-full"},D=H({__name:"Spoiler",props:{height:{default:200},alwaysOpened:{type:Boolean},full:{type:Boolean},double:{type:Boolean},none:{type:Boolean},collapsedLabel:{},expandedLabel:{}},emits:["toggle"],setup(C,{expose:S,emit:w}){const c=C,P=w,b=x(),g=x(!1),N=x(`${c.height}px`),A=j=>{c.alwaysOpened||g.value!==j&&(g.value=j,P("toggle",g.value))},T=()=>{A(!g.value)},W=()=>{A(!0)},U=()=>{A(!1)};return X(()=>[c.height,c.alwaysOpened,g.value,b?.value?.scrollHeight],()=>{c.alwaysOpened&&(g.value=!1),N.value=c.alwaysOpened?"auto":g?.value?b?.value?.scrollHeight+"px":c.height+"px"}),S({opened:g,open:W,close:U}),(j,M)=>(t(),o("div",null,[a("div",{class:d(["overflow-hidden relative",{"cursor-pointer":c.full&&!g.value&&!c.alwaysOpened,"!max-h-max":c.alwaysOpened}]),style:Y({transition:".2s",maxHeight:N.value}),ref_key:"container",ref:b,onClick:M[0]||(M[0]=()=>{c.full&&!g.value&&!c.alwaysOpened&&T()})},[E(j.$slots,"default",{opened:g.value||c.alwaysOpened}),!g.value&&!c.alwaysOpened?(t(),o("div",re)):h("",!0)],6),c.alwaysOpened?(t(),B(R,{key:1,double:c.double,none:c.none},null,8,["double","none"])):(t(),B(R,{key:0,double:c.double,none:c.none},{default:u(()=>[a("button",{onClick:T,class:"outline-0 text-gray-500 cursor-pointer"}," [ "+n(g.value?c.expandedLabel??"СвеÑнÑÑÑ":c.collapsedLabel??"РазвеÑнÑÑÑ")+" ] ",1)]),_:1},8,["double","none"]))]))}}),ue=[{key:"lang",label:"Languages"},{key:"syntax",label:"Syntax & Preprocessors"},{key:"framework",label:"Frameworks"},{key:"platform",label:"Platforms"},{key:"ui",label:"UI Libraries"},{key:"graphic",label:"Graphic Libraries"},{key:"build",label:"Build Tools"},{key:"testing",label:"Testing"},{key:"state",label:"State Management"},{key:"validation",label:"Validation"},{key:"util",label:"Utils"},{key:"map",label:"Map & GIS"},{key:"cms",label:"CMS"},{key:"crm",label:"CRM"},{key:"billing",label:"Billing Systems"}],ee=[{key:"js",label:"JavaScript",link:"https://developer.mozilla.org/docs/Web/JavaScript",category:"lang",notion:""},{key:"ts",label:"TypeScript",link:"https://www.typescriptlang.org/",category:"lang",notion:""},{key:"php",label:"PHP",link:"https://www.php.net/",category:"lang",notion:""},{key:"java",label:"Java",link:"https://www.java.com/",category:"lang",notion:"ÐÐ»Ð°Ð³Ð¸Ð½Ñ Spigot, ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ WebView"},{key:"sql",label:"SQL",link:"https://en.wikipedia.org/wiki/SQL",category:"lang",notion:""},{key:"graphql",label:"GraphQL",link:"https://graphql.org/",category:"lang",notion:""},{key:"html",label:"HTML5",link:"https://developer.mozilla.org/docs/Web/HTML",category:"syntax",notion:""},{key:"css",label:"CSS3",category:"syntax",link:"https://developer.mozilla.org/docs/Web/CSS",notion:""},{key:"scss",label:"SCSS",category:"syntax",link:"https://sass-lang.com/",notion:""},{key:"sass",label:"SASS",category:"syntax",link:"https://sass-lang.com/documentation/syntax#the-indented-syntax",notion:""},{key:"less",label:"Less",category:"syntax",link:"https://lesscss.org/",notion:""},{key:"postcss",label:"PostCSS",category:"syntax",link:"https://postcss.org/",notion:""},{key:"jsx",label:"JSX",category:"syntax",link:"https://react.dev/docs/introducing-jsx",notion:""},{key:"tsx",label:"TSX",category:"syntax",link:"https://www.typescriptlang.org/docs/handbook/jsx.html",notion:""},{key:"sfc",label:"Vue SFC",category:"syntax",link:"https://vuejs.org/guide/scaling-up/sfc.html",notion:""},{key:"jss",label:"JSS (CSS-in-JS)",category:"syntax",link:"https://cssinjs.org/",notion:""},{key:"emotion",label:"Emotion",category:"syntax",link:"https://emotion.sh/docs/introduction",notion:""},{key:"jinja2",label:"Jinja2",link:"https://jinja.palletsprojects.com/",category:"syntax",notion:""},{key:"nunjucks",label:"Nunjucks",link:"https://mozilla.github.io/nunjucks/",category:"syntax",notion:""},{key:"modules",label:"CommonJS / ESM / UMD",link:"https://nodejs.org/",category:"syntax",notion:"Создание библиоÑек, плагинов и CLI"},{key:"md",label:"Markdown",category:"syntax",link:"https://www.markdownguide.org/",notion:""},{key:"mdx",label:"MDX",category:"syntax",link:"https://mdxjs.com/",notion:""},{key:"vue2",label:"Vue 2",link:"https://v2.vuejs.org/",category:"framework",notion:""},{key:"vue3",label:"Vue 3",link:"https://vuejs.org/",category:"framework",notion:"ÐÑновной ÑÑеймвоÑк"},{key:"react",label:"React",link:"https://react.dev/",category:"framework",notion:"Middle ÑÑовенÑ"},{key:"nuxt2",label:"Nuxt 2",link:"https://v2.nuxt.com/",category:"framework",notion:""},{key:"nuxt3",label:"Nuxt 3",link:"https://nuxt.com/",category:"framework",notion:""},{key:"quasar",label:"Quasar",link:"https://quasar.dev/",category:"framework",notion:""},{key:"nest",label:"NestJS",link:"https://nestjs.com/",category:"framework",notion:""},{key:"strapi",label:"Strapi",link:"https://strapi.io/",category:"framework",notion:""},{key:"tres",label:"Tres.js",link:"https://tresjs.org/",category:"framework",notion:""},{key:"lite-ssr",label:"LiteSSR",link:"https://lssr.dntz.xyz/",category:"framework",notion:"РазÑабоÑал ÑобÑÑвеннÑÑ SSR-библиоÑекÑ"},{key:"cordova",label:"Apache Cordova",link:"https://cordova.apache.org/",category:"platform",notion:""},{key:"express",label:"Express.js",link:"https://expressjs.com/",category:"platform",notion:""},{key:"nwjs",label:"NW.js",link:"https://nwjs.io/",category:"platform",notion:""},{key:"electron",label:"Electron",link:"https://www.electronjs.org/",category:"platform",notion:""},{key:"primevue",label:"PrimeVue",link:"https://www.primefaces.org/primevue/",category:"ui",notion:""},{key:"vuetify",label:"Vuetify",link:"https://vuetifyjs.com/",category:"ui",notion:""},{key:"antdv",label:"Ant Design Vue",link:"https://antdv.com/",category:"ui",notion:""},{key:"mui",label:"Material UI",link:"https://mui.com/",category:"ui",notion:""},{key:"bootstrap",label:"Bootstrap",link:"https://getbootstrap.com/",category:"ui",notion:""},{key:"daisy",label:"DaisyUI",link:"https://daisyui.com/",category:"ui",notion:""},{key:"headlessui",label:"Headless UI",link:"https://headlessui.com/",category:"ui",notion:""},{key:"tailwind",label:"Tailwind CSS",link:"https://tailwindcss.com/",category:"ui",notion:""},{key:"react-blessed",label:"React Blessed",link:"https://github.com/Yomguithereal/react-blessed",category:"ui",notion:""},{key:"fa",label:"FontAwesome",link:"https://fontawesome.com/",category:"ui",notion:""},{key:"mdi",label:"Material Design Icons",link:"https://materialdesignicons.com/",category:"ui",notion:""},{key:"three",label:"Three.js",link:"https://threejs.org/",category:"framework",notion:""},{key:"chartjs",label:"ChartJS",link:"https://chartjs.org/",category:"graphic",notion:""},{key:"echarts",label:"Apache Echarts",link:"https://echarts.apache.org/",category:"graphic",notion:""},{key:"konva",label:"Konva.js",link:"https://konvajs.org/",category:"graphic",notion:""},{key:"canvas",label:"Canvas API",link:"https://developer.mozilla.org/docs/Web/API/Canvas_API",category:"graphic",notion:""},{key:"codemirror",label:"CodeMirror",link:"https://codemirror.net/",category:"graphic",notion:""},{key:"tiptap",label:"TipTap",link:"https://tiptap.dev/",category:"graphic",notion:""},{key:"vite",label:"Vite",link:"https://vitejs.dev/",category:"build",notion:""},{key:"webpack",label:"Webpack",link:"https://webpack.js.org/",category:"build",notion:""},{key:"rollup",label:"Rollup",link:"https://rollupjs.org/",category:"build",notion:""},{key:"esbuild",label:"esbuild",link:"https://esbuild.github.io/",category:"build",notion:""},{key:"babel",label:"Babel",link:"https://babeljs.io/",category:"build",notion:""},{key:"storybook",label:"Storybook",link:"https://storybook.js.org/",category:"build",notion:""},{key:"vue-sfc-loader",label:"Vue SFC Loader",link:"https://github.com/FranckFreiburger/vue3-sfc-loader",category:"build",notion:""},{key:"nexe",label:"Nexe",link:"https://github.com/nexe/nexe",category:"build",notion:""},{key:"vitest",label:"Vitest",link:"https://vitest.dev/",category:"testing",notion:""},{key:"jest",label:"Jest",link:"https://jestjs.io/",category:"testing",notion:"ÐгÑаниÑеннÑй коммеÑÑеÑкий опÑÑ"},{key:"pinia",label:"Pinia",link:"https://pinia.vuejs.org/",category:"state",notion:""},{key:"vuex",label:"Vuex",link:"https://vuex.vuejs.org/",category:"state",notion:""},{key:"redux",label:"Redux",link:"https://redux.js.org/",category:"state",notion:""}
1,{key:"zod",label:"Zod",link:"https://zod.dev/",category:"validation",notion:""},{key:"vee-validate",label:"VeeValidate",link:"https://vee-validate.logaretm.com/",category:"validation",notion:""},{key:"vuelidate",label:"Vuelidate",link:"https://vuelidate-next.netlify.app/",category:"validation",notion:""},{key:"axios",label:"Axios",link:"https://axios-http.com/",category:"util",notion:""},{key:"lodash",label:"Lodash",link:"https://lodash.com/",category:"util",notion:""},{key:"vueuse",label:"VueUse",link:"https://vueuse.com/",category:"util",notion:""},{key:"jquery",label:"jQuery",link:"https://jquery.com/",category:"util",notion:""},{key:"i18n",label:"i18n",link:"https://www.npmjs.com/package/i18n",category:"util",notion:""},{key:"chalk",label:"Chalk",link:"https://github.com/chalk/chalk/",category:"util",notion:""},{key:"node",label:"Node.js",link:"https://nodejs.org/",category:"util",notion:""},{key:"ws",label:"ws",link:"https://github.com/websockets/ws",category:"util",notion:""},{key:"postgres",label:"PostgreSQL",link:"https://www.postgresql.org/",category:"util",notion:""},{key:"redis",label:"Redis",link:"https://redis.io/",category:"util",notion:""},{key:"socketio",label:"Socket.IO",link:"https://socket.io/",category:"util",notion:""},{key:"sqlite",label:"SQLite",link:"https://sqlite.org/",category:"util",notion:""},{key:"leaflet",label:"Leaflet",link:"https://leafletjs.com/",category:"map",notion:""},{key:"yandexmaps",label:"Yandex Maps API",link:"https://yandex.com/dev/maps/",category:"map",notion:""},{key:"wordpress",label:"WordPress",link:"https://wordpress.org/",category:"cms",notion:""},{key:"bitrix",label:"1C-ÐиÑÑикÑ",link:"https://www.1c-bitrix.ru/",category:"cms",notion:""},{key:"mobx",label:"MobX",link:"https://mobx.js.org/",category:"cms",notion:"Редко пÑакÑикÑÑ ÑейÑаÑ"},{key:"bitrix24",label:"ÐиÑÑикÑ24",link:"https://www.bitrix24.ru/",category:"crm",notion:"РабоÑал, но давно"},{key:"espocrm",label:"EspoCRM",link:"https://www.espocrm.com/",category:"crm",notion:""},{key:"mikbill",label:"MikBill",link:"https://www.mikbill.com/",category:"billing",notion:""},{key:"lanbilling",label:"LanBilling",link:"https://lanbilling.ru/",category:"billing",notion:""}],F=O(()=>{const C=[],S=[];return ue.forEach((w,c)=>{const P=ee.filter(g=>g.category===w.key),b={...w,items:P};c%2===0?C.push(b):S.push(b)}),[C,S]}),G=x([{nda:!0,period:["ФевÑÐ°Ð»Ñ 2025","ÐÑÐ½Ñ 2025"],title:"ÐногоÑÑÐ¾Ð²Ð½ÐµÐ²Ð°Ñ Ð¿Ð»Ð°ÑÑоÑма Ð´Ð»Ñ Ð²Ð¸Ð·ÑалÑного пÑоекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑÑÑÑами",technologies:["ts","vite","vue3","sfc","tailwind","scss","axios","primevue","tiptap","vueuse","zod","i18n","vue-sfc-loader","nexe","codemirror","chartjs"],contribution:["РазÑабоÑал маÑÑÑабиÑÑемое SPA-пÑиложение на Vue 3 Ñ Ð¸ÑполÑзованием Vite, TypeScript, TailwindCSS, Vue, PrimeVue.","Реализовал аÑÑ
иÑекÑÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² Ð´Ð»Ñ UI: поддеÑжка динамиÑеÑкого подклÑÑÐµÐ½Ð¸Ñ datasource-адапÑеÑов, Ñем оÑоÑмлениÑ, ÑаÑÑиÑений Ð´Ð»Ñ Ð²Ð¸Ð·ÑалÑного конÑÑÑÑкÑоÑа оÑÑÑÑов. ","ÐÑганизовал ÑиÑÑÐµÐ¼Ñ ÑегиÑÑÑаÑии и инÑегÑаÑии UI-плагинов ÑеÑез деклаÑаÑивнÑе API (registerExtension, defineUiPlugin). ","ÐнедÑил поддеÑÐ¶ÐºÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкой загÑÑзки компоненÑов, аÑинÑ
ÑоннÑÑ
ÑоÑм, валидаÑии (Zod), локализаÑии, каÑÑомнÑÑ
ÑедакÑоÑов запÑоÑов и наÑÑÑоек иÑÑоÑников даннÑÑ
. ","ÐаÑÑÑоил ÑбоÑÐºÑ Ð¸ опÑимизаÑÐ¸Ñ ÑÑонÑенда Ð´Ð»Ñ ÑазнÑÑ
плаÑÑоÑм (Windows, Linux), каÑÑомнÑе Ñанки Ð´Ð»Ñ ÐºÑÑпнÑÑ
завиÑимоÑÑей, а Ñак же ÑбоÑка бинаÑнÑÑ
пакеÑов. ","Реализовал взаимодейÑÑвие Ñ backend ÑеÑез WebSocket (ÑеалÑайм-ÑведомлениÑ, Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
), REST API, а Ñакже инÑегÑаÑÐ¸Ñ Ñ ÑиÑÑемой авÑоÑизаÑии. ","РазÑабоÑал и поддеÑживал UI Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑÑÑÑами, иÑÑоÑниками даннÑÑ
, Ñаблонами, полÑзоваÑелÑми, гÑÑппами и пÑавами доÑÑÑпа. ","ÐнедÑил ÑиÑÑÐµÐ¼Ñ ÑемизаÑии и ÑаÑÑиÑÑемоÑÑи инÑеÑÑейÑа (поддеÑжка каÑÑомнÑÑ
Ñем и визÑалÑнÑÑ
ÑаÑÑиÑений)."],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",achievments:["Реализовал маÑÑÑабиÑÑемÑÑ Ð°ÑÑ
иÑекÑÑÑÑ ÑÑонÑенда Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой динамиÑеÑкиÑ
плагинов, Ñем, ÑаÑÑиÑÑемÑÑ
UI-компоненÑов и инÑегÑаÑией Ñ ÑиÑÑемой оÑÑÑÑов, ÑÑо позволило ÑоздаваÑÑ Ð¸ подклÑÑаÑÑ Ð½Ð¾Ð²Ñе модÑли без изменений оÑновного пÑиложениÑ."],architecture:"ÐÑÐ¾ÐµÐºÑ Ð¿Ð¾ÑÑÑоен по пÑинÑÐ¸Ð¿Ñ Ð¼Ð¾Ð½Ð¾ÑепозиÑоÑÐ¸Ñ (monorepo) и вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð½ÐµÑколÑко ÑеÑвиÑов и плагинов: оÑновной backend (NestJS), frontend-пÑиложение (Vue 3 + Vite), ÑдÑо Ð´Ð»Ñ ÑаÑÑиÑений, ÑиÑÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² и инÑÑÑÑменÑÑ Ð´Ð»Ñ ÑбоÑки и деплоÑ."},{nda:!0,period:["ÐоÑбÑÑ 2024","ФевÑÐ°Ð»Ñ 2025"],title:"ÐеÑÐµÐ½Ð¾Ñ ÑаÑмаÑепÑиÑеÑкого маÑкеÑплейÑа Ñ 1С.ÐиÑÑÐ¸ÐºÑ Ð½Ð° SSR",technologies:["ts","vite","lite-ssr","vue3","sfc","scss","axios","vueuse","bitrix","yandexmaps","php","vuelidate"],contribution:["РеализаÑÐ¸Ñ Ð±ÐµÑÑовной инÑегÑаÑии SSR ÑÑÑÐ°Ð½Ð¸Ñ Ñ 1С ÐиÑÑикÑ, а в поÑледÑÑвии, далÑнейÑий пеÑÐµÐ½Ð¾Ñ Ð²Ñего ÑÑнкÑионала на LSSR","ÐеÑÐµÐ½Ð¾Ñ ÑекÑÑего ÑÑнкÑионала ÑайÑа на SSR","Ð ÑководÑÑво командой и пÑоÑеÑÑом ÑазÑабоÑки","ÐенеÑаÑÐ¸Ñ Ð°ÑÑеÑакÑов, и Ð¿Ð¾Ð»Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¼ÑникаÑÐ¸Ñ Ñ Ð·Ð°ÐºÐ°Ð·Ñиками","ФоÑмиÑование и опиÑание Ð·Ð°Ð´Ð°Ñ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑазÑабоÑки","ÐнедÑение новÑÑ
ÑпоÑобов опÑимизаÑии ÑендеÑа ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ð° ÑÑоÑоне SSR"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",achievments:["УдалоÑÑ Ð´Ð¾Ð±Ð¸ÑÑÑÑ FCP в 0.8s, TBT в 50ms и SI в 0.9s на Ñамой загÑÑженной ÑÑÑаниÑе, вÑполнÑÑÑей 12 оÑделÑнÑÑ
запÑоÑов Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½ÐµÑной ÑÑÑаниÑÑ (ÑÑловноÑÑÑ API 1С.ÐиÑÑикÑ)"],architecture:"Feature-Sliced Design"},{nda:!1,period:["ÐкÑÑбÑÑ 2024","ÐоÑбÑÑ 2024"],title:"LiteSSR. РазÑабоÑка ÑнивеÑÑалÑного плагина Vite Ð´Ð»Ñ ÑеализаÑии SSR",technologies:["ts","vite","esbuild","chalk","express","rollup","vue3","react","axios","modules"],contribution:["РазÑабоÑка плагина Ð´Ð»Ñ Vite","РеализаÑÐ¸Ñ ÑнивеÑÑалÑного API Ð´Ð»Ñ ÑабоÑÑ Ñ SSR и ÑегиÑÑÑаÑии генеÑаÑоÑов ÑÑÑаниÑ","РазÑабоÑка генеÑаÑоÑа Vue","РазÑабоÑка минималÑного генеÑаÑоÑа Ð´Ð»Ñ React","РазÑабоÑка ÑиÑÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² LSSR","РазÑабоÑка ÑиÑÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑоÑов","РазÑабоÑка плагинов Ð´Ð»Ñ SSR (Cookie, Proxy, Cached-Data)","РазÑабоÑка плагинов Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑоÑа Vue (VueRouter, Axios, oFetch, Unhead)"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",achievments:["ÐолÑÑилоÑÑ Ð¾ÑделиÑÑ ÑеÑвеÑнÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ SSR, Ð¾Ñ ÑамиÑ
генеÑаÑоÑов, и даже ÑеализоваÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑеннÑй генеÑаÑÐ¾Ñ Ð´Ð»Ñ Vue, коÑоÑÑй макÑималÑно иÑполÑзÑÐµÑ ÑÑандаÑÑнÑй подÑ
од ÑазÑабоÑки SPA пÑиложений, не ÑÑебÑÑÑий ÑеÑакÑоÑинга кода, пÑи пеÑеноÑе Ñже ÑÑÑеÑÑвÑÑÑиÑ
SPA пÑиложений на SSR"],architecture:"СиÑÑема пакеÑов (модÑлей) на базе workspace'ов"},{nda:!1,period:["ÐÑÐ½Ñ 2024","ÐкÑÑбÑÑ 2024"],title:"Ðеб-ÑÐ°Ð¹Ñ Ð¸ конÑÑÑÑкÑÐ¾Ñ ÑÑÑÐ°Ð½Ð¸Ñ ÑайÑа компании ÐФÐÐ",technologies:["ts","vite","vue3","nuxt3","sfc","tailwind","scss","axios","daisy","vueuse","zod","pinia","i18n"],contribution:["РазÑабоÑка визÑалÑного конÑÑÑÑкÑоÑа ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ð° базе GrapesJS Ñ ÑаблонизаÑией Vue","РазÑабоÑка генеÑаÑоÑа ÑоÑÑинга, и визÑалÑной ÑаÑÑи ÑÑÑаниÑ","ÐапиÑание плагинов и модÑлей Nuxt3, Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑким ÑоÑÑингом и локализаÑией в ÑанÑайме","Ð ÑководÑÑво командой и пÑоÑеÑÑом ÑазÑабоÑки","ÐекомпозиÑÐ¸Ñ Ð¸ опиÑание ÑабоÑ","ÐенеÑаÑÐ¸Ñ Ð°ÑÑеÑакÑов Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑазÑабоÑки"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",achievments:["УдалоÑÑ ÑеализоваÑÑ ÑдобнÑй визÑалÑнÑй ÑедакÑÐ¾Ñ Ð²ÐµÐ±-ÑÑÑаниÑ, Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой ÑаблонизаÑоÑа Vue"],architecture:"Nuxt"},{nda:!0,period:["ÐпÑÐµÐ»Ñ 2024","ÐÑÐ½Ñ 2024"],title:"ÐодеÑнизаÑÐ¸Ñ ÐРи ÐÐ ÑÑÑаÑ
овой компании",technologies:["ts","vite","vue2","vue3","sfc","scss","axios","vueuse","vee-validate","pinia","chartjs","cordova"],contribution:["ÐоддеÑжка ÑÑÑеÑÑвÑÑÑей кодовой базÑ","РазÑабоÑка нового ÑÑнкÑионала","ЧаÑÑиÑнÑй ÑеÑакÑоÑинг ÑÑÑеÑÑвÑÑÑего ÑÑнкÑионала","ФоÑмиÑование ÑеÑ
ниÑеÑкой докÑменÑаÑии"],methodology:"Agile/Scrum, 2Ñ
-неделÑнÑе ÑпÑинÑÑ",achievments:["УдалоÑÑ Ð¿ÑовеÑÑи ÑеÑакÑоÑинг вÑей пÑоблемной кодовой базÑ, опÑимизиÑоваÑÑ ÑабоÑÑ Ð²ÐµÐ±-ÑайÑа, ÑазделиÑÑ Ð¿ÐµÑе-иÑполÑзÑемÑй ÑÑнкÑионал в оÑделÑнÑе модÑли, за коÑоÑкий ÑÑок"],architecture:"ÐеÑÐµÐ½Ð¾Ñ (изнаÑалÑно) модÑлÑной ÑиÑÑÐµÐ¼Ñ Ð½Ð° FSD"},{nda:!0,period:["ÐкÑÑбÑÑ 2023","ÐекабÑÑ 2023"],title:"ÐоÑабоÑка логиÑÑиÑеÑкого ÑеÑвиÑа",technologies:["ts","vue3","konva","sass","axios"],contribution:["РазÑабоÑал инÑеÑакÑивнÑй компоновÑик ÑÑÑмов ÑÑаÑлеÑов и ÑÑанÑпоÑÑнÑÑ
ÑÑдов на базе Konva.js Ñ drag&drop и ÑлоÑми.","Реализовал ÑаÑÑÑÑ Ð²ÐµÑовÑÑ
огÑаниÑений по ÑлоÑм и моменÑалÑнÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¿ÐµÑегÑÑза Ñ Ð²Ð¸Ð·ÑалÑнÑми подÑказками.","Ðобавил ÑÑенаÑии погÑÑзки/вÑгÑÑзки Ñ ÑимÑлÑÑией оÑеÑедноÑÑи, ÑикÑаÑией ÑоÑек доÑÑÑпа и пÑедÑпÑеждениÑми о наÑÑÑениÑÑ
ÑеÑ
ники безопаÑноÑÑи.","ÐнÑегÑиÑовал модÑÐ»Ñ Ñ API логиÑÑики и подгоÑовил ÑкÑпоÑÑ Ð¿Ð»Ð°Ð½Ð¾Ð² ÑейÑа в ÑÑÑеÑÑвÑÑÑие оÑÑÑÑнÑе ÑоÑмÑ."],methodology:"Agile/Scrum, 2Ñ
-неделÑнÑе ÑпÑинÑÑ",achievments:["СокÑаÑил вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñовки ÑейÑа на ~35% благодаÑÑ Ð²Ð¸Ð·ÑализаÑии и авÑомаÑиÑеÑким ÑаÑÑÑÑам вмеÑÑимоÑÑи."],architecture:"Vue 3 SPA Ñ Konva.js, инÑегÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² логиÑÑиÑеÑкÑÑ Ð¿Ð»Ð°ÑÑоÑмÑ"},{nda:!1,period:["СенÑÑбÑÑ 2023","ÐекабÑÑ 2023"],title:"In-DAP (PoC пÑоекÑ)",description:"РазÑабоÑка оÑеÑеÑÑвенного ÑзконапÑавленного аналога Grafana/Zabbix",technologies:["ts","vite","vue3","sfc","vue-sfc-loader","scss","graphql","vueuse","antdv","codemirror","echarts","zod","pinia"],contribution:["РазÑабоÑка PoC ÑиÑÑÐµÐ¼Ñ Ð¼Ð¾Ð½Ð¸ÑоÑинга и ÑбоÑа меÑÑик","Создание ÑиÑÑÐµÐ¼Ñ Ð²Ð¸Ð·ÑализаÑии даннÑÑ
","РазÑабоÑка конÑигÑÑаÑоÑа виÑÑин визÑализаÑии","ФоÑмиÑование полÑзоваÑелÑÑкой и ÑеÑ
ниÑеÑкой докÑменÑаÑии"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",achievments:["УдалоÑÑ ÑеализоваÑÑ ÑдобнÑй конÑигÑÑаÑÐ¾Ñ Ð²Ð¸ÑÑин (деÑбоÑдов) Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
по ÑÑÑноÑÑÑм, позволÑÑÑий ÑеÑез веб-инÑеÑÑÐµÐ¹Ñ Ð¸ÑполÑзоваÑÑ Ð³Ð¾ÑовÑе гÑаÑики, пиÑаÑÑ ÑобÑÑвеннÑе виджеÑÑ Ð½Ð° Vue+JS в ÑанÑайме, наÑÑÑаиваÑÑ Ð¿Ð¾Ð»ÑÑение даннÑÑ
ÑеÑез GraphQL"],architecture:"ÐодÑлÑнаÑ"},{nda:!0,period:["ФевÑÐ°Ð»Ñ 2023","СенÑÑбÑÑ 2023"],title:"ÐÑк-оÑÐ¸Ñ Ð¿Ð°Ð½ÐµÐ»Ñ Ð±Ð»Ð°Ð³Ð¾ÑвоÑиÑелÑного Ñонда",contribution:["РазÑабоÑка CRM конкÑÑÑной плоÑадки","РеализаÑÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑиÑÑемÑÑ
Ñаблонов заÑвок и оÑÑÑÑов","ÐпÑимизаÑÐ¸Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом ÑоÑм на ÑÑоÑоне клиенÑа","ÐпÑимизаÑÐ¸Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑими обÑемами даннÑÑ
на Ñ
1ÑонÑе","РеÑакÑоÑинг ÑнаÑледованного легаÑи-ÑÑнкÑионала"],methodology:"Agile/Scrum, 2Ñ
-неделÑнÑе ÑпÑинÑÑ",architecture:"ÐодÑлÑнаÑ"},{nda:!0,period:["ÐекабÑÑ 2022","ФевÑÐ°Ð»Ñ 2023"],title:"РазÑабоÑка веб-ÑайÑа инÑеÑнеÑ-пÑовайдеÑа",contribution:["РазÑабоÑка b2c и b2b клиенÑÑкиÑ
ÑаÑÑей ÑайÑа","РеализаÑÐ¸Ñ ÑÑнкÑионала ÑабоÑÑ Ñ Ð¿Ð¾Ð»Ð¸Ð³Ð¾Ð½Ð°Ð»ÑнÑми зонами на каÑÑе (авÑоÑаÑÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей подклÑÑениÑ, опÑеделение ÑаÑиÑнÑÑ
зон и Ñ.д.)","ÐнÑегÑаÑÐ¸Ñ Ñ ÑаÑпознаванием меÑÑоположений (Navigator, DaData)","РазÑабоÑка ÑÑнкÑионала авÑомаÑиÑеÑкого подбоÑа ÑаÑиÑов","Создание коÑп. UI-Kit"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",achievments:["УдалоÑÑ ÑазÑабоÑаÑÑ Ð¾ÑделÑнÑй ÑеÑÐ²Ð¸Ñ FrontEnd на Nuxt, поддеÑживаÑÑий конÑигÑÑаÑÐ¸Ñ SEO, SiteMap и веб-ÑÑÑÐ°Ð½Ð¸Ñ Ð¸Ð· 1С-ÐиÑÑикÑ. Так же ÑдалоÑÑ ÑеализоваÑÑ Ð¿ÑокÑиÑование запÑоÑов к внеÑним API без Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ñокенов на ÑÑоÑоне клиенÑа"],architecture:"ÐодÑлÑнаÑ"},{nda:!1,period:["ÐоÑбÑÑ 2022","ÐекабÑÑ 2022"],title:"СÐÐÐÐ-маÑкеÑинг",contribution:["ÐоддеÑжка ÑÑÑеÑÑвÑÑÑей кодовой базÑ","РазÑабоÑка нового ÑÑнкÑионала","РеÑакÑоÑинг ÑÑÑеÑÑвÑÑÑего ÑÑнкÑионала"],methodology:"Agile/Scrum, 2Ñ
-неделÑнÑе ÑпÑинÑÑ",architecture:"ÐодÑлÑнаÑ"},{nda:!1,period:["Ðай 2022","ÐоÑбÑÑ 2022"],title:'Ðеб-ÑÐ°Ð¹Ñ Ð¸ ÑиÑÑÐµÐ¼Ñ Ð³ÑÑÐ¿Ð¿Ñ ÑегионалÑнÑÑ
инÑеÑÐ½ÐµÑ Ð¿ÑовайдеÑов ÐÐÐ "ÐовÑе СеÑи" и ÐÐÐ "Ð ÑÐÑÑ"',contribution:["РазÑабоÑка веб-ÑайÑа пÑовайдеÑа","РазÑабоÑка модÑлей ÑиÑÑÐµÐ¼Ñ Ð±Ð¸Ð»Ð»Ð¸Ð½Ð³Ð°","ÐаÑÑÑойка ÑиÑÑÐµÐ¼Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¢Ð-ÐÑиÑÑавок","ÐаÑÑÑойка ÑеÑвиÑа IPTV","ÐодиÑикаÑÐ¸Ñ Ð¿ÑоÑивок Android ТÐ-ÐÑиÑÑавок","РазÑабоÑка Android ТРÐаÑнÑеÑа"],methodology:"Waterfall",achievments:["УдалоÑÑ ÑоздаÑÑ Ð°Ð²ÑомаÑизиÑованнÑÑ ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾ бÑджеÑной Ñене, ÑоÑÑоÑÑÐ°Ñ Ð¸Ð· биллинга, ÑквайÑинга, ÑеÑвиÑов IPTV, а Ñак же полнÑÑ Ð¾ÑнаÑÑÐºÑ Ð´Ð»Ñ Ð¢Ð Ð¿ÑиÑÑавок"],architecture:"ÐодÑлÑнаÑ"},{nda:!0,period:["ФевÑÐ°Ð»Ñ 2022","ÐÑÐ»Ñ 2022"],title:"B2B ÐаÑкеÑплейÑ",contribution:["РазÑабоÑка вÑей клиенÑÑкой ÑаÑÑи B2B ÐаÑкеÑплейÑа","РеализаÑÐ¸Ñ ÑÑнкÑионала заказа ÑоваÑов Ñ Ð±ÑендиÑованием и ÑеÑÑиÑикаÑией Ð¾Ñ Ð¿ÑоизводиÑелей","Создание CLI ÑÑилиÑÑ Ð´Ð»Ñ Ð¿Ð°ÑÑинга ÑоваÑов Ñ 1688"],methodology:"Agile/Scrum, 2Ñ
-неделÑнÑе ÑпÑинÑÑ",architecture:"ÐодÑлÑнаÑ"},{nda:!0,period:["ÐекабÑÑ 2021","ЯнваÑÑ 2022"],title:"СиÑÑема авÑомаÑизаÑии ÑабоÑÑ Ñ Ð·Ð°Ñвками на ÑеконÑÑÑÑкÑии",contribution:["ÐоÑабоÑка и ÑопÑовождение микÑоÑеÑвиÑа","РабоÑа Ñ Ð¾Ð´Ð½Ð¾ÑÑÑаниÑной ÑоÑмой (180 полей)","ÐбÑабоÑка даннÑÑ
из ÐРи XML Ñайлов"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",architecture:"ÐикÑоÑеÑвиÑнаÑ"},{nda:!0,period:["ÐÑÐ½Ñ 2021","ÐекабÑÑ 2022"],title:"ÐнÑÑÑенний поÑÑал гоÑ. ÑлÑжбÑ",contribution:["РазÑабоÑка внÑÑÑеннего поÑÑала Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾ÑмаÑивнÑÑ
докÑменÑов","СиÑÑемаÑизаÑÐ¸Ñ Ð¸ÑÑоÑии изменений, Ñ Ð¿Ð¾ÑÑнениÑми по изменÑÑÑимÑÑ Ð¿ÑнкÑам","ÐаÑегоÑизаÑÐ¸Ñ Ð¸Ð½ÑоÑмаÑии"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",architecture:"ÐодÑлÑнаÑ"},{nda:!0,period:["ÐоÑбÑÑ 2020","ÐÑÐ½Ñ 2021"],title:"СиÑÑема ÑбоÑа ÑÑаÑиÑÑики по голоÑованиÑм по ÐСРи ÐµÑ Ð¾Ð±Ð»Ð°ÑÑи",contribution:["РеализаÑÐ¸Ñ ÑÑнкÑионала ÑбоÑа и анализ ÑÑаÑиÑÑики по иÑогам голоÑований","РазÑабоÑка микÑоÑеÑвиÑа визÑализаÑии даннÑÑ
","Создание 3D каÑÑÑ Ñ Ð¾ÑобÑажением ÑÑаÑиÑÑики"],achievments:["УдалоÑÑ ÑделаÑÑ Ð¾Ð¿ÑимизиÑованнÑÑ ÐºÐ°ÑÑÑ, оÑÑиÑовÑваÑÑÑÑ Ð¿Ð¾ÑÑдка 200.000 ÑÑÑоений полÑÑаемÑÑ
из GeoJSON"],methodology:"Agile/Scrum, неделÑнÑе ÑпÑинÑÑ",architecture:"ÐодÑлÑнаÑ"},{nda:!1,period:["ÐекабÑÑ 2019","ÐаÑÑ 2020"],title:'Ðеб-ÑÐ°Ð¹Ñ ÑегионалÑной веб-ÑÑÑдии "Сигника"',contribution:["РазÑабоÑка и поддеÑжка веб-ÑайÑа ÑÑÑдии","Создание API и админ-панели","РеализаÑÐ¸Ñ ÑÑнкÑионала ÑбоÑа заÑвок и меÑÑик"],methodology:"Waterfall",architecture:"ÐодÑлÑнаÑ"},{nda:!0,period:["ФевÑÐ°Ð»Ñ 2019","ÐоÑбÑÑ 2019"],title:"CRM СиÑÑема Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¿ÑоекÑами в ÑÑеÑе наладки ÑеÑей и ÑиÑÑемного админиÑÑÑиÑованиÑ",contribution:["РазÑабоÑка CRM ÑиÑÑÐµÐ¼Ñ Ð´Ð»Ñ Ð°Ð²ÑомаÑизаÑии ÑабоÑÑ Ð¸Ð½ÑеÑнеÑ-пÑовайдеÑа","РеализаÑÐ¸Ñ ÑÑнкÑионала ÑÑÑÑа ÑабоÑников, пÑоекÑов, маÑеÑиалов, заÑÑаÑ","РеализаÑÐ¸Ñ ÑÑнкÑионала ÑбоÑа ÑÑаÑиÑÑики по вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑабоÑ","РеализаÑÐ¸Ñ ÑÑнкÑионала ÑаÑÑеÑа вÑÐ¿Ð»Ð°Ñ Ð¸ генеÑаÑÐ¸Ñ Ð¾ÑÑÑÑов","РазÑабоÑка WebView Android-пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑабоÑников"],methodology:"Waterfall",architecture:"ÐонолиÑнаÑ"},{nda:!1,period:["ÐекабÑÑ 2016","ÐаÑÑ 2018"],title:'РазÑабоÑка и ведение SPA инÑеÑнеÑ-магазина Ð´Ð»Ñ ÐÐÐ "ÐÑÑÐебелÑ"',contribution:['РазÑабоÑка SPA веб-пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð½ÑеÑнеÑ-магазина мебели Ð´Ð»Ñ "киоÑков"',"РазÑабоÑка Rest API и админ-панели инÑеÑÐ½ÐµÑ Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ð°","РазÑабоÑка ÑеÑвиÑа ÑÑÑÑа оÑÑаÑков и логиÑÑики инÑеÑнеÑ-заказов Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов","Ðедение и поддеÑжка ÑеÑвиÑов инÑеÑнеÑ-магазина","ÐаÑÑÑабиÑование ÑеÑÐµÐ½Ð¸Ñ Ð½Ð° неÑколÑко доÑеÑниÑ
компаний"],methodology:"Waterfall",architecture:"ÐонолиÑнаÑ"}]),Z=x([{period:["ФевÑÐ°Ð»Ñ 2024","по наÑÑ. вÑемÑ"],title:"LiteSSR",description:"ÐÐ°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ SSR и SSG на базе Vite Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой модÑлÑной аÑÑ
иÑекÑÑÑÑ Ð¸ ÑаÑÑиÑений.",contribution:["РазÑабоÑал ÑдÑо LiteSSR и ÑиÑÑÐµÐ¼Ñ API Ð´Ð»Ñ Ð´ÐµÐºÐ»Ð°ÑаÑивной ÑегиÑÑÑаÑии генеÑаÑоÑов и плагинов.","СконÑÑÑÑиÑовал пайплайн ÑбоÑки Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑким подклÑÑением middleware, кеÑем даннÑÑ
и пÑокÑи-Ñлоем.","ÐоддеÑÐ¶Ð¸Ð²Ð°Ñ Ð´Ð¾Ð
1ºÑменÑаÑиÑ, ÑÐµÐ»Ð¸Ð·Ñ Ð¸ roadmap; Ð²ÐµÐ´Ñ ÐºÐ¾Ð¼Ð¼ÑникаÑÐ¸Ñ Ñ OSS-ÑообÑеÑÑвом."],achievments:["ÐÑÐ¾ÐµÐºÑ ÑÑабилÑно иÑполÑзÑеÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑими пÑодÑкÑами и pet-пÑоекÑами Ð´Ð»Ñ Ð¼Ð¸Ð³ÑаÑии SPA â SSR.","ÐолÑÑил вклад конÑÑибÑÑÑоÑов: pull-requestâÑ Ñ Ð½Ð¾Ð²Ñми плагинами и ÑлÑÑÑением докÑменÑаÑии."],methodology:"Agile/Kanban",architecture:"Workspace-моноÑепозиÑоÑий (ÑдÑо + плагинÑ)",technologies:["ts","vite","esbuild","rollup","express","axios","vue3","react","chalk"],github:"https://github.com/DanteZZ/lite-ssr",npm:"https://www.npmjs.com/package/lite-ssr"},{period:["ÐаÑÑ 2024","по наÑÑ. вÑемÑ"],title:"LiteSSR Vue Renderer",description:"ÐÑделÑнÑй генеÑаÑÐ¾Ñ Vue3 Ð´Ð»Ñ LiteSSR Ñ Ð³Ð¾ÑовÑми плагинами и best-practice конÑигÑÑаÑией.",contribution:["Реализовал ÑовмеÑÑимоÑÑÑ Ñ Composition API, маÑÑÑÑÑизаÑией и meta-ÑендеÑингом ÑеÑез Unhead.","ÐапиÑал Ð½Ð°Ð±Ð¾Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² (@lite-ssr/vue-unhead и дÑ.) Ð´Ð»Ñ Ð±ÑÑÑÑой инÑегÑаÑии в ÑÑÑеÑÑвÑÑÑие SPA.","ÐаÑÑÑоил ÑеÑÑÑ Ð¸ пÑÐ¸Ð¼ÐµÑ Ð¿ÑиложениÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð»ÐµÐ³ÑиÑÑ Ð²Ñ
од новиÑкам и ÑменÑÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво вопÑоÑов."],methodology:"Kanban",architecture:"Workspace-пакеÑ, инÑегÑиÑованнÑй Ñ LiteSSR",technologies:["ts","vue3","vite","sfc","tailwind","axios"],github:"https://github.com/DanteZZ/lite-ssr/tree/main/packages/vue",npm:"https://www.npmjs.com/package/@lite-ssr/vue"},{period:["ÐÑÐ½Ñ 2023","по наÑÑ. вÑемÑ"],title:"NW.js Advanced Builder",description:"ÐÑоÑÑ-плаÑÑоÑменнÑй ÑбоÑÑик standalone-пÑиложений на базе NW.js c единÑм CLI.",contribution:["Создал CLI Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой Windows/Linux/macOS, Ñпаковкой ÑеÑÑÑÑов и авÑомаÑиÑеÑким обновлением manifest.","Реализовал ÑкÑипÑÑ Ð´Ð»Ñ ÑбоÑки arm64/x64, подпиÑи, инклÑда наÑивнÑÑ
модÑлей и инÑегÑаÑии CI/CD.","ÐоддеÑÐ¶Ð¸Ð²Ð°Ñ issue-ÑÑекеÑ, докÑменÑаÑÐ¸Ñ Ð¸ пÑимеÑÑ Ñаблонов Ð´Ð»Ñ ÑÑаÑÑа пÑоекÑов."],methodology:"Kanban",architecture:"Node CLI + ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð¿ÑоекÑов",technologies:["ts","node","nwjs","electron","chalk"],github:"https://github.com/DanteZZ/nw-advenced-builder",npm:"https://www.npmjs.com/package/nw-advenced-builder"},{period:["ÐвгÑÑÑ 2022","по наÑÑ. вÑемÑ"],title:"Open Game Engine",description:"TypeScript-first игÑовой движок на Canvas Ñ Ð¼Ð¾Ð´ÑлÑнÑм API, вдоÑ
новлÑннÑй GameMaker и Unity.",contribution:["СпÑоекÑиÑовал ECS-ÑдÑо, ÑиÑÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñов и ÑобÑÑий Ð´Ð»Ñ 2D-игÑ.","Реализовал ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑ Ð·Ð°Ð³ÑÑзки аÑÑеÑов, ÑпÑайÑов, анимаÑий и базового ÑедакÑоÑа ÑÑен.","ÐиÑÑ Ð´Ð¾ÐºÑменÑаÑиÑ, пÑимеÑÑ Ð¸ демо-пÑоекÑÑ; поддеÑÐ¶Ð¸Ð²Ð°Ñ Ð²ÑпÑÑк обновлений ÑеÑез npm."],methodology:"Kanban",architecture:"Monorepo (ÑдÑо + вÑпомогаÑелÑнÑе модÑли)",technologies:["ts","vite","rollup","canvas","axios"],github:"https://github.com/DanteZZ/oge-ts",npm:"https://www.npmjs.com/package/oge-ts"},{period:["ЯнваÑÑ 2024","по наÑÑ. вÑемÑ"],title:"Nu11Net Client",description:"ÐгÑовой ÐºÐ»Ð¸ÐµÐ½Ñ Nu11Net â деÑкÑÐ¾Ð¿Ð½Ð°Ñ ÑеÑминалÑÐ½Ð°Ñ Ð¸Ð³Ñа-ÑимÑлÑÑÐ¾Ñ Â«Ñ
акеÑа» Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñенной ÑеÑевой пеÑоÑниÑей.",contribution:["СпÑоекÑиÑовал игÑовой UX в дÑÑ
е ÑеÑÑо-опеÑаÑионной ÑиÑÑемÑ: ÑеÑминал, ÑÐ°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема, ÑеÑевÑе ÑÑÑÑойÑÑва и пеÑеноÑнÑе ноÑиÑели.","ÐоÑÑÑоил NW.js-оболоÑÐºÑ Ñ Ð°Ð²ÑомаÑиÑеÑкой ÑбоÑкой и деплоем под Linux, инÑегÑиÑовал игÑовой движок OGE и ÑиÑÑÐµÐ¼Ñ ÑÑенаÑиев.","Реализовал локалÑнÑÑ ÑмÑлÑÑÐ¸Ñ ÑеÑи (DHCP, DNS, ÑоÑÑеÑÑ), WebSocket-взаимодейÑÑвие Ñ ÑеÑвеÑом и меÑ
аники PvP/коопеÑаÑивного взлома.","ÐаÑÑÑоил pipeline Ñелизов (webpack, Jenkins, .deb-пакеÑÑ) и nightly-ÑбоÑки."],methodology:"Agile/Kanban",architecture:"NW.js desktop-игÑа (Vue 2 + TypeScript)",technologies:["ts","vue2","nwjs","webpack","canvas","socketio","lodash"],github:"https://github.com/mtrofimov/nu11net-client"}
1,{period:["ÐекабÑÑ 2023","по наÑÑ. вÑемÑ"],title:"Nu11Net Server",description:"ÐгÑовой ÑеÑÐ²ÐµÑ Nu11Net: ÑдÑо ÑимÑлÑÑии виÑÑÑалÑнÑÑ
маÑин, ÑеÑевÑÑ
ÑобÑÑий и коопеÑаÑивнÑÑ
ÑÑенаÑиев.",contribution:["СпÑоекÑиÑовал модÑлÑнÑÑ ÑиÑÑемÑ: ÑпÑавление ÑÑÑÑойÑÑвами, «инÑеÑнеÑ-пÑовайдеÑ», обÑабоÑÐºÑ Ð¿Ð°ÐºÐµÑов и PvP-ÑобÑÑиÑ.","Реализовал WebSocket-пÑоÑокол повеÑÑ
`ws`, ÑмÑлÑÑÐ¸Ñ DHCP/DNS и обÑабоÑÐºÑ ÑеÑевÑÑ
пакеÑов Ñ ÑоÑ
Ñанением ÑоÑÑоÑниÑ.","Создал ÑеÑминалÑнÑÑ Ð°Ð´Ð¼Ð¸Ð½-Ð¿Ð°Ð½ÐµÐ»Ñ Ð½Ð° React Blessed Ð´Ð»Ñ Ð»Ð°Ð¹Ð²-мониÑоÑинга и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑеÑами.","ÐоддеÑÐ¶Ð¸Ð²Ð°Ñ CI-пайплайн Ñелизов, ÑезеÑвнÑе копии sqlite и докÑменÑаÑÐ¸Ñ Ð¸Ð³ÑовÑÑ
ÑÑенаÑиев."],methodology:"Agile/Kanban",architecture:"Node.js ÑеÑÐ²Ð¸Ñ Ñ Ð¼Ð¾Ð´ÑлÑнÑми ÑеÑвиÑами и ÑеÑминалÑнÑм UI",technologies:["node","ws","sqlite","react","react-blessed","lodash","chalk"],github:"https://github.com/mtrofimov/nu11net-server"}]),ce={class:"relative group inline-block"},de={class:"pre absolute z-50 bottom-full mb-2 px-2 py-1 bg-gray-900 text-white text-sm rounded opacity-0 group-hover:opacity-100 transition pointer-events-none whitespace-pre"},K=H({__name:"Tooltip",props:{text:{}},setup(C){return(S,w)=>(t(),o("div",ce,[E(S.$slots,"default"),a("div",de,[E(S.$slots,"content",{},()=>[i(n(C.text),1)])])]))}}),Q={hard:["ÐапиÑание пÑигодного к поÑÑоÑÐ½Ð½Ð¾Ð¼Ñ Ð¼Ð°ÑÑÑабиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°","ÐÑдиÑ, глÑбокое ÑевÑÑ ÐºÐ¾Ð´Ð° и гÑамоÑное ÑоÑмиÑование ÑÑебований по âизменениÑâ кодовой базÑ","ÐлÑбокий ÑеÑакÑоÑинг (не пÑÑаÑÑ Ñ Ð¾Ð±ÑÑнÑм), ÑоÑмиÑование плана ÑеÑакÑоÑинга","ÐÑенка пÑоекÑов, Pre-Sale и заÑиÑа оÑенки пеÑед заказÑиками","CI/CD, ÐÐ¼ÐµÑ Ð¾Ð¿ÑÑ Ð²Ð½ÐµÐ´ÑениÑ, ÑопÑовождениÑ, Ð²Ð»Ð°Ð´ÐµÑ Ð½Ð°Ð²Ñком âобÑÑаÑÑâ dev-opsâов ÑабоÑе Ñ Ð¾Ð¿ÑеделÑннÑми ÑеÑ
нологиÑеÑкими ÑÑеками Ñ Ð¸Ñ
ÑÑоÑонÑ"],soft:["ÐенÑоÑÑÑво, ÑоÑмиÑование индивидÑалÑнÑÑ
планов ÑазвиÑÐ¸Ñ ÑпеÑиалиÑÑов, конÑÑолÑ, валидаÑиÑ","Ðаладка коммÑникаÑии внÑÑÑи командÑ","ÐÑоведение 1-1 и моÑалÑÐ½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка ÑазÑабоÑÑиков в ÑÑÑднÑе пеÑиодÑ","ÐÑоведение инÑеÑвÑÑ Ð¸ ÑÑезов знаний ÑазÑабоÑÑиков","ÐбÑение Ñ Ð·Ð°ÐºÐ°Ð·Ñиками, Ñмение оÑÑÑоÑÑÑ Ð¸Ð½ÑеÑеÑÑ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ пеÑед заказÑиком âне поÑÑÑ Ñ Ð½Ð¸Ð¼ оÑноÑенийâ"]},pe={class:"p-3 grid grid-cols-1 gap-16 lg:grid-cols-[256px_auto] print:text-[13px] print:!p-0"},ge={class:"grid grid-cols-1 sm:grid-cols-2 gap-12 gap-y-0"},ye={class:"text-lg font-semibold mb-2 print:!text-base print:mb-0"},ke=["href"],he={key:0,class:"text-gray-800 hover:text-sky-600 transition-colors"},be={key:1,class:"text-nowrap"},me={class:"text-gray-50 light:text-gray-800 hover:text-sky-500 transition-colors"},ve={key:0,class:"text-sky-500"},xe={class:"text-lg font-semibold mb-2 print:!text-base print:mb-0"},fe=["href"],Se={key:0,class:"text-gray-800 hover:text-sky-600 transition-colors"},we={key:1,class:"text-nowrap"},_e={class:"text-gray-50 light:text-gray-800 hover:text-sky-500 transition-colors"},Ce={key:0,class:"text-sky-500"},Pe={class:"grid grid-cols-1 sm:grid-cols-2 gap-12 gap-y-0 mb-10"},Ae={key:1,class:"mr-2"},je={class:"relative"},Ve={key:1,class:"mr-2"},Le={key:0,class:"opacity-50 ml-1"},Ie={key:0,class:"mb-3"},Re={class:"mb-1 print:mb-0"},Ne={key:1,class:"mr-2"},Te={class:"mb-1 print:mb-0"},Me={key:1,class:"mr-2"},De={class:"mb-3"},We={class:"mb-3"},Oe={key:4,class:"mb-3"},Be=["href"],Ue={key:0,class:"text-gray-800 hover:text-sky-600 transition-colors"},qe={key:1,class:"text-nowrap"},Ee={class:"text-gray-50 light:text-gray-800 hover:text-sky-500 transition-colors"},He={key:0,class:"mb-3"},$e={class:"mb-1 print:mb-0"},ze={key:1,class:"mr-2"},Je={class:"mb-1 print:mb-0"}
1,Fe={key:1,class:"mr-2"},Ge={class:"mb-3"},Ze={class:"mb-3"},Ke={key:4,class:"mb-3"},Qe=["href"],Xe={key:0,class:"text-gray-800 hover:text-sky-600 transition-colors"},Ye={key:1,class:"text-nowrap"},et={class:"text-gray-50 light:text-gray-800 hover:text-sky-500 transition-colors"},tt=["href"],ot=["href"],lt=500,st=4,nt=500,at=3,pt=H({__name:"index",setup(C){const S=O(()=>new Date().toLocaleDateString("ru-RU",{year:"numeric",month:"2-digit",day:"2-digit"}));le({title:`CV - Maxim Trofimov ${S.value}`});const{isLight:w}=ie(),c=se(),P=ne(),b=x(null),g=x(null),N=x(null),A=x(null),T=x(null),W=x(null),U=(k,e)=>{e?(N.value?.open?.(),b.value=k,T.value?.filter((s,p)=>p!==k).forEach(s=>{s.close?.()})):b.value=null},j=(k,e)=>{e?(A.value?.open?.(),g.value=k,W.value?.filter((s,p)=>p!==k).forEach(s=>{s.close?.()})):g.value=null},M=k=>ee.filter(e=>k.includes(e.key)),$=()=>{"hr"in c.query?P.replace("/cv/"):P.replace("/cv?hr")},l=x(!1),te=O(()=>{const k=Math.max(G.value.length-st,0);return k>0?`ÐÑÑ ${k} пÑоекÑов`:"РазвеÑнÑÑÑ"}),oe=O(()=>{const k=Math.max(Z.value.length-at,0);return k>0?`ÐÑÑ ${k} пÑоекÑов`:"РазвеÑнÑÑÑ"});return X(()=>c.query,()=>{const k="hr"in c.query;l.value=k,w.value=k,k&&(b.value=null,g.value=null)},{immediate:!0}),ae(()=>{l.value&&(l.value=!1,w.value=!1),b.value=null,g.value=null}),(k,e)=>(t(),o("div",pe,[r(J,{class:"hidden lg:block","hr-mode":l.value,onToggleHrMode:$},null,8,["hr-mode"]),e[38]||(e[38]=a("div",{class:"hidden lg:block"},null,-1)),a("div",null,[r(_,null,{default:u(()=>[r(L,{class:"text-3xl !text-gray-300 light:!text-gray-700"},{default:u(()=>[...e[0]||(e[0]=[i(" Curriculum Vitae ",-1)])]),_:1})]),_:1}),r(R),r(J,{class:"lg:hidden","hr-mode":l.value,onToggleHrMode:$},null,8,["hr-mode"]),r(_,null,{default:u(()=>[r(L,{h:"2",class:d({"!text-gray-700 print:!text-xl":l.value})},{default:u(()=>[...e[1]||(e[1]=[i(" Ðбо мне ",-1),a("span",{class:"text-lg text-gray-500 print:hidden"},"(кÑаÑко)",-1)])]),_:1},8,["class"]),r(I,null,{default:u(()=>[...e[2]||(e[2]=[i(" Ðолее 12 Ð»ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑÑ ÑазÑабоÑкой, из ниÑ
9 Ð»ÐµÑ ÐºÐ¾Ð¼Ð¼ÐµÑÑеÑкой. РабоÑал как над неболÑÑими ÑÑаÑÑапами, Ñак и над маÑÑÑабиÑÑемÑми ÑаÑпÑеделÑннÑми ÑиÑÑемами. ÐÐ¼ÐµÑ Ð¾Ð¿ÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек Ð´Ð»Ñ NodeJS (одинаÑнÑÑ
/пакеÑнÑÑ
), SSR / PWA / SPA и мобилÑнÑÑ
(WebView) пÑиложений ",-1)])]),_:1}),r(I,null,{default:u(()=>[...e[3]||(e[3]=[i(" ÐеÑÑÑÑ Ð·Ð° ÑамÑе неÑÑандаÑÑнÑе Ð´Ð»Ñ ÑÑдового FrontEnd ÑазÑабоÑÑика кейÑÑ. ÐеÑиодиÑеÑки ÑеализÑÑ ÑкÑпеÑименÑалÑнÑе pet-пÑоекÑÑ, Ð´Ð»Ñ Ð¸Ð·ÑÑÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей неÑÑандаÑÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ web-ÑеÑ
нологий. ",-1)])]),_:1})]),_:1}),r(R),r(D,{"always-opened":l.value},{default:u(()=>[r(_,null,{default:u(()=>[r(L,{h:"2",class:d({"!text-gray-700 print:!text-xl":l.value})},{default:u(()=>[...e[4]||(e[4]=[i(" ТеÑ
нологиÑеÑкий ÑÑек ",-1)])]),_:1},8,["class"]),a("div",ge,[a("div",null,[(t(!0),o(y,null,v(V(F)[0],s=>(t(),o("div",null,[a("div",ye,n(s.label),1),r(I,{class:"block"},{default:u(()=>[(t(!0),o(y,null,v(s.items,(p,f)=>(t(),B(z(p?.notion?K:"span"),{text:p?.notion},{default:u(()=>[a("a",{href:p.link||"#",target:"_blank",class:"mr-1 text-gray-500 hover:text-sky-700 transition-colors"},[l.value?(t(),o("span",he,n(p.label+(f<s.items.length-1?", ":"")),1)):(t(),o("span",be,[e[5]||(e[5]=i(n("{")+" ",-1)),a("span",me,[i(n(p.label),1),p.notion?(t(),o("span",ve,"*")):h("",!0)]),e[6]||(e[6]=i(" "+n("}"),-1))]))],8,ke)]),_:2},1032,["text"]))),256))]),_:2},1024)]))),256))]),a("div",null,[(t(!0),o(y,null,v(V(F)[1],s=>(t(),o("div",null,[a("div",xe,n(s.label),1),r(I,{class:"block"},{default:u(()=>[(t(!0),o(y,null,v(s.items,(p,f)=>(t(),B(z(p.notion?K:"span"),{text:p.notion},{default:u(()=>[a("a",{href:p.link||"#",target:"_blank",class:"mr-1 text-gray-500 hover:text-sky-700 transition-colors"},[l.value?(t(),o("span",Se,n(p.label+(f<s.items.length-1?", ":"")),1)):(t(),o("span",we,[e[7]||(e[7]=i(n("{")+" ",-1)),a("span",_e,[i(n(p.label),1),p.notion?(t(),o("span",Ce,"*")):h("",!0)]),e[8]||(e[8]=i(" "+n("}"),-1))]))],8,fe)]),_:2},1032,["text"]))),256))]),_:2},1024)]))),256))])])]),_:1})]),_:1},8,["always-opened"]),r(_,null,{default:u(()=>[r(L,{h:"2",class:d({"!text-gray-700 print:!text-xl":l.value})},{default:u(()=>[...e[9]||(e[9]=[i(" ÐÑоÑеÑÑионалÑнÑе навÑки ",-1)])]),_:1},8,["class"]),a("div",Pe,[a("div",null,[e[13]||(e[13]=a("div",{class:"text-lg font-semibold leading-8 print:!text-base"}," HardSkills ",-1)),(t(!0),o(y,null,v(V(Q).hard,s=>(t(),o("p",null,[l.value?(t(),o("span",Ae,"â¢")):(t(),o(y,{key:0},[e[10]||(e[10]=i(" [",-1)),e[11]||(e[11]=a("span",{class:"text-green-400"},"â",-1)),e[12]||(e[12]=i("] ",-1))],64)),i(" "+n(s),1)]))),256))]),a("div",null,[e[17]||(e[17]=a("div",{class:"text-lg font-semibold leading-8 print:!text-base"}," SoftSkills ",-1)),(t(!0),o(y,null,v(V(Q).soft,s=>(t(),o("p",je,[l.value?(t(),o("span",Ve,"â¢")):(t(),o(y,{key:0},[e[14]||(e[14]=i(" [",-1)),e[15]||(e[15]=a("span",{class:"text-green-400"},"â",-1)),e[16]||(e[16]=i("] ",-1))],64)),i(" "+n(s),1)]))),256))])])]),_:1}),r(R,{class:"break-after-page"}),r(D,{ref_key:"projectsContainerSpoiler",ref:N,"always-opened":l.value,height:lt,none:l.value,"collapsed-label":te.value},{default:u(()=>[r(_,null,{default:u(()=>[r(L,{h:"2",class:d({"!text-gray-700 print:!text-xl":l.value})},{default:u(()=>[...e[18]||(e[18]=[i(" ÐоммеÑÑеÑкие пÑоекÑÑ ",-1)])]),_:1},8,["class"]),r(I,null,{default:u(()=>[...e[19]||(e[19]=[a("span",{class:"opacity-50 ml-1"},"**",-1),i(" - ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸ некоÑоÑÑе деÑали пÑоекÑов Ñ Ð½Ðµ Ð¸Ð¼ÐµÑ Ð¿Ñава ÑазглаÑаÑÑ Ð² ÑвÑзи Ñ NDA. ",-1)])]),_:1})]),_:1}),a("div",{class:d(["grid grid-cols-1 lg:grid-cols-2 gap-12 gap-y-6",{"!grid-cols-1 !gap-0":l.value,group:!l.value}])},[(t(!0),o(y,null,v(V(G),(s,p)=>(t(),o("div",{class:d(["transition-size",{"lg:col-span-2":b.value===p}]),style:Y({"grid-row-start":k.$viewport.isGreaterOrEquals("lg")&&b.value===p+1&&b.value%2===1?Math.ceil(b.value/2)+1:"auto"})},[r(D,{ref_for:!0,ref_key:"projectSpoilers",ref:T,full:"",onToggle:f=>U(p,f),"always-opened":l.value,none:l.value},{default:u(({opened:f})=>[r(_,{class:d(["relative",{"transition-opacity group-hover:opacity-65 hover:!opacity-100":p!==b.value}])},{default:u(()=>[a("div",{class:d(["text-lg font-semibold mb-0 leading-5",{"!text-xl mb-1 print:!text-[1rem]":l.value}])},[i(n(s.title),1),s.nda?(t(),o("span",Le,"**")):h("",!0)],2),a("div",{class:d(["text-sm mb-2 text-sky-300 light:text-sky-600 print:!text-gray-300",{"!text-gray-500":l.value}])}," [ "+n(s.period[0])+" - "+n(s.period[1])+" ] ",3),s.description?(t(),o("p",Ie,n(s.description),1)):h("",!0),f?(t(),o("p",{key:1,class:d(["text-sky-500 mb-1",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"Ðой вклад:":"[ Ðой вклад ]"),3)):h("",!0),(t(!0),o(y,null,v(s.contribution,m=>(t(),o("p",Re,[l.value?(t(),o("span",Ne,"â¢")):(t(),o(y,{key:0},[e[20]||(e[20]=i(" [",-1)),e[21]||(e[21]=a("span",{class:"text-green-500"},"+",-1)),e[22]||(e[22]=i("] ",-1))],64)),i(" "+n(m),1)]))),256)),s.achievments?.length?(t(),o(y,{key:2},[a("p",{class:d(["text-sky-500 mb-1",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ÐоÑÑижениÑ:":"[ ÐоÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ ]"),3),(t(!0),o(y,null,v(s.achievments,m=>(t(),o("p",Te,[l.value?(t(),o("span",Me,"â¢")):(t(),o(y,{key:0},[e[23]||(e[23]=i(" [",-1)),e[24]||(e[24]=a("span",{class:"text-green-500"},"â",-1)),e[25]||(e[25]=i("] ",-1))],64)),i(" "+n(m),1)]))),256))],64)):h("",!0),a("p",{class:d(["text-sky-500 mb-1 mt-3",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ÐеÑодологиÑ:":"[ ÐеÑÐ¾Ð´Ð¾Ð»Ð¾Ð³Ð¸Ñ ]"),3),a("p",De,n(s.methodology),1),a("p",{class:d(["text-sky-500 mb-1 mt-3",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ÐÑÑ
иÑекÑÑÑа:":"[ ÐÑÑ
иÑекÑÑÑа ]"),3),a("p",We,n(s.architecture),1),s.technologies?(t(),o("p",{key:3,class:d(["text-sky-500 mb-1 mt-3",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ТеÑ
нологии:":"[ ТеÑ
нологии ]"),3)):h("",!0),s.technologies?(t(),o("p",Oe,[(t(!0),o(y,null,v(M(s.technologies),(m,q)=>(t(),o("span",null,[a("a",{href:m.link||"#",target:"_blank",class:"mr-1 text-gray-500 hover:text-sky-700 transition-colors"},[l.value?(t(),o("span",Ue,n(m.label+(q<s.technologies.length-1?", ":"")),1)):(t(),o("span",qe,[e[26]||(e[26]=i(n("{")+" ",-1)),a("span",Ee,n(m.label),1),e[27]||
1(e[27]=i(" "+n("}"),-1))]))],8,Be)]))),256))])):h("",!0)]),_:2},1032,["class"])]),_:2},1032,["onToggle","always-opened","none"])],6))),256))],2)]),_:1},8,["always-opened","none","collapsed-label"]),r(R),r(D,{ref_key:"opensourceContainerSpoiler",ref:A,"always-opened":l.value,height:nt,none:l.value,"collapsed-label":oe.value},{default:u(()=>[r(_,null,{default:u(()=>[r(L,{h:"2",class:d({"!text-gray-700 print:!text-xl":l.value})},{default:u(()=>[...e[28]||(e[28]=[i(" Open Source пÑоекÑÑ ",-1)])]),_:1},8,["class"]),r(I,null,{default:u(()=>[...e[29]||(e[29]=[i(" ÐлÑÑевÑе пÑблиÑнÑе иниÑиаÑÐ¸Ð²Ñ Ñ Ð¾ÑкÑÑÑÑм иÑÑ
однÑм кодом и поÑÑоÑнной поддеÑжкой. ",-1)])]),_:1})]),_:1}),a("div",{class:d(["grid grid-cols-1 lg:grid-cols-2 gap-12 gap-y-6",{"!grid-cols-1 !gap-0":l.value,group:!l.value}])},[(t(!0),o(y,null,v(V(Z),(s,p)=>(t(),o("div",{class:d(["transition-size",{"lg:col-span-2":g.value===p}])},[r(D,{ref_for:!0,ref_key:"opensourceSpoilers",ref:W,full:"",onToggle:f=>j(p,f),"always-opened":l.value,none:l.value},{default:u(({opened:f})=>[r(_,{class:d(["relative",{"transition-opacity group-hover:opacity-65 hover:!opacity-100":p!==g.value}])},{default:u(()=>[a("div",{class:d(["text-lg font-semibold mb-0 leading-5",{"!text-xl mb-1 print:!text-[1rem]":l.value}])},n(s.title),3),a("div",{class:d(["text-sm mb-2 text-sky-300 light:text-sky-600 print:!text-gray-300",{"!text-gray-500":l.value}])}," [ "+n(s.period[0])+" - "+n(s.period[1])+" ] ",3),s.description?(t(),o("p",He,n(s.description),1)):h("",!0),f?(t(),o("p",{key:1,class:d(["text-sky-500 mb-1",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"Ðой вклад:":"[ Ðой вклад ]"),3)):h("",!0),(t(!0),o(y,null,v(s.contribution,m=>(t(),o("p",$e,[l.value?(t(),o("span",ze,"â¢")):(t(),o(y,{key:0},[e[30]||(e[30]=i(" [",-1)),e[31]||(e[31]=a("span",{class:"text-green-500"},"+",-1)),e[32]||(e[32]=i("] ",-1))],64)),i(" "+n(m),1)]))),256)),s.achievments?.length?(t(),o(y,{key:2},[a("p",{class:d(["text-sky-500 mb-1",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ÐоÑÑижениÑ:":"[ ÐоÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ ]"),3),(t(!0),o(y,null,v(s.achievments,m=>(t(),o("p",Je,[l.value?(t(),o("span",Fe,"â¢")):(t(),o(y,{key:0},[e[33]||(e[33]=i(" [",-1)),e[34]||(e[34]=a("span",{class:"text-green-500"},"â",-1)),e[35]||(e[35]=i("] ",-1))],64)),i(" "+n(m),1)]))),256))],64)):h("",!0),a("p",{class:d(["text-sky-500 mb-1 mt-3",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ÐеÑодологиÑ:":"[ ÐеÑÐ¾Ð´Ð¾Ð»Ð¾Ð³Ð¸Ñ ]"),3),a("p",Ge,n(s.methodology),1),a("p",{class:d(["text-sky-500 mb-1 mt-3",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ÐÑÑ
иÑекÑÑÑа:":"[ ÐÑÑ
иÑекÑÑÑа ]"),3),a("p",Ze,n(s.architecture),1),s.technologies?(t(),o("p",{key:3,class:d(["text-sky-500 mb-1 mt-3",{"!text-gray-700 underline underline-offset-3 font-semibold":l.value}])},n(l.value?"ТеÑ
нологии:":"[ ТеÑ
нологии ]"),3)):h("",!0),s.technologies?(t(),o("p",Ke,[(t(!0),o(y,null,v(M(s.technologies),(m,q)=>(t(),o("span",null,[a("a",{href:m.link||"#",target:"_blank",class:"mr-1 text-gray-500 hover:text-sky-700 transition-colors"},[l.value?(t(),o("span",Xe,n(m.label+(q<s.technologies.length-1?", ":"")),1)):(t(),o("span",Ye,[e[36]||(e[36]=i(n("{")+" ",-1)),a("span",et,n(m.label),1),e[37]||(e[37]=i(" "+n("}"),-1))]))],8,Qe)]))),256))])):h("",!0),s.github||s.npm?(t(),o("div",{key:5,class:d(["flex flex-wrap gap-x-4 gap-y-2 text-sm text-sky-400 light:text-sky-600 print:text-gray-400",{"!text-gray-600":l.value}])},[s.github?(t(),o("a",{key:0,href:s.github,target:"_blank",class:"hover:underline underline-offset-4"}," GitHub ",8,tt)):h("",!0),s.npm?(t(),o("a",{key:1,href:s.npm,target:"_blank",class:"hover:underline underline-offset-4"}," npm ",8,ot)):h("",!0)],2)):h("",!0)]),_:2},1032,["class"])]),_:2},1032,["onToggle","always-opened","none"])],2))),256))],2)]),_:1},8,["always-opened","none","collapsed-label"])])]))}});
1export{pt as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.