From b79037a12b991e454c95e508212ad0f0fecd4c44 Mon Sep 17 00:00:00 2001
From: "Forgejo actions[bot]" <forgejo-actions[bot]@noreply.pleshevski.ru>
Date: Wed, 12 Mar 2025 12:51:29 +0000
Subject: [PATCH] Deploy 2025-03-12

---
 404.html                                               |  8 ++++----
 assets/{404.html-BJKGAZg4.js => 404.html-Bw-82Xq4.js}  |  2 +-
 assets/{app-Cngbh0tK.js => app-DJYZ00Zc.js}            |  2 +-
 assets/index.html-B8MvPzPB.js                          |  1 -
 assets/index.html-BvT0yAcG.js                          |  1 -
 assets/index.html-CQ1iAHbC.js                          |  1 +
 assets/index.html-Dd-yZNG5.js                          |  1 +
 .../{works.html-Be9u9wdK.js => works.html-DG7W-s4f.js} |  2 +-
 .../{works.html-UxQSy3c_.js => works.html-DY9jTouw.js} |  2 +-
 eng/index.html                                         | 10 +++++-----
 eng/works.html                                         |  6 +++---
 index.html                                             | 10 +++++-----
 sitemap.xml                                            |  2 +-
 works.html                                             |  6 +++---
 14 files changed, 27 insertions(+), 27 deletions(-)
 rename assets/{404.html-BJKGAZg4.js => 404.html-Bw-82Xq4.js} (91%)
 rename assets/{app-Cngbh0tK.js => app-DJYZ00Zc.js} (99%)
 delete mode 100644 assets/index.html-B8MvPzPB.js
 delete mode 100644 assets/index.html-BvT0yAcG.js
 create mode 100644 assets/index.html-CQ1iAHbC.js
 create mode 100644 assets/index.html-Dd-yZNG5.js
 rename assets/{works.html-Be9u9wdK.js => works.html-DG7W-s4f.js} (99%)
 rename assets/{works.html-UxQSy3c_.js => works.html-DY9jTouw.js} (99%)

diff --git a/404.html b/404.html
index 71a6cb2..c16ed86 100644
--- a/404.html
+++ b/404.html
@@ -33,11 +33,11 @@
     </script>
     <meta property="og:url" content="https://pleshevski.ru/404.html"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":""}</script><title>Дмитрий Плешевский</title><meta name="description" content=" ">
     <link rel="preload" href="/assets/style-BTqgNJf6.css" as="style"><link rel="stylesheet" href="/assets/style-BTqgNJf6.css">
-    <link rel="modulepreload" href="/assets/app-Cngbh0tK.js"><link rel="modulepreload" href="/assets/404.html-BJKGAZg4.js">
-    <link rel="prefetch" href="/assets/index.html-BvT0yAcG.js" as="script"><link rel="prefetch" href="/assets/works.html-UxQSy3c_.js" as="script"><link rel="prefetch" href="/assets/index.html-B8MvPzPB.js" as="script"><link rel="prefetch" href="/assets/works.html-Be9u9wdK.js" as="script">
+    <link rel="modulepreload" href="/assets/app-DJYZ00Zc.js"><link rel="modulepreload" href="/assets/404.html-Bw-82Xq4.js">
+    <link rel="prefetch" href="/assets/index.html-CQ1iAHbC.js" as="script"><link rel="prefetch" href="/assets/works.html-DY9jTouw.js" as="script"><link rel="prefetch" href="/assets/index.html-Dd-yZNG5.js" as="script"><link rel="prefetch" href="/assets/works.html-DG7W-s4f.js" as="script">
   </head>
   <body>
-    <div id="app"><!--[--><div class="vp-theme-container" vp-container data-v-20869060><main class="page" data-v-20869060><div vp-content data-v-20869060><h1 data-v-20869060>404</h1><blockquote data-v-20869060>Верните страницу!</blockquote><a class="route-link" href="/" data-v-20869060>Вернуться на главную</a></div></main></div><!--[--><!----><!--]--><!--]--></div>
-    <script type="module" src="/assets/app-Cngbh0tK.js" defer></script>
+    <div id="app"><!--[--><div class="vp-theme-container" vp-container data-v-20869060><main class="page" data-v-20869060><div vp-content data-v-20869060><h1 data-v-20869060>404</h1><blockquote data-v-20869060>Вы заблокированы в лабиринте.</blockquote><a class="route-link" href="/" data-v-20869060>Вернуться на главную</a></div></main></div><!--[--><!----><!--]--><!--]--></div>
+    <script type="module" src="/assets/app-DJYZ00Zc.js" defer></script>
   </body>
 </html>
diff --git a/assets/404.html-BJKGAZg4.js b/assets/404.html-Bw-82Xq4.js
similarity index 91%
rename from assets/404.html-BJKGAZg4.js
rename to assets/404.html-Bw-82Xq4.js
index 3b21fdf..1d2a2b6 100644
--- a/assets/404.html-BJKGAZg4.js
+++ b/assets/404.html-Bw-82Xq4.js
@@ -1 +1 @@
-import{_ as e,c as o,a,o as n}from"./app-Cngbh0tK.js";const r={};function l(p,t){return n(),o("div",null,t[0]||(t[0]=[a("p",null,"404 Not Found",-1)]))}const c=e(r,[["render",l],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{c as comp,m as data};
+import{_ as e,c as o,a,o as n}from"./app-DJYZ00Zc.js";const r={};function l(p,t){return n(),o("div",null,t[0]||(t[0]=[a("p",null,"404 Not Found",-1)]))}const c=e(r,[["render",l],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{c as comp,m as data};
diff --git a/assets/app-Cngbh0tK.js b/assets/app-DJYZ00Zc.js
similarity index 99%
rename from assets/app-Cngbh0tK.js
rename to assets/app-DJYZ00Zc.js
index e930cb5..74e558c 100644
--- a/assets/app-Cngbh0tK.js
+++ b/assets/app-DJYZ00Zc.js
@@ -15,7 +15,7 @@
 * @vue/runtime-dom v3.5.13
 * (c) 2018-present Yuxi (Evan) You and Vue contributors
 * @license MIT
-**/let Uo;const oi=typeof window<"u"&&window.trustedTypes;if(oi)try{Uo=oi.createPolicy("vue",{createHTML:e=>e})}catch{}const ga=Uo?e=>Uo.createHTML(e):e=>e,hf="http://www.w3.org/2000/svg",gf="http://www.w3.org/1998/Math/MathML",xt=typeof document<"u"?document:null,si=xt&&xt.createElement("template"),vf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?xt.createElementNS(hf,e):t==="mathml"?xt.createElementNS(gf,e):n?xt.createElement(e,{is:n}):xt.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>xt.createTextNode(e),createComment:e=>xt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>xt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{si.innerHTML=ga(r==="svg"?`<svg>${e}</svg>`:r==="mathml"?`<math>${e}</math>`:e);const l=si.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},$t="transition",$n="animation",or=Symbol("_vtc"),va={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},mf=$e({},Hl,va),_f=e=>(e.displayName="Transition",e.props=mf,e),gs=_f((e,{slots:t})=>G(iu,bf(e),t)),Qt=(e,t=[])=>{te(e)?e.forEach(n=>n(...t)):e&&e(...t)},ii=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function bf(e){const t={};for(const x in e)x in va||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,m=yf(o),_=m&&m[0],w=m&&m[1],{onBeforeEnter:P,onEnter:S,onEnterCancelled:v,onLeave:b,onLeaveCancelled:$,onBeforeAppear:q=P,onAppear:D=S,onAppearCancelled:Q=v}=t,I=(x,F,ie,me)=>{x._enterCancelled=me,Xt(x,F?u:l),Xt(x,F?c:i),ie&&ie()},T=(x,F)=>{x._isLeaving=!1,Xt(x,f),Xt(x,h),Xt(x,d),F&&F()},A=x=>(F,ie)=>{const me=x?D:S,J=()=>I(F,x,ie);Qt(me,[F,J]),li(()=>{Xt(F,x?a:s),wt(F,x?u:l),ii(me)||ai(F,r,_,J)})};return $e(t,{onBeforeEnter(x){Qt(P,[x]),wt(x,s),wt(x,i)},onBeforeAppear(x){Qt(q,[x]),wt(x,a),wt(x,c)},onEnter:A(!1),onAppear:A(!0),onLeave(x,F){x._isLeaving=!0;const ie=()=>T(x,F);wt(x,f),x._enterCancelled?(wt(x,d),fi()):(fi(),wt(x,d)),li(()=>{x._isLeaving&&(Xt(x,f),wt(x,h),ii(b)||ai(x,r,w,ie))}),Qt(b,[x,ie])},onEnterCancelled(x){I(x,!1,void 0,!0),Qt(v,[x])},onAppearCancelled(x){I(x,!0,void 0,!0),Qt(Q,[x])},onLeaveCancelled(x){T(x),Qt($,[x])}})}function yf(e){if(e==null)return null;if(Ee(e))return[Eo(e.enter),Eo(e.leave)];{const t=Eo(e);return[t,t]}}function Eo(e){return mc(e)}function wt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[or]||(e[or]=new Set)).add(t)}function Xt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[or];n&&(n.delete(t),n.size||(e[or]=void 0))}function li(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Sf=0;function ai(e,t,n,r){const o=e._endId=++Sf,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=wf(e,t);if(!i)return r();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,d),s()},d=h=>{h.target===e&&++u>=a&&f()};setTimeout(()=>{u<a&&f()},l+1),e.addEventListener(c,d)}function wf(e,t){const n=window.getComputedStyle(e),r=m=>(n[m]||"").split(", "),o=r(`${$t}Delay`),s=r(`${$t}Duration`),i=ci(o,s),l=r(`${$n}Delay`),a=r(`${$n}Duration`),c=ci(l,a);let u=null,f=0,d=0;t===$t?i>0&&(u=$t,f=i,d=s.length):t===$n?c>0&&(u=$n,f=c,d=a.length):(f=Math.max(i,c),u=f>0?i>c?$t:$n:null,d=u?u===$t?s.length:a.length:0);const h=u===$t&&/\b(transform|all)(,|$)/.test(r(`${$t}Property`).toString());return{type:u,timeout:f,propCount:d,hasTransform:h}}function ci(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,r)=>ui(n)+ui(e[r])))}function ui(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function fi(){return document.body.offsetHeight}function Pf(e,t,n){const r=e[or];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const qr=Symbol("_vod"),ma=Symbol("_vsh"),Gr={beforeMount(e,{value:t},{transition:n}){e[qr]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Nn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Nn(e,!0),r.enter(e)):r.leave(e,()=>{Nn(e,!1)}):Nn(e,t))},beforeUnmount(e,{value:t}){Nn(e,t)}};function Nn(e,t){e.style.display=t?e[qr]:"none",e[ma]=!t}const Ef=Symbol(""),Cf=/(^|;)\s*display\s*:/;function xf(e,t,n){const r=e.style,o=Oe(n);let s=!1;if(n&&!o){if(t)if(Oe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Mr(r,l,"")}else for(const i in t)n[i]==null&&Mr(r,i,"");for(const i in n)i==="display"&&(s=!0),Mr(r,i,n[i])}else if(o){if(t!==n){const i=r[Ef];i&&(n+=";"+i),r.cssText=n,s=Cf.test(n)}}else t&&e.removeAttribute("style");qr in e&&(e[qr]=s?r.display:"",e[ma]&&(r.display="none"))}const di=/\s*!important$/;function Mr(e,t,n){if(te(n))n.forEach(r=>Mr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Tf(e,t);di.test(n)?e.setProperty(qt(r),n.replace(di,""),"important"):e[r]=n}}const pi=["Webkit","Moz","ms"],Co={};function Tf(e,t){const n=Co[t];if(n)return n;let r=Xe(t);if(r!=="filter"&&r in e)return Co[t]=r;r=ur(r);for(let o=0;o<pi.length;o++){const s=pi[o]+r;if(s in e)return Co[t]=s}return t}const hi="http://www.w3.org/1999/xlink";function gi(e,t,n,r,o,s=Pc(t)){r&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(hi,t.slice(6,t.length)):e.setAttributeNS(hi,t,n):n==null||s&&!al(n)?e.removeAttribute(t):e.setAttribute(t,s?"":Ot(n)?String(n):n)}function vi(e,t,n,r,o){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?ga(n):n);return}const s=e.tagName;if(t==="value"&&s!=="PROGRESS"&&!s.includes("-")){const l=s==="OPTION"?e.getAttribute("value")||"":e.value,a=n==null?e.type==="checkbox"?"on":"":String(n);(l!==a||!("_value"in e))&&(e.value=a),n==null&&e.removeAttribute(t),e._value=n;return}let i=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=al(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{e[t]=n}catch{}i&&e.removeAttribute(o||t)}function kf(e,t,n,r){e.addEventListener(t,n,r)}function Lf(e,t,n,r){e.removeEventListener(t,n,r)}const mi=Symbol("_vei");function Af(e,t,n,r,o=null){const s=e[mi]||(e[mi]={}),i=s[t];if(r&&i)i.value=r;else{const[l,a]=Rf(t);if(r){const c=s[t]=If(r,o);kf(e,l,c,a)}else i&&(Lf(e,l,i,a),s[t]=void 0)}}const _i=/(?:Once|Passive|Capture)$/;function Rf(e){let t;if(_i.test(e)){t={};let r;for(;r=e.match(_i);)e=e.slice(0,e.length-r[0].length),t[r[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):qt(e.slice(2)),t]}let xo=0;const Of=Promise.resolve(),Df=()=>xo||(Of.then(()=>xo=0),xo=Date.now());function If(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;pt(Mf(r,n.value),t,5,[r])};return n.value=e,n.attached=Df(),n}function Mf(e,t){if(te(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const bi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,$f=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Pf(e,r,i):t==="style"?xf(e,n,r):cr(t)?Qo(t)||Af(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Nf(e,t,r,i))?(vi(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&gi(e,t,r,i,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Oe(r))?vi(e,Xe(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),gi(e,t,r,i))};function Nf(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&bi(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return bi(t)&&Oe(n)?!1:t in e}const Hf={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Vf=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const s=qt(o.key);if(t.some(i=>i===s||Hf[i]===s))return e(o)})},jf=$e({patchProp:$f},vf);let To,yi=!1;function Ff(){return To=yi?To:Fu(jf),yi=!0,To}const Bf=(...e)=>{const t=Ff().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Uf(r);if(o)return n(o,!0,Wf(o))},t};function Wf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Uf(e){return Oe(e)?document.querySelector(e):e}var gr=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),Kf=/.md((\?|#).*)?$/,qf=(e,t="/")=>gr(e)||e.startsWith("/")&&!e.startsWith(t)&&!Kf.test(e),oo=e=>/^(https?:)?\/\//.test(e),Si=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=`${t.substring(0,t.length-3)}.html`:t.endsWith(".html")||(t=`${t}.html`),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},Gf="http://.",zf=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return Si(new URL(`${n}/${e}`,Gf).pathname)}return Si(e)},Jf=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},Yf=/(#|\?)/,_a=e=>{const[t,...n]=e.split(Yf);return{pathname:t,hashAndQueries:n.join("")}},Qf=["link","meta","script","style","noscript","template"],Xf=["title","base"],Zf=([e,t,n])=>Xf.includes(e)?e:Qf.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,ed=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=Zf(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},td=e=>e.endsWith("/")||e.endsWith(".html")?e:`${e}/`,ba=e=>e.endsWith("/")?e.slice(0,-1):e,ya=e=>e.startsWith("/")?e.slice(1):e,vs=e=>Object.prototype.toString.call(e)==="[object Object]",dt=e=>typeof e=="string";const nd="modulepreload",rd=function(e){return"/"+e},wi={},Hn=function(t,n,r){let o=Promise.resolve();return n&&n.length>0&&(document.getElementsByTagName("link"),o=Promise.all(n.map(s=>{if(s=rd(s),s in wi)return;wi[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${l}`))return;const a=document.createElement("link");if(a.rel=i?"stylesheet":nd,i||(a.as="script",a.crossOrigin=""),a.href=s,document.head.appendChild(a),i)return new Promise((c,u)=>{a.addEventListener("load",c),a.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${s}`)))})}))),o.then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})},od=JSON.parse("{}"),sd=Object.fromEntries([["/",{loader:()=>Hn(()=>import("./index.html-BvT0yAcG.js"),__vite__mapDeps([])),meta:{title:"Резюме"}}],["/works.html",{loader:()=>Hn(()=>import("./works.html-UxQSy3c_.js"),__vite__mapDeps([])),meta:{title:"Работы"}}],["/eng/",{loader:()=>Hn(()=>import("./index.html-B8MvPzPB.js"),__vite__mapDeps([])),meta:{title:"Resume"}}],["/eng/works.html",{loader:()=>Hn(()=>import("./works.html-Be9u9wdK.js"),__vite__mapDeps([])),meta:{title:"Works"}}],["/404.html",{loader:()=>Hn(()=>import("./404.html-BJKGAZg4.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*!
+**/let Uo;const oi=typeof window<"u"&&window.trustedTypes;if(oi)try{Uo=oi.createPolicy("vue",{createHTML:e=>e})}catch{}const ga=Uo?e=>Uo.createHTML(e):e=>e,hf="http://www.w3.org/2000/svg",gf="http://www.w3.org/1998/Math/MathML",xt=typeof document<"u"?document:null,si=xt&&xt.createElement("template"),vf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?xt.createElementNS(hf,e):t==="mathml"?xt.createElementNS(gf,e):n?xt.createElement(e,{is:n}):xt.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>xt.createTextNode(e),createComment:e=>xt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>xt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{si.innerHTML=ga(r==="svg"?`<svg>${e}</svg>`:r==="mathml"?`<math>${e}</math>`:e);const l=si.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},$t="transition",$n="animation",or=Symbol("_vtc"),va={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},mf=$e({},Hl,va),_f=e=>(e.displayName="Transition",e.props=mf,e),gs=_f((e,{slots:t})=>G(iu,bf(e),t)),Qt=(e,t=[])=>{te(e)?e.forEach(n=>n(...t)):e&&e(...t)},ii=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function bf(e){const t={};for(const x in e)x in va||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,m=yf(o),_=m&&m[0],w=m&&m[1],{onBeforeEnter:P,onEnter:S,onEnterCancelled:v,onLeave:b,onLeaveCancelled:$,onBeforeAppear:q=P,onAppear:D=S,onAppearCancelled:Q=v}=t,I=(x,F,ie,me)=>{x._enterCancelled=me,Xt(x,F?u:l),Xt(x,F?c:i),ie&&ie()},T=(x,F)=>{x._isLeaving=!1,Xt(x,f),Xt(x,h),Xt(x,d),F&&F()},A=x=>(F,ie)=>{const me=x?D:S,J=()=>I(F,x,ie);Qt(me,[F,J]),li(()=>{Xt(F,x?a:s),wt(F,x?u:l),ii(me)||ai(F,r,_,J)})};return $e(t,{onBeforeEnter(x){Qt(P,[x]),wt(x,s),wt(x,i)},onBeforeAppear(x){Qt(q,[x]),wt(x,a),wt(x,c)},onEnter:A(!1),onAppear:A(!0),onLeave(x,F){x._isLeaving=!0;const ie=()=>T(x,F);wt(x,f),x._enterCancelled?(wt(x,d),fi()):(fi(),wt(x,d)),li(()=>{x._isLeaving&&(Xt(x,f),wt(x,h),ii(b)||ai(x,r,w,ie))}),Qt(b,[x,ie])},onEnterCancelled(x){I(x,!1,void 0,!0),Qt(v,[x])},onAppearCancelled(x){I(x,!0,void 0,!0),Qt(Q,[x])},onLeaveCancelled(x){T(x),Qt($,[x])}})}function yf(e){if(e==null)return null;if(Ee(e))return[Eo(e.enter),Eo(e.leave)];{const t=Eo(e);return[t,t]}}function Eo(e){return mc(e)}function wt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[or]||(e[or]=new Set)).add(t)}function Xt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[or];n&&(n.delete(t),n.size||(e[or]=void 0))}function li(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Sf=0;function ai(e,t,n,r){const o=e._endId=++Sf,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=wf(e,t);if(!i)return r();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,d),s()},d=h=>{h.target===e&&++u>=a&&f()};setTimeout(()=>{u<a&&f()},l+1),e.addEventListener(c,d)}function wf(e,t){const n=window.getComputedStyle(e),r=m=>(n[m]||"").split(", "),o=r(`${$t}Delay`),s=r(`${$t}Duration`),i=ci(o,s),l=r(`${$n}Delay`),a=r(`${$n}Duration`),c=ci(l,a);let u=null,f=0,d=0;t===$t?i>0&&(u=$t,f=i,d=s.length):t===$n?c>0&&(u=$n,f=c,d=a.length):(f=Math.max(i,c),u=f>0?i>c?$t:$n:null,d=u?u===$t?s.length:a.length:0);const h=u===$t&&/\b(transform|all)(,|$)/.test(r(`${$t}Property`).toString());return{type:u,timeout:f,propCount:d,hasTransform:h}}function ci(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,r)=>ui(n)+ui(e[r])))}function ui(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function fi(){return document.body.offsetHeight}function Pf(e,t,n){const r=e[or];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const qr=Symbol("_vod"),ma=Symbol("_vsh"),Gr={beforeMount(e,{value:t},{transition:n}){e[qr]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Nn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Nn(e,!0),r.enter(e)):r.leave(e,()=>{Nn(e,!1)}):Nn(e,t))},beforeUnmount(e,{value:t}){Nn(e,t)}};function Nn(e,t){e.style.display=t?e[qr]:"none",e[ma]=!t}const Ef=Symbol(""),Cf=/(^|;)\s*display\s*:/;function xf(e,t,n){const r=e.style,o=Oe(n);let s=!1;if(n&&!o){if(t)if(Oe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Mr(r,l,"")}else for(const i in t)n[i]==null&&Mr(r,i,"");for(const i in n)i==="display"&&(s=!0),Mr(r,i,n[i])}else if(o){if(t!==n){const i=r[Ef];i&&(n+=";"+i),r.cssText=n,s=Cf.test(n)}}else t&&e.removeAttribute("style");qr in e&&(e[qr]=s?r.display:"",e[ma]&&(r.display="none"))}const di=/\s*!important$/;function Mr(e,t,n){if(te(n))n.forEach(r=>Mr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Tf(e,t);di.test(n)?e.setProperty(qt(r),n.replace(di,""),"important"):e[r]=n}}const pi=["Webkit","Moz","ms"],Co={};function Tf(e,t){const n=Co[t];if(n)return n;let r=Xe(t);if(r!=="filter"&&r in e)return Co[t]=r;r=ur(r);for(let o=0;o<pi.length;o++){const s=pi[o]+r;if(s in e)return Co[t]=s}return t}const hi="http://www.w3.org/1999/xlink";function gi(e,t,n,r,o,s=Pc(t)){r&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(hi,t.slice(6,t.length)):e.setAttributeNS(hi,t,n):n==null||s&&!al(n)?e.removeAttribute(t):e.setAttribute(t,s?"":Ot(n)?String(n):n)}function vi(e,t,n,r,o){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?ga(n):n);return}const s=e.tagName;if(t==="value"&&s!=="PROGRESS"&&!s.includes("-")){const l=s==="OPTION"?e.getAttribute("value")||"":e.value,a=n==null?e.type==="checkbox"?"on":"":String(n);(l!==a||!("_value"in e))&&(e.value=a),n==null&&e.removeAttribute(t),e._value=n;return}let i=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=al(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{e[t]=n}catch{}i&&e.removeAttribute(o||t)}function kf(e,t,n,r){e.addEventListener(t,n,r)}function Lf(e,t,n,r){e.removeEventListener(t,n,r)}const mi=Symbol("_vei");function Af(e,t,n,r,o=null){const s=e[mi]||(e[mi]={}),i=s[t];if(r&&i)i.value=r;else{const[l,a]=Rf(t);if(r){const c=s[t]=If(r,o);kf(e,l,c,a)}else i&&(Lf(e,l,i,a),s[t]=void 0)}}const _i=/(?:Once|Passive|Capture)$/;function Rf(e){let t;if(_i.test(e)){t={};let r;for(;r=e.match(_i);)e=e.slice(0,e.length-r[0].length),t[r[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):qt(e.slice(2)),t]}let xo=0;const Of=Promise.resolve(),Df=()=>xo||(Of.then(()=>xo=0),xo=Date.now());function If(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;pt(Mf(r,n.value),t,5,[r])};return n.value=e,n.attached=Df(),n}function Mf(e,t){if(te(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const bi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,$f=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Pf(e,r,i):t==="style"?xf(e,n,r):cr(t)?Qo(t)||Af(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Nf(e,t,r,i))?(vi(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&gi(e,t,r,i,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Oe(r))?vi(e,Xe(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),gi(e,t,r,i))};function Nf(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&bi(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return bi(t)&&Oe(n)?!1:t in e}const Hf={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Vf=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const s=qt(o.key);if(t.some(i=>i===s||Hf[i]===s))return e(o)})},jf=$e({patchProp:$f},vf);let To,yi=!1;function Ff(){return To=yi?To:Fu(jf),yi=!0,To}const Bf=(...e)=>{const t=Ff().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Uf(r);if(o)return n(o,!0,Wf(o))},t};function Wf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Uf(e){return Oe(e)?document.querySelector(e):e}var gr=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),Kf=/.md((\?|#).*)?$/,qf=(e,t="/")=>gr(e)||e.startsWith("/")&&!e.startsWith(t)&&!Kf.test(e),oo=e=>/^(https?:)?\/\//.test(e),Si=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=`${t.substring(0,t.length-3)}.html`:t.endsWith(".html")||(t=`${t}.html`),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},Gf="http://.",zf=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return Si(new URL(`${n}/${e}`,Gf).pathname)}return Si(e)},Jf=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},Yf=/(#|\?)/,_a=e=>{const[t,...n]=e.split(Yf);return{pathname:t,hashAndQueries:n.join("")}},Qf=["link","meta","script","style","noscript","template"],Xf=["title","base"],Zf=([e,t,n])=>Xf.includes(e)?e:Qf.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,ed=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=Zf(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},td=e=>e.endsWith("/")||e.endsWith(".html")?e:`${e}/`,ba=e=>e.endsWith("/")?e.slice(0,-1):e,ya=e=>e.startsWith("/")?e.slice(1):e,vs=e=>Object.prototype.toString.call(e)==="[object Object]",dt=e=>typeof e=="string";const nd="modulepreload",rd=function(e){return"/"+e},wi={},Hn=function(t,n,r){let o=Promise.resolve();return n&&n.length>0&&(document.getElementsByTagName("link"),o=Promise.all(n.map(s=>{if(s=rd(s),s in wi)return;wi[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${l}`))return;const a=document.createElement("link");if(a.rel=i?"stylesheet":nd,i||(a.as="script",a.crossOrigin=""),a.href=s,document.head.appendChild(a),i)return new Promise((c,u)=>{a.addEventListener("load",c),a.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${s}`)))})}))),o.then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})},od=JSON.parse("{}"),sd=Object.fromEntries([["/",{loader:()=>Hn(()=>import("./index.html-CQ1iAHbC.js"),__vite__mapDeps([])),meta:{title:"Резюме"}}],["/works.html",{loader:()=>Hn(()=>import("./works.html-DY9jTouw.js"),__vite__mapDeps([])),meta:{title:"Работы"}}],["/eng/",{loader:()=>Hn(()=>import("./index.html-Dd-yZNG5.js"),__vite__mapDeps([])),meta:{title:"Resume"}}],["/eng/works.html",{loader:()=>Hn(()=>import("./works.html-DG7W-s4f.js"),__vite__mapDeps([])),meta:{title:"Works"}}],["/404.html",{loader:()=>Hn(()=>import("./404.html-Bw-82Xq4.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*!
   * vue-router v4.5.0
   * (c) 2024 Eduardo San Martin Morote
   * @license MIT
diff --git a/assets/index.html-B8MvPzPB.js b/assets/index.html-B8MvPzPB.js
deleted file mode 100644
index c672aea..0000000
--- a/assets/index.html-B8MvPzPB.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as s,c as r,a as t,b as a,d as l,w as d,e as o,r as c,o as n}from"./app-Cngbh0tK.js";const h={};function p(m,e){const i=c("RouteLink");return n(),r("div",null,[t("p",null,[e[1]||(e[1]=a("Always up-to-date link to ")),l(i,{to:"/eng/"},{default:d(()=>e[0]||(e[0]=[a("resume")])),_:1}),e[2]||(e[2]=a("."))]),e[3]||(e[3]=o('<h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>My name is Dmitriy Pleshevskiy.</p><p>I&#39;m an open source software enthusiast, a lead software developer, architect, team leader and also mentor.</p><h2 id="skills" tabindex="-1"><a class="header-anchor" href="#skills"><span>Skills</span></a></h2><h4 id="programming-languages" tabindex="-1"><a class="header-anchor" href="#programming-languages"><span>Programming Languages:</span></a></h4><ul><li>TypeScript (prefer, solid 9-year exp)</li><li>SQL (prefer, solid 8-year exp)</li><li>Rust (prefer, solid 5-year exp)</li><li>Python (solid 9-year exp)</li><li>Haskell</li><li>Bash (8-year exp)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="repositories" tabindex="-1"><a class="header-anchor" href="#repositories"><span>Repositories:</span></a></h4><ul><li>PostgreSQL (prefer, solid 8-year exp)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (prefer, solid 5-year exp)</li></ul><hr><p>I also have extensive experience in creating the following applications:</p><ul><li>Traditional (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Dynamic (SPA)</li><li>Hybrid (SSR + SPA)</li><li>Console</li><li>Cross-platform</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (prefer, solid 2-year exp)</li><li><code>async-graphql</code> (prefer, solid 2-year exp)</li><li><code>shaku</code> (prefer, solid 2-year exp)</li><li><code>bb8</code> + <code>postgres-types</code> (prefer, solid 5-year exp)</li><li><code>diesel</code> (2-year exp)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (solid 5-year exp)</li><li><code>Express</code> (solid 9-year exp)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (solid 5-year exp)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (solid 8-year exp)</li><li><code>VueJS</code> (prefer, solid 3-year exp)</li><li><code>Cypress</code> (prefer, solid 3-year exp)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (prefer, solid 5-year exp)</li><li><code>Sass</code> (prefer, solid 8-year exp)</li><li><code>Less</code> (weak 4-year exp)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (prefer, solid 3-year exp)</li><li><code>Docker Swarm</code> (solid 6-year exp)</li><li><code>Kubernetes</code> (weak 5-year exp)</li><li><code>Woodpecker CI</code> (prefer, solid 4-year exp)</li><li><code>Drone CI</code> (solid 3-year exp)</li><li><code>Gitlab CI</code> (solid 7-year exp)</li><li><code>GitHub Actions</code> (4-year exp)</li></ul><h2 id="interests" tabindex="-1"><a class="header-anchor" href="#interests"><span>Interests</span></a></h2><p>Open-source projects are my passion! I develop, maintain and improve projects in my spare time.</p><p>Besides programming, I love to cook and spend time with my beloved family!</p><h2 id="contacts" tabindex="-1"><a class="header-anchor" href="#contacts"><span>Contacts</span></a></h2><p>Simplex (Prefer): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="links" tabindex="-1"><a class="header-anchor" href="#links"><span>Links</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Suspended)</a></li></ul>',30))])}const u=s(h,[["render",p],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/eng/","title":"Resume","lang":"en-US","frontmatter":{"home":true,"title":"Resume","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Resume"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-09-05T22:11:51.000Z"}],["meta",{"property":"article:modified_time","content":"2024-09-05T22:11:51.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Resume\\"}"]]},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Skills","slug":"skills","link":"#skills","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Interests","slug":"interests","link":"#interests","children":[]},{"level":2,"title":"Contacts","slug":"contacts","link":"#contacts","children":[]},{"level":2,"title":"Links","slug":"links","link":"#links","children":[]}],"git":{"updatedTime":1725574311000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":13}],"changelog":[{"hash":"5136f457f1e20e7ca72115f5ff1ddc4862901732","date":1725574311000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"return simplex chat to the contacts"},{"hash":"506521107df025dfffc21a3660e2e7771d4f9e8e","date":1723016198000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update comment"},{"hash":"54e24de6034cb61e2ca074f2a9c8753cba521fd2","date":1722988324000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"rename gitea to forgejo"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"ba2fb4f95d14e5838b01ae27ee4e68dac4dc71f9","date":1721863623000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update resume"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"ddd2ff6d06efd2db9112cb2b99636c2179d929cd","date":1687213302000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change email"},{"hash":"2b427b8ae1f887f104677f57e90cf58c1571057b","date":1679300440000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"add simplex address"},{"hash":"76c1027ab3308026296083278e963b34613d83ee","date":1678887571000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"fix: link to resume for each lang"},{"hash":"e2343b7c909476edc56263546fa94d5a1040f3a4","date":1678886389000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add devops"},{"hash":"95ecb0c8f1d3a9fbcbac0883b0373ea378db2537","date":1678885666000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add stack"},{"hash":"22a7e2743e4ec4ca8ad8918827c443aea7fdb0cc","date":1678884672000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: change overview"},{"hash":"189e09f12c40cb084a03661b3a58acea726fb403","date":1677744320000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move all repositories to my gitea"},{"hash":"4d0b59f2c3c9701ec72fce8bd2e7756c59314516","date":1675383475000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"chore: increment exp"},{"hash":"0ae4bc6e024d705815a68df261dfffd0c370d80c","date":1665734716000,"email":"dmitriy@ideascup.me","author":"janabhumi","message":"page/about: change primary email address"},{"hash":"3c455bd530bab2229ba19d5c1bc663d4f129975c","date":1659608763000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"ui(page/about): add matrix to the contacts"},{"hash":"ddbe5d7ade289ccd2a1313833f0f31b3efab3a13","date":1655800801000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"restructure about page"},{"hash":"c039d82aed4b06a64a3a485d41ee1e24bdbea8f7","date":1655759267000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add overview header"},{"hash":"7107e9985886b60acfa6224af1d85010f162cfaa","date":1655759063000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add solid word to skills"},{"hash":"917fc7c766d7820db25517e580932399eba9faac","date":1655758881000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change about page"},{"hash":"e2cc5b2a2bbef168a7bb7b9621c7f16fca44c56b","date":1655500126000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change page data"},{"hash":"d36bf0798f05bef2cd636b3360f49595810b26c8","date":1655156602000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"fixup: remove ignoring data folder"}]},"filePathRelative":"eng/index.md"}');export{u as comp,f as data};
diff --git a/assets/index.html-BvT0yAcG.js b/assets/index.html-BvT0yAcG.js
deleted file mode 100644
index fc56289..0000000
--- a/assets/index.html-BvT0yAcG.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as s,c as t,a as l,b as a,d,w as r,e as o,r as c,o as h}from"./app-Cngbh0tK.js";const n={};function m(p,e){const i=c("RouteLink");return h(),t("div",null,[l("p",null,[e[1]||(e[1]=a("Всегда актуальная ссылка на ")),d(i,{to:"/"},{default:r(()=>e[0]||(e[0]=[a("резюме")])),_:1}),e[2]||(e[2]=a("."))]),e[3]||(e[3]=o('<h2 id="общие-сведения" tabindex="-1"><a class="header-anchor" href="#общие-сведения"><span>Общие сведения</span></a></h2><p>Меня зовут Дмитрий Плешевский.</p><p>Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий разработчик програмного обеспечения, архитектор, руководитель команды, а так же ментор.</p><h2 id="умения" tabindex="-1"><a class="header-anchor" href="#умения"><span>Умения</span></a></h2><h4 id="языки-программирования" tabindex="-1"><a class="header-anchor" href="#языки-программирования"><span>Языки программирования:</span></a></h4><ul><li>TypeScript (предпочитаю, твёрдый 9-летний опыт)</li><li>SQL (предпочитаю, твёрдый 8-летний опыт)</li><li>Rust (предпочитаю, 5-летний опыт)</li><li>Python (твёрдый 9-летний опыт)</li><li>Haskell</li><li>Bash (8-летний опыт)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="хранилища-данных" tabindex="-1"><a class="header-anchor" href="#хранилища-данных"><span>Хранилища данных:</span></a></h4><ul><li>PostgreSQL (предпочитаю, твёрдый 8-летний опыт)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (предпочитаю, твердый 5-летний опыт)</li></ul><hr><p>Я так же имею большой опыт в создании следующих типов приложений:</p><ul><li>Традиционные (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Динамическое (SPA)</li><li>Гибридное (SSR + SPA)</li><li>Консольные</li><li>Кроссплатформенные</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>async-graphql</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>shaku</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>bb8</code> + <code>postgres-types</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>diesel</code> (2-летний опыт)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (твёрдый 5-летний опыт)</li><li><code>Express</code> (твёрдый 9-летний опыт)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (твёрдый 5-летний опыт)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (твёрдый 8-летний опыт)</li><li><code>VueJS</code> (предпочитаю, твёрдый 4-летний опыт)</li><li><code>Cypress</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>Sass</code> (предпочитаю, твёрдый 8-летний опыт)</li><li><code>Less</code> (слабый 4-летний опыт)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>Docker Swarm</code> (твёрдый 6-летний опыт)</li><li><code>Kubernetes</code> (слабый 5-летний опыт)</li><li><code>Woodpecker CI</code> (твёрдый 4-летний опыт)</li><li><code>Drone CI</code> (твёрдый 3-летний опыт)</li><li><code>Gitlab CI</code> (твёрдый 7-летний опыт)</li><li><code>GitHub Actions</code> (4-летний опыт)</li></ul><h2 id="интересы" tabindex="-1"><a class="header-anchor" href="#интересы"><span>Интересы</span></a></h2><p>Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.</p><p>Помимо программирования я люблю готовить и проводить время со своей любимой семьей!</p><h2 id="контакты" tabindex="-1"><a class="header-anchor" href="#контакты"><span>Контакты</span></a></h2><p>Simplex (Предпочтительно): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="ссылки" tabindex="-1"><a class="header-anchor" href="#ссылки"><span>Ссылки</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Приостановлен)</a></li></ul>',30))])}const f=s(n,[["render",m],["__file","index.html.vue"]]),y=JSON.parse('{"path":"/","title":"Резюме","lang":"ru-RU","frontmatter":{"home":true,"title":"Резюме","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Резюме"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-09-05T22:11:51.000Z"}],["meta",{"property":"article:modified_time","content":"2024-09-05T22:11:51.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Резюме\\"}"]]},"headers":[{"level":2,"title":"Общие сведения","slug":"общие-сведения","link":"#общие-сведения","children":[]},{"level":2,"title":"Умения","slug":"умения","link":"#умения","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Интересы","slug":"интересы","link":"#интересы","children":[]},{"level":2,"title":"Контакты","slug":"контакты","link":"#контакты","children":[]},{"level":2,"title":"Ссылки","slug":"ссылки","link":"#ссылки","children":[]}],"git":{"updatedTime":1725574311000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":13}],"changelog":[{"hash":"5136f457f1e20e7ca72115f5ff1ddc4862901732","date":1725574311000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"return simplex chat to the contacts"},{"hash":"506521107df025dfffc21a3660e2e7771d4f9e8e","date":1723016198000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update comment"},{"hash":"54e24de6034cb61e2ca074f2a9c8753cba521fd2","date":1722988324000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"rename gitea to forgejo"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"ba2fb4f95d14e5838b01ae27ee4e68dac4dc71f9","date":1721863623000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update resume"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"ddd2ff6d06efd2db9112cb2b99636c2179d929cd","date":1687213302000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change email"},{"hash":"2b427b8ae1f887f104677f57e90cf58c1571057b","date":1679300440000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"add simplex address"},{"hash":"76c1027ab3308026296083278e963b34613d83ee","date":1678887571000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"fix: link to resume for each lang"},{"hash":"e2343b7c909476edc56263546fa94d5a1040f3a4","date":1678886389000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add devops"},{"hash":"95ecb0c8f1d3a9fbcbac0883b0373ea378db2537","date":1678885666000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add stack"},{"hash":"22a7e2743e4ec4ca8ad8918827c443aea7fdb0cc","date":1678884672000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: change overview"},{"hash":"189e09f12c40cb084a03661b3a58acea726fb403","date":1677744320000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move all repositories to my gitea"},{"hash":"4d0b59f2c3c9701ec72fce8bd2e7756c59314516","date":1675383475000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"chore: increment exp"},{"hash":"0ae4bc6e024d705815a68df261dfffd0c370d80c","date":1665734716000,"email":"dmitriy@ideascup.me","author":"janabhumi","message":"page/about: change primary email address"},{"hash":"3c455bd530bab2229ba19d5c1bc663d4f129975c","date":1659608763000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"ui(page/about): add matrix to the contacts"},{"hash":"ddbe5d7ade289ccd2a1313833f0f31b3efab3a13","date":1655800801000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"restructure about page"},{"hash":"c039d82aed4b06a64a3a485d41ee1e24bdbea8f7","date":1655759267000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add overview header"},{"hash":"7107e9985886b60acfa6224af1d85010f162cfaa","date":1655759063000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add solid word to skills"},{"hash":"917fc7c766d7820db25517e580932399eba9faac","date":1655758881000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change about page"},{"hash":"e2cc5b2a2bbef168a7bb7b9621c7f16fca44c56b","date":1655500126000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change page data"},{"hash":"d36bf0798f05bef2cd636b3360f49595810b26c8","date":1655156602000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"fixup: remove ignoring data folder"}]},"filePathRelative":"index.md"}');export{f as comp,y as data};
diff --git a/assets/index.html-CQ1iAHbC.js b/assets/index.html-CQ1iAHbC.js
new file mode 100644
index 0000000..13d50fe
--- /dev/null
+++ b/assets/index.html-CQ1iAHbC.js
@@ -0,0 +1 @@
+import{_ as s,c as t,a as d,b as a,d as l,w as r,e as o,r as c,o as h}from"./app-DJYZ00Zc.js";const n={};function m(p,e){const i=c("RouteLink");return h(),t("div",null,[d("p",null,[e[1]||(e[1]=a("Всегда актуальная ссылка на ")),l(i,{to:"/"},{default:r(()=>e[0]||(e[0]=[a("резюме")])),_:1}),e[2]||(e[2]=a("."))]),e[3]||(e[3]=o('<h2 id="общие-сведения" tabindex="-1"><a class="header-anchor" href="#общие-сведения"><span>Общие сведения</span></a></h2><p>Меня зовут Дмитрий Плешевский.</p><p>Как энтузиаст open-source разработки, я всегда готов к сотрудничеству и участию в интересных проектах. Меня вдохновляет возможность вносить вклад в сообщество и делиться знаниями. Основные технологии, с которыми я работаю, включают <code>TypeScript</code>, <code>Rust</code>, <code>Python</code>, <code>PostgreSQL</code>, <code>Minio</code>, <code>RabbitMQ</code>, <code>React</code>, <code>VueJS</code>, <code>Docker</code>. Особенно люблю функциональное программирование, которое позволяет писать чистый и эффективный код. Как евангелист <code>NixOS</code>, я не только активно использую его в своих проектах, но и активно агитирую людей и компании переходить на эту систему, подчеркивая ее преимущества и помогая внедрять ее в их инфраструктуру. Большой опыт в разработке backend и frontend приложений, а также в DevOps, позволяет эффективно решать сложные задачи. Также имею опыт работы в качестве архитектора, руководителя команды и наставника.</p><h2 id="умения" tabindex="-1"><a class="header-anchor" href="#умения"><span>Умения</span></a></h2><h4 id="языки-программирования" tabindex="-1"><a class="header-anchor" href="#языки-программирования"><span>Языки программирования:</span></a></h4><ul><li>TypeScript (предпочитаю, твёрдый 9-летний опыт)</li><li>SQL (предпочитаю, твёрдый 8-летний опыт)</li><li>Rust (предпочитаю, 5-летний опыт)</li><li>Python (твёрдый 9-летний опыт)</li><li>Haskell</li><li>Bash (8-летний опыт)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="хранилища-данных" tabindex="-1"><a class="header-anchor" href="#хранилища-данных"><span>Хранилища данных:</span></a></h4><ul><li>PostgreSQL (предпочитаю, твёрдый 8-летний опыт)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Redis</li><li>Minio (предпочитаю, твердый 5-летний опыт)</li></ul><hr><p>Я так же имею большой опыт в создании следующих типов приложений:</p><ul><li>Традиционные (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Динамическое (SPA)</li><li>Гибридное (SSR + SPA)</li><li>Консольные</li><li>Кроссплатформенные</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>async-graphql</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>shaku</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>bb8</code> + <code>postgres-types</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>diesel</code> (2-летний опыт)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (твёрдый 5-летний опыт)</li><li><code>Express</code> (твёрдый 9-летний опыт)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (твёрдый 5-летний опыт)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (твёрдый 8-летний опыт)</li><li><code>VueJS</code> (предпочитаю, твёрдый 4-летний опыт)</li><li><code>Cypress</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>Sass</code> (предпочитаю, твёрдый 8-летний опыт)</li><li><code>Less</code> (слабый 4-летний опыт)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>Docker Swarm</code> (твёрдый 6-летний опыт)</li><li><code>Kubernetes</code> (слабый 5-летний опыт)</li><li><code>Woodpecker CI</code> (твёрдый 4-летний опыт)</li><li><code>Drone CI</code> (твёрдый 3-летний опыт)</li><li><code>Gitlab CI</code> (твёрдый 7-летний опыт)</li><li><code>GitHub Actions</code> (4-летний опыт)</li></ul><h2 id="интересы" tabindex="-1"><a class="header-anchor" href="#интересы"><span>Интересы</span></a></h2><p>Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.</p><p>Помимо программирования я люблю готовить и проводить время со своей любимой семьей!</p><h2 id="контакты" tabindex="-1"><a class="header-anchor" href="#контакты"><span>Контакты</span></a></h2><p>Simplex (Предпочтительно): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="ссылки" tabindex="-1"><a class="header-anchor" href="#ссылки"><span>Ссылки</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Приостановлен)</a></li></ul>',30))])}const y=s(n,[["render",m],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/","title":"Резюме","lang":"ru-RU","frontmatter":{"home":true,"title":"Резюме","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Резюме"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2025-03-12T12:50:22.000Z"}],["meta",{"property":"article:modified_time","content":"2025-03-12T12:50:22.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Резюме\\"}"]]},"headers":[{"level":2,"title":"Общие сведения","slug":"общие-сведения","link":"#общие-сведения","children":[]},{"level":2,"title":"Умения","slug":"умения","link":"#умения","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Интересы","slug":"интересы","link":"#интересы","children":[]},{"level":2,"title":"Контакты","slug":"контакты","link":"#контакты","children":[]},{"level":2,"title":"Ссылки","slug":"ссылки","link":"#ссылки","children":[]}],"git":{"updatedTime":1741783822000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":14}],"changelog":[{"hash":"d657ca6492a1b8094e206836441fc5baa76cc661","date":1741783822000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update bio"},{"hash":"5136f457f1e20e7ca72115f5ff1ddc4862901732","date":1725574311000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"return simplex chat to the contacts"},{"hash":"506521107df025dfffc21a3660e2e7771d4f9e8e","date":1723016198000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update comment"},{"hash":"54e24de6034cb61e2ca074f2a9c8753cba521fd2","date":1722988324000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"rename gitea to forgejo"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"ba2fb4f95d14e5838b01ae27ee4e68dac4dc71f9","date":1721863623000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update resume"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"ddd2ff6d06efd2db9112cb2b99636c2179d929cd","date":1687213302000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change email"},{"hash":"2b427b8ae1f887f104677f57e90cf58c1571057b","date":1679300440000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"add simplex address"},{"hash":"76c1027ab3308026296083278e963b34613d83ee","date":1678887571000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"fix: link to resume for each lang"},{"hash":"e2343b7c909476edc56263546fa94d5a1040f3a4","date":1678886389000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add devops"},{"hash":"95ecb0c8f1d3a9fbcbac0883b0373ea378db2537","date":1678885666000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add stack"},{"hash":"22a7e2743e4ec4ca8ad8918827c443aea7fdb0cc","date":1678884672000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: change overview"},{"hash":"189e09f12c40cb084a03661b3a58acea726fb403","date":1677744320000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move all repositories to my gitea"},{"hash":"4d0b59f2c3c9701ec72fce8bd2e7756c59314516","date":1675383475000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"chore: increment exp"},{"hash":"0ae4bc6e024d705815a68df261dfffd0c370d80c","date":1665734716000,"email":"dmitriy@ideascup.me","author":"janabhumi","message":"page/about: change primary email address"},{"hash":"3c455bd530bab2229ba19d5c1bc663d4f129975c","date":1659608763000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"ui(page/about): add matrix to the contacts"},{"hash":"ddbe5d7ade289ccd2a1313833f0f31b3efab3a13","date":1655800801000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"restructure about page"},{"hash":"c039d82aed4b06a64a3a485d41ee1e24bdbea8f7","date":1655759267000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add overview header"},{"hash":"7107e9985886b60acfa6224af1d85010f162cfaa","date":1655759063000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add solid word to skills"},{"hash":"917fc7c766d7820db25517e580932399eba9faac","date":1655758881000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change about page"},{"hash":"e2cc5b2a2bbef168a7bb7b9621c7f16fca44c56b","date":1655500126000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change page data"},{"hash":"d36bf0798f05bef2cd636b3360f49595810b26c8","date":1655156602000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"fixup: remove ignoring data folder"}]},"filePathRelative":"index.md"}');export{y as comp,f as data};
diff --git a/assets/index.html-Dd-yZNG5.js b/assets/index.html-Dd-yZNG5.js
new file mode 100644
index 0000000..0beade5
--- /dev/null
+++ b/assets/index.html-Dd-yZNG5.js
@@ -0,0 +1 @@
+import{_ as s,c as t,a as r,b as a,d as l,w as o,e as d,r as c,o as n}from"./app-DJYZ00Zc.js";const h={};function p(m,e){const i=c("RouteLink");return n(),t("div",null,[r("p",null,[e[1]||(e[1]=a("Always up-to-date link to ")),l(i,{to:"/eng/"},{default:o(()=>e[0]||(e[0]=[a("resume")])),_:1}),e[2]||(e[2]=a("."))]),e[3]||(e[3]=d('<h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>My name is Dmitriy Pleshevskiy.</p><p>As an open-source development enthusiast, I am always ready to collaborate and participate in exciting projects. I am inspired by the opportunity to contribute to the community and share knowledge. The core technologies I work with include <code>TypeScript</code>, <code>Rust</code>, <code>Python</code>, <code>PostgreSQL</code>, <code>Minio</code>, <code>RabbitMQ</code>, <code>React</code>, <code>VueJS</code>, and <code>Docker</code>. I have a particular passion for functional programming, which enables writing clean and efficient code. As a NixOS evangelist, I not only actively use it in my projects but also promote its adoption among individuals and companies, highlighting its advantages and assisting in its implementation within their infrastructure. My extensive experience in backend and frontend development, as well as in DevOps, allows me to tackle complex challenges effectively. Additionally, I have expertise as an architect, team leader, and mentor.</p><h2 id="skills" tabindex="-1"><a class="header-anchor" href="#skills"><span>Skills</span></a></h2><h4 id="programming-languages" tabindex="-1"><a class="header-anchor" href="#programming-languages"><span>Programming Languages:</span></a></h4><ul><li>TypeScript (prefer, solid 9-year exp)</li><li>SQL (prefer, solid 8-year exp)</li><li>Rust (prefer, solid 5-year exp)</li><li>Python (solid 9-year exp)</li><li>Haskell</li><li>Bash (8-year exp)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="repositories" tabindex="-1"><a class="header-anchor" href="#repositories"><span>Repositories:</span></a></h4><ul><li>PostgreSQL (prefer, solid 8-year exp)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Redis</li><li>Minio (prefer, solid 5-year exp)</li></ul><hr><p>I also have extensive experience in creating the following applications:</p><ul><li>Traditional (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Dynamic (SPA)</li><li>Hybrid (SSR + SPA)</li><li>Console</li><li>Cross-platform</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (prefer, solid 2-year exp)</li><li><code>async-graphql</code> (prefer, solid 2-year exp)</li><li><code>shaku</code> (prefer, solid 2-year exp)</li><li><code>bb8</code> + <code>postgres-types</code> (prefer, solid 5-year exp)</li><li><code>diesel</code> (2-year exp)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (solid 5-year exp)</li><li><code>Express</code> (solid 9-year exp)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (solid 5-year exp)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (solid 8-year exp)</li><li><code>VueJS</code> (prefer, solid 3-year exp)</li><li><code>Cypress</code> (prefer, solid 3-year exp)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (prefer, solid 5-year exp)</li><li><code>Sass</code> (prefer, solid 8-year exp)</li><li><code>Less</code> (weak 4-year exp)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (prefer, solid 3-year exp)</li><li><code>Docker Swarm</code> (solid 6-year exp)</li><li><code>Kubernetes</code> (weak 5-year exp)</li><li><code>Woodpecker CI</code> (prefer, solid 4-year exp)</li><li><code>Drone CI</code> (solid 3-year exp)</li><li><code>Gitlab CI</code> (solid 7-year exp)</li><li><code>GitHub Actions</code> (4-year exp)</li></ul><h2 id="interests" tabindex="-1"><a class="header-anchor" href="#interests"><span>Interests</span></a></h2><p>Open-source projects are my passion! I develop, maintain and improve projects in my spare time.</p><p>Besides programming, I love to cook and spend time with my beloved family!</p><h2 id="contacts" tabindex="-1"><a class="header-anchor" href="#contacts"><span>Contacts</span></a></h2><p>Simplex (Prefer): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="links" tabindex="-1"><a class="header-anchor" href="#links"><span>Links</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Suspended)</a></li></ul>',30))])}const u=s(h,[["render",p],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/eng/","title":"Resume","lang":"en-US","frontmatter":{"home":true,"title":"Resume","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Resume"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2025-03-12T12:50:22.000Z"}],["meta",{"property":"article:modified_time","content":"2025-03-12T12:50:22.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Resume\\"}"]]},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Skills","slug":"skills","link":"#skills","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Interests","slug":"interests","link":"#interests","children":[]},{"level":2,"title":"Contacts","slug":"contacts","link":"#contacts","children":[]},{"level":2,"title":"Links","slug":"links","link":"#links","children":[]}],"git":{"updatedTime":1741783822000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":14}],"changelog":[{"hash":"d657ca6492a1b8094e206836441fc5baa76cc661","date":1741783822000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update bio"},{"hash":"5136f457f1e20e7ca72115f5ff1ddc4862901732","date":1725574311000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"return simplex chat to the contacts"},{"hash":"506521107df025dfffc21a3660e2e7771d4f9e8e","date":1723016198000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update comment"},{"hash":"54e24de6034cb61e2ca074f2a9c8753cba521fd2","date":1722988324000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"rename gitea to forgejo"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"ba2fb4f95d14e5838b01ae27ee4e68dac4dc71f9","date":1721863623000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update resume"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"ddd2ff6d06efd2db9112cb2b99636c2179d929cd","date":1687213302000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change email"},{"hash":"2b427b8ae1f887f104677f57e90cf58c1571057b","date":1679300440000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"add simplex address"},{"hash":"76c1027ab3308026296083278e963b34613d83ee","date":1678887571000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"fix: link to resume for each lang"},{"hash":"e2343b7c909476edc56263546fa94d5a1040f3a4","date":1678886389000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add devops"},{"hash":"95ecb0c8f1d3a9fbcbac0883b0373ea378db2537","date":1678885666000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: add stack"},{"hash":"22a7e2743e4ec4ca8ad8918827c443aea7fdb0cc","date":1678884672000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"about: change overview"},{"hash":"189e09f12c40cb084a03661b3a58acea726fb403","date":1677744320000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move all repositories to my gitea"},{"hash":"4d0b59f2c3c9701ec72fce8bd2e7756c59314516","date":1675383475000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"chore: increment exp"},{"hash":"0ae4bc6e024d705815a68df261dfffd0c370d80c","date":1665734716000,"email":"dmitriy@ideascup.me","author":"janabhumi","message":"page/about: change primary email address"},{"hash":"3c455bd530bab2229ba19d5c1bc663d4f129975c","date":1659608763000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"ui(page/about): add matrix to the contacts"},{"hash":"ddbe5d7ade289ccd2a1313833f0f31b3efab3a13","date":1655800801000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"restructure about page"},{"hash":"c039d82aed4b06a64a3a485d41ee1e24bdbea8f7","date":1655759267000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add overview header"},{"hash":"7107e9985886b60acfa6224af1d85010f162cfaa","date":1655759063000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add solid word to skills"},{"hash":"917fc7c766d7820db25517e580932399eba9faac","date":1655758881000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change about page"},{"hash":"e2cc5b2a2bbef168a7bb7b9621c7f16fca44c56b","date":1655500126000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"change page data"},{"hash":"d36bf0798f05bef2cd636b3360f49595810b26c8","date":1655156602000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"fixup: remove ignoring data folder"}]},"filePathRelative":"eng/index.md"}');export{u as comp,f as data};
diff --git a/assets/works.html-Be9u9wdK.js b/assets/works.html-DG7W-s4f.js
similarity index 99%
rename from assets/works.html-Be9u9wdK.js
rename to assets/works.html-DG7W-s4f.js
index 2b1ca63..cfbf4a6 100644
--- a/assets/works.html-Be9u9wdK.js
+++ b/assets/works.html-DG7W-s4f.js
@@ -1 +1 @@
-import{_ as t,c as a,e as r,o as i}from"./app-Cngbh0tK.js";const o={};function s(n,e){return i(),a("div",null,e[0]||(e[0]=[r('<h2 id="highlighted-working-experience" tabindex="-1"><a class="header-anchor" href="#highlighted-working-experience"><span>Highlighted working experience</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Dates: August 2018 – currently</li><li>Roles: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Development of a Project Management Tool for Interior Designers</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Stack: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Migrated database triggers into business logic. Code became easier to read and maintain, and the system became more reliable.</li><li>Introduced unit testing and integration testing practices. I wrote over 70% of all tests myself.</li><li>Added GraphQL subscriptions for dynamic updates.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Stack: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Formed a UIKit and general components, optimized complex and loaded components.</li><li>Changed API work on the frontend.</li><li>Introduced integration testing practice using Cypress.</li><li>Migrated the entire project to TypeScript. Created isolated system modules.</li></ul><h5 id="leadership-of-the-team" tabindex="-1"><a class="header-anchor" href="#leadership-of-the-team"><span>Leadership of the Team</span></a></h5><ul><li>Introduced TDD (Test-Driven Development) practices.</li><li>Brought the &quot;Critical Chain Method&quot;, the &quot;Buffer Method&quot;, and the &quot;Backward Planning&quot; method into the project. Helped the team get in sync, releasing small batches every week.</li><li>Created individual development plans for team members.</li></ul><h5 id="architecture" tabindex="-1"><a class="header-anchor" href="#architecture"><span>Architecture</span></a></h5><ul><li>Broke down the entire codebase into modules by feature.</li><li>Optimized <code>PostgreSQL</code> database, splitting company data into separate schemas and applying partitioning tables.</li><li>Added query caching with Redis.</li><li>Reduced infrastructure costs by 5 times, migrating the project from Kubernetes to NixOS.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - currently</li><li>Роль: Lead Fullstack Developer</li></ul><p>Development of the Back Office for Core Spirit social platform.</p><ul><li>Integrated <code>Dependabot</code>, which helped update all outdated dependencies. Replaced webpack with <code>vite</code>.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Dates: May 2018 - currently (Passively maintained)</li><li>Role: Tech Lead</li></ul><p>Development web infrastructure of the educational center Master Progress</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">The main site</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Student&#39;s cabinet</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">A tool for rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>A complete infrastructure was created on <code>NixOS</code>. Before that, I had created an infrastructure using <code>Drone CI</code> / <code>Woodpecker CI</code> and <code>Docker swarm</code>, which has been running for over 5 years.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Dates: August 2018 - May 2020, August 2024 - currently</li><li>Role: Lead Fullstack Developer</li></ul><p>Development of Social platform focusing on human and planetary enhancement.</p><ul><li>A REST API (using <code>Node.JS</code>, <code>Express</code>, and <code>PostgreSQL</code>) for the main website and back office. I also got to work with a new version of the REST API using <code>Go</code> and <code>PostgreSQL</code>.</li><li>Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).</li><li>Neural network for automatic categorization of articles.</li></ul><hr><h4 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h4><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>In this company there were 6 considerable projects I have successfully completed:</p><ul><li>optimize the creation of promotional pages (PHP, JavaScript)</li><li>support main traditional site <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)</li><li>work with neural networks for matching of goods</li><li>development face recognition apps for Android (Java)</li></ul><hr><h2 id="chronology" tabindex="-1"><a class="header-anchor" href="#chronology"><span>Chronology</span></a></h2><p>Public projects only.</p>',37)]))}const c=t(o,[["render",s],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/eng/works.html","title":"Works","lang":"en-US","frontmatter":{"title":"Works","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Works"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-08-07T08:48:54.000Z"}],["meta",{"property":"article:modified_time","content":"2024-08-07T08:48:54.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Works\\"}"]]},"headers":[{"level":2,"title":"Highlighted working experience","slug":"highlighted-working-experience","link":"#highlighted-working-experience","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]}]},{"level":2,"title":"Chronology","slug":"chronology","link":"#chronology","children":[]}],"git":{"updatedTime":1723020534000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":6}],"changelog":[{"hash":"2b9101cf1aef46f45c4c3fc0cc318b15954fb18d","date":1723020534000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update works"},{"hash":"98c6e787d16f10afce747b7510ff541e267ef548","date":1723016206000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update dates"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"14c901a8c0fb633b87a383ee7764d1fec6043125","date":1688419364000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: return highlighted content"},{"hash":"a6843b2bf6fb1577a3ddf7805f8f7bb24f92cdbd","date":1678884129000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move masterprogress above"},{"hash":"b3f2e41c7ddcef79633401bbb2a6b49a0f8d8629","date":1656882923000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add work page content"}]},"filePathRelative":"eng/works.md"}');export{c as comp,d as data};
+import{_ as t,c as a,e as r,o as i}from"./app-DJYZ00Zc.js";const o={};function s(n,e){return i(),a("div",null,e[0]||(e[0]=[r('<h2 id="highlighted-working-experience" tabindex="-1"><a class="header-anchor" href="#highlighted-working-experience"><span>Highlighted working experience</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Dates: August 2018 – currently</li><li>Roles: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Development of a Project Management Tool for Interior Designers</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Stack: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Migrated database triggers into business logic. Code became easier to read and maintain, and the system became more reliable.</li><li>Introduced unit testing and integration testing practices. I wrote over 70% of all tests myself.</li><li>Added GraphQL subscriptions for dynamic updates.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Stack: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Formed a UIKit and general components, optimized complex and loaded components.</li><li>Changed API work on the frontend.</li><li>Introduced integration testing practice using Cypress.</li><li>Migrated the entire project to TypeScript. Created isolated system modules.</li></ul><h5 id="leadership-of-the-team" tabindex="-1"><a class="header-anchor" href="#leadership-of-the-team"><span>Leadership of the Team</span></a></h5><ul><li>Introduced TDD (Test-Driven Development) practices.</li><li>Brought the &quot;Critical Chain Method&quot;, the &quot;Buffer Method&quot;, and the &quot;Backward Planning&quot; method into the project. Helped the team get in sync, releasing small batches every week.</li><li>Created individual development plans for team members.</li></ul><h5 id="architecture" tabindex="-1"><a class="header-anchor" href="#architecture"><span>Architecture</span></a></h5><ul><li>Broke down the entire codebase into modules by feature.</li><li>Optimized <code>PostgreSQL</code> database, splitting company data into separate schemas and applying partitioning tables.</li><li>Added query caching with Redis.</li><li>Reduced infrastructure costs by 5 times, migrating the project from Kubernetes to NixOS.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - currently</li><li>Роль: Lead Fullstack Developer</li></ul><p>Development of the Back Office for Core Spirit social platform.</p><ul><li>Integrated <code>Dependabot</code>, which helped update all outdated dependencies. Replaced webpack with <code>vite</code>.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Dates: May 2018 - currently (Passively maintained)</li><li>Role: Tech Lead</li></ul><p>Development web infrastructure of the educational center Master Progress</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">The main site</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Student&#39;s cabinet</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">A tool for rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>A complete infrastructure was created on <code>NixOS</code>. Before that, I had created an infrastructure using <code>Drone CI</code> / <code>Woodpecker CI</code> and <code>Docker swarm</code>, which has been running for over 5 years.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Dates: August 2018 - May 2020, August 2024 - currently</li><li>Role: Lead Fullstack Developer</li></ul><p>Development of Social platform focusing on human and planetary enhancement.</p><ul><li>A REST API (using <code>Node.JS</code>, <code>Express</code>, and <code>PostgreSQL</code>) for the main website and back office. I also got to work with a new version of the REST API using <code>Go</code> and <code>PostgreSQL</code>.</li><li>Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).</li><li>Neural network for automatic categorization of articles.</li></ul><hr><h4 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h4><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>In this company there were 6 considerable projects I have successfully completed:</p><ul><li>optimize the creation of promotional pages (PHP, JavaScript)</li><li>support main traditional site <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)</li><li>work with neural networks for matching of goods</li><li>development face recognition apps for Android (Java)</li></ul><hr><h2 id="chronology" tabindex="-1"><a class="header-anchor" href="#chronology"><span>Chronology</span></a></h2><p>Public projects only.</p>',37)]))}const c=t(o,[["render",s],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/eng/works.html","title":"Works","lang":"en-US","frontmatter":{"title":"Works","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Works"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-08-07T08:48:54.000Z"}],["meta",{"property":"article:modified_time","content":"2024-08-07T08:48:54.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Works\\"}"]]},"headers":[{"level":2,"title":"Highlighted working experience","slug":"highlighted-working-experience","link":"#highlighted-working-experience","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]}]},{"level":2,"title":"Chronology","slug":"chronology","link":"#chronology","children":[]}],"git":{"updatedTime":1723020534000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":6}],"changelog":[{"hash":"2b9101cf1aef46f45c4c3fc0cc318b15954fb18d","date":1723020534000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update works"},{"hash":"98c6e787d16f10afce747b7510ff541e267ef548","date":1723016206000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update dates"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"14c901a8c0fb633b87a383ee7764d1fec6043125","date":1688419364000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: return highlighted content"},{"hash":"a6843b2bf6fb1577a3ddf7805f8f7bb24f92cdbd","date":1678884129000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move masterprogress above"},{"hash":"b3f2e41c7ddcef79633401bbb2a6b49a0f8d8629","date":1656882923000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add work page content"}]},"filePathRelative":"eng/works.md"}');export{c as comp,d as data};
diff --git a/assets/works.html-UxQSy3c_.js b/assets/works.html-DY9jTouw.js
similarity index 99%
rename from assets/works.html-UxQSy3c_.js
rename to assets/works.html-DY9jTouw.js
index 09cd010..f712700 100644
--- a/assets/works.html-UxQSy3c_.js
+++ b/assets/works.html-DY9jTouw.js
@@ -1 +1 @@
-import{_ as i,c as a,e as r,o as t}from"./app-Cngbh0tK.js";const l={};function s(o,e){return t(),a("div",null,e[0]||(e[0]=[r('<h2 id="выделенныи-опыт-работы" tabindex="-1"><a class="header-anchor" href="#выделенныи-опыт-работы"><span>Выделенный опыт работы</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Даты: Август 2018 – по настоящее время</li><li>Роли: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Разработка инструмента управления проектами для дизайнеров интерьера.</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Стек: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Перенес триггеры базы данных в бизнес-логику. Проще стало читать код, вносить изменение и система стала надежнее.</li><li>Ввёл практику написания unit тестов и интеграционных тестов. Самолично написал более 70% всех тестов.</li><li>Добавил GraphQL подписки для динамичного обновления.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Стек: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Сформировал UIKit и общие компоненты, оптимизировал сложные и нагруженные компоненты.</li><li>Изменил работу с API на фронтенде.</li><li>Внедрил практику написания интеграционных тестов с помощью cypress.</li><li>Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.</li></ul><h5 id="руководство-командои" tabindex="-1"><a class="header-anchor" href="#руководство-командои"><span>Руководство командой</span></a></h5><ul><li>Ввёл практику TDD (Test-Driven Development).</li><li>Я привнес в проект &quot;метод критической цепи&quot;, &quot;метод буфера&quot; и &quot;метод планирования с конца&quot;. Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями.</li><li>Составлял индивидуальный план развития для членов команды.</li></ul><h5 id="архитектура" tabindex="-1"><a class="header-anchor" href="#архитектура"><span>Архитектура</span></a></h5><ul><li>Разбил всю кодовую базу на модули по фичам.</li><li>Ускорил базу данных <code>PostgreSQL</code>, разбив данные компаний по отдельным схемам и применив партиципирование таблиц.</li><li>Добавил кеширование запросов с <code>Redis</code>.</li><li>Уменьшил затраты на инфраструткуру в 5 раз, перенес весь проект с kubernetes на <code>NixOS</code>.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка бэк-офиса для социальной платформы Core Spirit.</p><ul><li>Интегрировал Dependabot, который помог обновить все устаревшие зависимости. Заменил webpack на vite.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Даты: Май 2018 - по настоящее время (Пассивная поддержка)</li><li>Роль: Tech Lead</li></ul><p>Разработка веб-инфраструктуры образовательного центра Мастер Прогресс.</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">Главного сайта</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Кабинета студента</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">Инструмента для работы с rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>Создана полная инфраструктура на <code>NixOS</code>. До этого создал инфраструктуру используя <code>Drone CI</code> / <code>Woodpecker CI</code> и <code>Docker swarm</code>, которая проработала более 5 лет.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Даты: Август 2018 - May 2020, Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка социальной платформы, сфокусированной на улучшении человека и планеты.</p><ul><li>REST API (<code>Node.JS</code>, <code>Express</code>, <code>PostgreSQL</code>) для основного сайта и бэк-офиса. Успел поработать с новой версией REST API на <code>Go</code>, <code>PostgreSQL</code></li><li>Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).</li><li>Создал нейронную сеть для автоматической категоризации статей.</li></ul><hr><h3 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h3><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>В этой компании было 6 значительных проектов, которые я успешно завершил:</p><ul><li>Оптимизация создания рекламных страниц (PHP, JavaScript)</li><li>Поддержка основного традиционного сайта <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)</li><li>Работа с нейронными сетями для подбора товаров</li><li>Разработка приложений для распознавания лиц для Android (Java)</li></ul><hr><h2 id="хронология" tabindex="-1"><a class="header-anchor" href="#хронология"><span>Хронология</span></a></h2><p>В списке перечислены только публичные проекты.</p>',37)]))}const d=i(l,[["render",s],["__file","works.html.vue"]]),n=JSON.parse('{"path":"/works.html","title":"Работы","lang":"ru-RU","frontmatter":{"title":"Работы","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Работы"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-10-15T14:10:49.000Z"}],["meta",{"property":"article:modified_time","content":"2024-10-15T14:10:49.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Работы\\"}"]]},"headers":[{"level":2,"title":"Выделенный опыт работы","slug":"выделенныи-опыт-работы","link":"#выделенныи-опыт-работы","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]},{"level":3,"title":"MERLION","slug":"merlion","link":"#merlion","children":[]}]},{"level":2,"title":"Хронология","slug":"хронология","link":"#хронология","children":[]}],"git":{"updatedTime":1729001449000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":8}],"changelog":[{"hash":"cda6a85b70639418db2fe08a106ec89a104c8ece","date":1729001449000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"fix typo"},{"hash":"2b9101cf1aef46f45c4c3fc0cc318b15954fb18d","date":1723020534000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update works"},{"hash":"98c6e787d16f10afce747b7510ff541e267ef548","date":1723016206000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update dates"},{"hash":"f75ed3d2f6d602399e472e3ced7dc62e0e01e5e9","date":1721915974000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"add pre-commit hook"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"14c901a8c0fb633b87a383ee7764d1fec6043125","date":1688419364000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: return highlighted content"},{"hash":"a6843b2bf6fb1577a3ddf7805f8f7bb24f92cdbd","date":1678884129000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move masterprogress above"},{"hash":"b3f2e41c7ddcef79633401bbb2a6b49a0f8d8629","date":1656882923000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add work page content"}]},"filePathRelative":"works.md"}');export{d as comp,n as data};
+import{_ as i,c as a,e as r,o as t}from"./app-DJYZ00Zc.js";const l={};function s(o,e){return t(),a("div",null,e[0]||(e[0]=[r('<h2 id="выделенныи-опыт-работы" tabindex="-1"><a class="header-anchor" href="#выделенныи-опыт-работы"><span>Выделенный опыт работы</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Даты: Август 2018 – по настоящее время</li><li>Роли: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Разработка инструмента управления проектами для дизайнеров интерьера.</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Стек: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Перенес триггеры базы данных в бизнес-логику. Проще стало читать код, вносить изменение и система стала надежнее.</li><li>Ввёл практику написания unit тестов и интеграционных тестов. Самолично написал более 70% всех тестов.</li><li>Добавил GraphQL подписки для динамичного обновления.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Стек: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Сформировал UIKit и общие компоненты, оптимизировал сложные и нагруженные компоненты.</li><li>Изменил работу с API на фронтенде.</li><li>Внедрил практику написания интеграционных тестов с помощью cypress.</li><li>Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.</li></ul><h5 id="руководство-командои" tabindex="-1"><a class="header-anchor" href="#руководство-командои"><span>Руководство командой</span></a></h5><ul><li>Ввёл практику TDD (Test-Driven Development).</li><li>Я привнес в проект &quot;метод критической цепи&quot;, &quot;метод буфера&quot; и &quot;метод планирования с конца&quot;. Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями.</li><li>Составлял индивидуальный план развития для членов команды.</li></ul><h5 id="архитектура" tabindex="-1"><a class="header-anchor" href="#архитектура"><span>Архитектура</span></a></h5><ul><li>Разбил всю кодовую базу на модули по фичам.</li><li>Ускорил базу данных <code>PostgreSQL</code>, разбив данные компаний по отдельным схемам и применив партиципирование таблиц.</li><li>Добавил кеширование запросов с <code>Redis</code>.</li><li>Уменьшил затраты на инфраструткуру в 5 раз, перенес весь проект с kubernetes на <code>NixOS</code>.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка бэк-офиса для социальной платформы Core Spirit.</p><ul><li>Интегрировал Dependabot, который помог обновить все устаревшие зависимости. Заменил webpack на vite.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Даты: Май 2018 - по настоящее время (Пассивная поддержка)</li><li>Роль: Tech Lead</li></ul><p>Разработка веб-инфраструктуры образовательного центра Мастер Прогресс.</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">Главного сайта</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Кабинета студента</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">Инструмента для работы с rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>Создана полная инфраструктура на <code>NixOS</code>. До этого создал инфраструктуру используя <code>Drone CI</code> / <code>Woodpecker CI</code> и <code>Docker swarm</code>, которая проработала более 5 лет.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Даты: Август 2018 - May 2020, Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка социальной платформы, сфокусированной на улучшении человека и планеты.</p><ul><li>REST API (<code>Node.JS</code>, <code>Express</code>, <code>PostgreSQL</code>) для основного сайта и бэк-офиса. Успел поработать с новой версией REST API на <code>Go</code>, <code>PostgreSQL</code></li><li>Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).</li><li>Создал нейронную сеть для автоматической категоризации статей.</li></ul><hr><h3 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h3><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>В этой компании было 6 значительных проектов, которые я успешно завершил:</p><ul><li>Оптимизация создания рекламных страниц (PHP, JavaScript)</li><li>Поддержка основного традиционного сайта <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)</li><li>Работа с нейронными сетями для подбора товаров</li><li>Разработка приложений для распознавания лиц для Android (Java)</li></ul><hr><h2 id="хронология" tabindex="-1"><a class="header-anchor" href="#хронология"><span>Хронология</span></a></h2><p>В списке перечислены только публичные проекты.</p>',37)]))}const d=i(l,[["render",s],["__file","works.html.vue"]]),n=JSON.parse('{"path":"/works.html","title":"Работы","lang":"ru-RU","frontmatter":{"title":"Работы","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Работы"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-10-15T14:10:49.000Z"}],["meta",{"property":"article:modified_time","content":"2024-10-15T14:10:49.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Работы\\"}"]]},"headers":[{"level":2,"title":"Выделенный опыт работы","slug":"выделенныи-опыт-работы","link":"#выделенныи-опыт-работы","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]},{"level":3,"title":"MERLION","slug":"merlion","link":"#merlion","children":[]}]},{"level":2,"title":"Хронология","slug":"хронология","link":"#хронология","children":[]}],"git":{"updatedTime":1729001449000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":8}],"changelog":[{"hash":"cda6a85b70639418db2fe08a106ec89a104c8ece","date":1729001449000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"fix typo"},{"hash":"2b9101cf1aef46f45c4c3fc0cc318b15954fb18d","date":1723020534000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update works"},{"hash":"98c6e787d16f10afce747b7510ff541e267ef548","date":1723016206000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"update dates"},{"hash":"f75ed3d2f6d602399e472e3ced7dc62e0e01e5e9","date":1721915974000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"add pre-commit hook"},{"hash":"7a393c6c2de9edfef0f1dafce18b0aa500f01c38","date":1721909529000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"change some information"},{"hash":"753116020a0fcedfd9b1f7823b313b61fab28b61","date":1721830505000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"refac: use vuepress"},{"hash":"14c901a8c0fb633b87a383ee7764d1fec6043125","date":1688419364000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: return highlighted content"},{"hash":"a6843b2bf6fb1577a3ddf7805f8f7bb24f92cdbd","date":1678884129000,"email":"dmitriy@pleshevski.ru","author":"Dmitriy Pleshevskiy","message":"works: move masterprogress above"},{"hash":"b3f2e41c7ddcef79633401bbb2a6b49a0f8d8629","date":1656882923000,"email":"dmitriy@ideascup.me","author":"Dmitriy Pleshevskiy","message":"add work page content"}]},"filePathRelative":"works.md"}');export{d as comp,n as data};
diff --git a/eng/index.html b/eng/index.html
index 163c454..a551128 100644
--- a/eng/index.html
+++ b/eng/index.html
@@ -31,13 +31,13 @@
         document.documentElement.dataset.theme = 'dark'
       }
     </script>
-    <link rel="alternate" hreflang="ru-ru" href="https://pleshevski.ru/"><meta property="og:url" content="https://pleshevski.ru/eng/"><meta property="og:site_name" content="Dmitriy Pleshevskiy"><meta property="og:title" content="Resume"><meta property="og:type" content="website"><meta property="og:locale" content="en-US"><meta property="og:locale:alternate" content="ru-RU"><meta property="og:updated_time" content="2024-09-05T22:11:51.000Z"><meta property="article:modified_time" content="2024-09-05T22:11:51.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Resume"}</script><title>Resume | Dmitriy Pleshevskiy</title><meta name="description" content=" ">
+    <link rel="alternate" hreflang="ru-ru" href="https://pleshevski.ru/"><meta property="og:url" content="https://pleshevski.ru/eng/"><meta property="og:site_name" content="Dmitriy Pleshevskiy"><meta property="og:title" content="Resume"><meta property="og:type" content="website"><meta property="og:locale" content="en-US"><meta property="og:locale:alternate" content="ru-RU"><meta property="og:updated_time" content="2025-03-12T12:50:22.000Z"><meta property="article:modified_time" content="2025-03-12T12:50:22.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Resume"}</script><title>Resume | Dmitriy Pleshevskiy</title><meta name="description" content=" ">
     <link rel="preload" href="/assets/style-BTqgNJf6.css" as="style"><link rel="stylesheet" href="/assets/style-BTqgNJf6.css">
-    <link rel="modulepreload" href="/assets/app-Cngbh0tK.js"><link rel="modulepreload" href="/assets/index.html-B8MvPzPB.js">
-    <link rel="prefetch" href="/assets/index.html-BvT0yAcG.js" as="script"><link rel="prefetch" href="/assets/works.html-UxQSy3c_.js" as="script"><link rel="prefetch" href="/assets/works.html-Be9u9wdK.js" as="script"><link rel="prefetch" href="/assets/404.html-BJKGAZg4.js" as="script">
+    <link rel="modulepreload" href="/assets/app-DJYZ00Zc.js"><link rel="modulepreload" href="/assets/index.html-Dd-yZNG5.js">
+    <link rel="prefetch" href="/assets/index.html-CQ1iAHbC.js" as="script"><link rel="prefetch" href="/assets/works.html-DY9jTouw.js" as="script"><link rel="prefetch" href="/assets/works.html-DG7W-s4f.js" as="script"><link rel="prefetch" href="/assets/404.html-Bw-82Xq4.js" as="script">
   </head>
   <body>
-    <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/eng/"><!----><span class="vp-site-name" aria-hidden="true">Dmitriy Pleshevskiy</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-home"><header class="vp-hero"><!----><!----><p class="vp-hero-description"> </p><!----></header><!----><div vp-content><div><p>Always up-to-date link to <a class="route-link" href="/eng/">resume</a>.</p><h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>My name is Dmitriy Pleshevskiy.</p><p>I&#39;m an open source software enthusiast, a lead software developer, architect, team leader and also mentor.</p><h2 id="skills" tabindex="-1"><a class="header-anchor" href="#skills"><span>Skills</span></a></h2><h4 id="programming-languages" tabindex="-1"><a class="header-anchor" href="#programming-languages"><span>Programming Languages:</span></a></h4><ul><li>TypeScript (prefer, solid 9-year exp)</li><li>SQL (prefer, solid 8-year exp)</li><li>Rust (prefer, solid 5-year exp)</li><li>Python (solid 9-year exp)</li><li>Haskell</li><li>Bash (8-year exp)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="repositories" tabindex="-1"><a class="header-anchor" href="#repositories"><span>Repositories:</span></a></h4><ul><li>PostgreSQL (prefer, solid 8-year exp)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (prefer, solid 5-year exp)</li></ul><hr><p>I also have extensive experience in creating the following applications:</p><ul><li>Traditional (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Dynamic (SPA)</li><li>Hybrid (SSR + SPA)</li><li>Console</li><li>Cross-platform</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (prefer, solid 2-year exp)</li><li><code>async-graphql</code> (prefer, solid 2-year exp)</li><li><code>shaku</code> (prefer, solid 2-year exp)</li><li><code>bb8</code> + <code>postgres-types</code> (prefer, solid 5-year exp)</li><li><code>diesel</code> (2-year exp)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (solid 5-year exp)</li><li><code>Express</code> (solid 9-year exp)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (solid 5-year exp)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (solid 8-year exp)</li><li><code>VueJS</code> (prefer, solid 3-year exp)</li><li><code>Cypress</code> (prefer, solid 3-year exp)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (prefer, solid 5-year exp)</li><li><code>Sass</code> (prefer, solid 8-year exp)</li><li><code>Less</code> (weak 4-year exp)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (prefer, solid 3-year exp)</li><li><code>Docker Swarm</code> (solid 6-year exp)</li><li><code>Kubernetes</code> (weak 5-year exp)</li><li><code>Woodpecker CI</code> (prefer, solid 4-year exp)</li><li><code>Drone CI</code> (solid 3-year exp)</li><li><code>Gitlab CI</code> (solid 7-year exp)</li><li><code>GitHub Actions</code> (4-year exp)</li></ul><h2 id="interests" tabindex="-1"><a class="header-anchor" href="#interests"><span>Interests</span></a></h2><p>Open-source projects are my passion! I develop, maintain and improve projects in my spare time.</p><p>Besides programming, I love to cook and spend time with my beloved family!</p><h2 id="contacts" tabindex="-1"><a class="header-anchor" href="#contacts"><span>Contacts</span></a></h2><p>Simplex (Prefer): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="links" tabindex="-1"><a class="header-anchor" href="#links"><span>Links</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Suspended)</a></li></ul></div></div><!----></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
-    <script type="module" src="/assets/app-Cngbh0tK.js" defer></script>
+    <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/eng/"><!----><span class="vp-site-name" aria-hidden="true">Dmitriy Pleshevskiy</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-home"><header class="vp-hero"><!----><!----><p class="vp-hero-description"> </p><!----></header><!----><div vp-content><div><p>Always up-to-date link to <a class="route-link" href="/eng/">resume</a>.</p><h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>My name is Dmitriy Pleshevskiy.</p><p>As an open-source development enthusiast, I am always ready to collaborate and participate in exciting projects. I am inspired by the opportunity to contribute to the community and share knowledge. The core technologies I work with include <code>TypeScript</code>, <code>Rust</code>, <code>Python</code>, <code>PostgreSQL</code>, <code>Minio</code>, <code>RabbitMQ</code>, <code>React</code>, <code>VueJS</code>, and <code>Docker</code>. I have a particular passion for functional programming, which enables writing clean and efficient code. As a NixOS evangelist, I not only actively use it in my projects but also promote its adoption among individuals and companies, highlighting its advantages and assisting in its implementation within their infrastructure. My extensive experience in backend and frontend development, as well as in DevOps, allows me to tackle complex challenges effectively. Additionally, I have expertise as an architect, team leader, and mentor.</p><h2 id="skills" tabindex="-1"><a class="header-anchor" href="#skills"><span>Skills</span></a></h2><h4 id="programming-languages" tabindex="-1"><a class="header-anchor" href="#programming-languages"><span>Programming Languages:</span></a></h4><ul><li>TypeScript (prefer, solid 9-year exp)</li><li>SQL (prefer, solid 8-year exp)</li><li>Rust (prefer, solid 5-year exp)</li><li>Python (solid 9-year exp)</li><li>Haskell</li><li>Bash (8-year exp)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="repositories" tabindex="-1"><a class="header-anchor" href="#repositories"><span>Repositories:</span></a></h4><ul><li>PostgreSQL (prefer, solid 8-year exp)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Redis</li><li>Minio (prefer, solid 5-year exp)</li></ul><hr><p>I also have extensive experience in creating the following applications:</p><ul><li>Traditional (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Dynamic (SPA)</li><li>Hybrid (SSR + SPA)</li><li>Console</li><li>Cross-platform</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (prefer, solid 2-year exp)</li><li><code>async-graphql</code> (prefer, solid 2-year exp)</li><li><code>shaku</code> (prefer, solid 2-year exp)</li><li><code>bb8</code> + <code>postgres-types</code> (prefer, solid 5-year exp)</li><li><code>diesel</code> (2-year exp)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (solid 5-year exp)</li><li><code>Express</code> (solid 9-year exp)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (solid 5-year exp)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (solid 8-year exp)</li><li><code>VueJS</code> (prefer, solid 3-year exp)</li><li><code>Cypress</code> (prefer, solid 3-year exp)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (prefer, solid 5-year exp)</li><li><code>Sass</code> (prefer, solid 8-year exp)</li><li><code>Less</code> (weak 4-year exp)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (prefer, solid 3-year exp)</li><li><code>Docker Swarm</code> (solid 6-year exp)</li><li><code>Kubernetes</code> (weak 5-year exp)</li><li><code>Woodpecker CI</code> (prefer, solid 4-year exp)</li><li><code>Drone CI</code> (solid 3-year exp)</li><li><code>Gitlab CI</code> (solid 7-year exp)</li><li><code>GitHub Actions</code> (4-year exp)</li></ul><h2 id="interests" tabindex="-1"><a class="header-anchor" href="#interests"><span>Interests</span></a></h2><p>Open-source projects are my passion! I develop, maintain and improve projects in my spare time.</p><p>Besides programming, I love to cook and spend time with my beloved family!</p><h2 id="contacts" tabindex="-1"><a class="header-anchor" href="#contacts"><span>Contacts</span></a></h2><p>Simplex (Prefer): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="links" tabindex="-1"><a class="header-anchor" href="#links"><span>Links</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Suspended)</a></li></ul></div></div><!----></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
+    <script type="module" src="/assets/app-DJYZ00Zc.js" defer></script>
   </body>
 </html>
diff --git a/eng/works.html b/eng/works.html
index 6b4e586..29afd4f 100644
--- a/eng/works.html
+++ b/eng/works.html
@@ -33,11 +33,11 @@
     </script>
     <link rel="alternate" hreflang="ru-ru" href="https://pleshevski.ru/works.html"><meta property="og:url" content="https://pleshevski.ru/eng/works.html"><meta property="og:site_name" content="Dmitriy Pleshevskiy"><meta property="og:title" content="Works"><meta property="og:type" content="website"><meta property="og:locale" content="en-US"><meta property="og:locale:alternate" content="ru-RU"><meta property="og:updated_time" content="2024-08-07T08:48:54.000Z"><meta property="article:modified_time" content="2024-08-07T08:48:54.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Works"}</script><title>Works | Dmitriy Pleshevskiy</title><meta name="description" content=" ">
     <link rel="preload" href="/assets/style-BTqgNJf6.css" as="style"><link rel="stylesheet" href="/assets/style-BTqgNJf6.css">
-    <link rel="modulepreload" href="/assets/app-Cngbh0tK.js"><link rel="modulepreload" href="/assets/works.html-Be9u9wdK.js">
-    <link rel="prefetch" href="/assets/index.html-BvT0yAcG.js" as="script"><link rel="prefetch" href="/assets/works.html-UxQSy3c_.js" as="script"><link rel="prefetch" href="/assets/index.html-B8MvPzPB.js" as="script"><link rel="prefetch" href="/assets/404.html-BJKGAZg4.js" as="script">
+    <link rel="modulepreload" href="/assets/app-DJYZ00Zc.js"><link rel="modulepreload" href="/assets/works.html-DG7W-s4f.js">
+    <link rel="prefetch" href="/assets/index.html-CQ1iAHbC.js" as="script"><link rel="prefetch" href="/assets/works.html-DY9jTouw.js" as="script"><link rel="prefetch" href="/assets/index.html-Dd-yZNG5.js" as="script"><link rel="prefetch" href="/assets/404.html-Bw-82Xq4.js" as="script">
   </head>
   <body>
     <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container data-v-765855fb><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/eng/"><!----><span class="vp-site-name" aria-hidden="true">Dmitriy Pleshevskiy</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div vp-content><!--[--><!--]--><div><h2 id="highlighted-working-experience" tabindex="-1"><a class="header-anchor" href="#highlighted-working-experience"><span>Highlighted working experience</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Dates: August 2018 – currently</li><li>Roles: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Development of a Project Management Tool for Interior Designers</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Stack: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Migrated database triggers into business logic. Code became easier to read and maintain, and the system became more reliable.</li><li>Introduced unit testing and integration testing practices. I wrote over 70% of all tests myself.</li><li>Added GraphQL subscriptions for dynamic updates.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Stack: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Formed a UIKit and general components, optimized complex and loaded components.</li><li>Changed API work on the frontend.</li><li>Introduced integration testing practice using Cypress.</li><li>Migrated the entire project to TypeScript. Created isolated system modules.</li></ul><h5 id="leadership-of-the-team" tabindex="-1"><a class="header-anchor" href="#leadership-of-the-team"><span>Leadership of the Team</span></a></h5><ul><li>Introduced TDD (Test-Driven Development) practices.</li><li>Brought the &quot;Critical Chain Method&quot;, the &quot;Buffer Method&quot;, and the &quot;Backward Planning&quot; method into the project. Helped the team get in sync, releasing small batches every week.</li><li>Created individual development plans for team members.</li></ul><h5 id="architecture" tabindex="-1"><a class="header-anchor" href="#architecture"><span>Architecture</span></a></h5><ul><li>Broke down the entire codebase into modules by feature.</li><li>Optimized <code>PostgreSQL</code> database, splitting company data into separate schemas and applying partitioning tables.</li><li>Added query caching with Redis.</li><li>Reduced infrastructure costs by 5 times, migrating the project from Kubernetes to NixOS.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - currently</li><li>Роль: Lead Fullstack Developer</li></ul><p>Development of the Back Office for Core Spirit social platform.</p><ul><li>Integrated <code>Dependabot</code>, which helped update all outdated dependencies. Replaced webpack with <code>vite</code>.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Dates: May 2018 - currently (Passively maintained)</li><li>Role: Tech Lead</li></ul><p>Development web infrastructure of the educational center Master Progress</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">The main site</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Student&#39;s cabinet</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">A tool for rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>A complete infrastructure was created on <code>NixOS</code>. Before that, I had created an infrastructure using <code>Drone CI</code> / <code>Woodpecker CI</code> and <code>Docker swarm</code>, which has been running for over 5 years.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Dates: August 2018 - May 2020, August 2024 - currently</li><li>Role: Lead Fullstack Developer</li></ul><p>Development of Social platform focusing on human and planetary enhancement.</p><ul><li>A REST API (using <code>Node.JS</code>, <code>Express</code>, and <code>PostgreSQL</code>) for the main website and back office. I also got to work with a new version of the REST API using <code>Go</code> and <code>PostgreSQL</code>.</li><li>Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).</li><li>Neural network for automatic categorization of articles.</li></ul><hr><h4 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h4><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>In this company there were 6 considerable projects I have successfully completed:</p><ul><li>optimize the creation of promotional pages (PHP, JavaScript)</li><li>support main traditional site <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)</li><li>work with neural networks for matching of goods</li><li>development face recognition apps for Android (Java)</li></ul><hr><h2 id="chronology" tabindex="-1"><a class="header-anchor" href="#chronology"><span>Chronology</span></a></h2><p>Public projects only.</p></div><!--[--><!--]--></div><footer class="vp-page-meta"><!----><div class="vp-meta-item git-info"><div class="vp-meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="vp-meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: dmitriy@ideascup.me">Dmitriy Pleshevskiy</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: dmitriy@pleshevski.ru">Dmitriy Pleshevskiy</span><!----><!--]--><!--]--></span></div></div></footer><!----><!--[--><!--[--><div class="works-table-wrapper" data-v-765855fb><table data-v-765855fb><thead><tr><th>Name</th><th>Description</th><th>Role</th><th>Technologies</th><th>Status</th><th>Dates</th></tr></thead><tbody><!--[--><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/nixeovim">nixeovim</a></td><td>Configure and build neovim editor using nix</td><td>author</td><td>Nix</td><td>actively-developed</td><td><div><small class="">04/24/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/mindustry-tools">Mindustry tools</a></td><td>Tools for the Mindustry game</td><td>author</td><td>Nix, Godot</td><td>passively-maintained</td><td><div><small class="">01/07/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://rosmintrud.masterprogress.ru">Master Progress Rosmintrud tools</a></td><td>Internal service to prepare documents for the rosmintrud (SPA)</td><td>tech&nbsp;lead</td><td>Deno, Sqlite, TS, Vue, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">07/03/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-plpgsql">tree-sitter-plpgsql</a></td><td>plpgsql grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>passively-maintained</td><td><div><small class="">01/05/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-d2">tree-sitter-d2</a></td><td>d2 grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>actively-developed</td><td><div><small class="">12/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/mynix/nix2lua">nix2lua</a></td><td>This is a small but functional library that converts your nix configurations into lua format.</td><td>author</td><td>Nix, Lua</td><td>passively-maintained</td><td><div><small class="">11/22/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/vnetod">vnetod</a></td><td>Dotenv section switcher</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/29/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/recipes">recipes</a></td><td>Site with recipes which cares about privacy</td><td>author</td><td>TS, Deno, Rust</td><td>passively-maintained</td><td><div><small class="">05/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru">pleshevski.ru</a></td><td>Source code of my personal site</td><td>author</td><td>TS, Vue, Vuepress, Nix</td><td>passively-maintained</td><td><div><small class="">03/16/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/espruino-starter">espruino-starter</a></td><td>Quickly start creating your new project on the espruino board or a board based on it.</td><td>author</td><td>JS</td><td>as-is</td><td><div><small class="">08/23/2021</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/sonic-channel">sonic-channel</a></td><td>Rust client for sonic search backend.</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/18/2020</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/it-fsm">it-fsm</a></td><td>Simple full-featured finite state machine for your project</td><td>author</td><td>TS, NodeJS, Deno</td><td>passively-maintained</td><td><div><small class="">10/11/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://cabinet.masterprogress.ru">Cabinet Master Progress</a></td><td>Student&#39;s cabinet of the educational center Master Progress (SSR + SPA)</td><td>tech&nbsp;lead</td><td>Python, Flask, PostgreSQL, TS, React, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">09/22/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/genrss">genrss</a></td><td>RSS generator for python</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="">07/23/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://www.binarymanagement.com">Binary Management</a></td><td>Project management tool for interior designers</td><td>developer, tech&nbsp;lead, team&nbsp;lead</td><td>TS, NodeJS, React, Antd, Docker, Drone CI, Rust, Nix</td><td>actively-developed</td><td><div><small class="">09/15/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://masterprogress.ru">Master Progress</a></td><td>Main website of the educational center Master Progress (SSR + Forms)</td><td>tech&nbsp;lead</td><td>Python, Flask, JS, Nix</td><td>passively-maintained</td><td><div><small class="">04/10/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/picsg">picsg</a></td><td>A tool for steganographing information in a picture encoded using the Vernam cipher.</td><td>author</td><td>Haskell</td><td>as-is</td><td><div><small class="grey">04/13/2024</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/yandexgpt_tg_bot">yandexgpt_tg_bot</a></td><td>The Telegram bot to describe article with link by YandexGPT.</td><td>author</td><td>JS, NodeJS, Nix</td><td>as-is</td><td><div><small class="grey">06/27/2023</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/estring">estring</a></td><td>A simple way to parse a string using type annotations.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/23/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/enve">enve</a></td><td>It helps you work with environment variables and convert it to any type using only type annotations</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/18/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/docker_stack">docker stack drone plugin</a></td><td>Deploy to production using `docker stack deploy`</td><td>author</td><td>Docker, Drone CI, Woodpecker CI</td><td>as-is</td><td><div><small class="grey">06/06/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/paren">paren</a></td><td>Library for parsing and rendering information.</td><td>author</td><td>TS, Deno</td><td>experimental</td><td><div><small class="grey">03/14/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/hwt">hwt</a></td><td>healthy workaholic timer – A tool that keeps you from breaking your health by working all day.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">02/04/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/wd2">wd2</a></td><td>A wrapper over d2 which allows to use additional configs from d2 file</td><td>author</td><td>Bash, Nix</td><td>as-is</td><td><div><small class="grey">12/12/2022</small></div><div><small>07/31/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/react-rest-request">react-rest-request</a></td><td>Minimalistic REST API client for React inspired by Apollo.</td><td>author</td><td>TS, React</td><td>deprecated</td><td><div><small class="grey">10/04/2020</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/marshmallow_pageinfo">marshmallow_pageinfo</a></td><td>Page info marshmallow schema for api</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">10/05/2019</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ictmpl">ictmpl</a></td><td>Generate projects from templates</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">06/30/2018</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/github/dexios">dexios</a></td><td>Dexios is a fast, secure, and open source command-line encryption tool.</td><td>collaborator</td><td>Rust</td><td></td><td><div><small class="grey">06/01/2022</small></div><div><small>02/28/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/itconfig">itconfig</a></td><td>Easy build a configs from environment variables and use it in globally.</td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">12/22/2019</small></div><div><small>07/24/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/migra">migra</a></td><td>Simple SQL migration manager for your project.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">01/31/2021</small></div><div><small>03/17/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ood_persistence">ood_persistence</a></td><td>Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture </td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">10/12/2021</small></div><div><small>10/21/2021</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://corespirit.com">Core Spirit</a></td><td>Social platform focusing on human and planetary enhancement</td><td>developer</td><td>TS, NodeJS, Go, Python, React, Docker, Drone CI</td><td></td><td><div><small class="grey">09/05/2018</small></div><div><small>12/31/2019</small></div></td></tr><!--]--></tbody></table></div><!--]--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
-    <script type="module" src="/assets/app-Cngbh0tK.js" defer></script>
+    <script type="module" src="/assets/app-DJYZ00Zc.js" defer></script>
   </body>
 </html>
diff --git a/index.html b/index.html
index 36ed99d..d9d310d 100644
--- a/index.html
+++ b/index.html
@@ -31,13 +31,13 @@
         document.documentElement.dataset.theme = 'dark'
       }
     </script>
-    <link rel="alternate" hreflang="en-us" href="https://pleshevski.ru/eng/"><meta property="og:url" content="https://pleshevski.ru/"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:title" content="Резюме"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><meta property="og:locale:alternate" content="en-US"><meta property="og:updated_time" content="2024-09-05T22:11:51.000Z"><meta property="article:modified_time" content="2024-09-05T22:11:51.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Резюме"}</script><title>Резюме | Дмитрий Плешевский</title><meta name="description" content=" ">
+    <link rel="alternate" hreflang="en-us" href="https://pleshevski.ru/eng/"><meta property="og:url" content="https://pleshevski.ru/"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:title" content="Резюме"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><meta property="og:locale:alternate" content="en-US"><meta property="og:updated_time" content="2025-03-12T12:50:22.000Z"><meta property="article:modified_time" content="2025-03-12T12:50:22.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Резюме"}</script><title>Резюме | Дмитрий Плешевский</title><meta name="description" content=" ">
     <link rel="preload" href="/assets/style-BTqgNJf6.css" as="style"><link rel="stylesheet" href="/assets/style-BTqgNJf6.css">
-    <link rel="modulepreload" href="/assets/app-Cngbh0tK.js"><link rel="modulepreload" href="/assets/index.html-BvT0yAcG.js">
-    <link rel="prefetch" href="/assets/works.html-UxQSy3c_.js" as="script"><link rel="prefetch" href="/assets/index.html-B8MvPzPB.js" as="script"><link rel="prefetch" href="/assets/works.html-Be9u9wdK.js" as="script"><link rel="prefetch" href="/assets/404.html-BJKGAZg4.js" as="script">
+    <link rel="modulepreload" href="/assets/app-DJYZ00Zc.js"><link rel="modulepreload" href="/assets/index.html-CQ1iAHbC.js">
+    <link rel="prefetch" href="/assets/works.html-DY9jTouw.js" as="script"><link rel="prefetch" href="/assets/index.html-Dd-yZNG5.js" as="script"><link rel="prefetch" href="/assets/works.html-DG7W-s4f.js" as="script"><link rel="prefetch" href="/assets/404.html-Bw-82Xq4.js" as="script">
   </head>
   <body>
-    <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/"><!----><span class="vp-site-name" aria-hidden="true">Дмитрий Плешевский</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-home"><header class="vp-hero"><!----><!----><p class="vp-hero-description"> </p><!----></header><!----><div vp-content><div><p>Всегда актуальная ссылка на <a class="route-link" href="/">резюме</a>.</p><h2 id="общие-сведения" tabindex="-1"><a class="header-anchor" href="#общие-сведения"><span>Общие сведения</span></a></h2><p>Меня зовут Дмитрий Плешевский.</p><p>Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий разработчик програмного обеспечения, архитектор, руководитель команды, а так же ментор.</p><h2 id="умения" tabindex="-1"><a class="header-anchor" href="#умения"><span>Умения</span></a></h2><h4 id="языки-программирования" tabindex="-1"><a class="header-anchor" href="#языки-программирования"><span>Языки программирования:</span></a></h4><ul><li>TypeScript (предпочитаю, твёрдый 9-летний опыт)</li><li>SQL (предпочитаю, твёрдый 8-летний опыт)</li><li>Rust (предпочитаю, 5-летний опыт)</li><li>Python (твёрдый 9-летний опыт)</li><li>Haskell</li><li>Bash (8-летний опыт)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="хранилища-данных" tabindex="-1"><a class="header-anchor" href="#хранилища-данных"><span>Хранилища данных:</span></a></h4><ul><li>PostgreSQL (предпочитаю, твёрдый 8-летний опыт)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (предпочитаю, твердый 5-летний опыт)</li></ul><hr><p>Я так же имею большой опыт в создании следующих типов приложений:</p><ul><li>Традиционные (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Динамическое (SPA)</li><li>Гибридное (SSR + SPA)</li><li>Консольные</li><li>Кроссплатформенные</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>async-graphql</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>shaku</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>bb8</code> + <code>postgres-types</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>diesel</code> (2-летний опыт)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (твёрдый 5-летний опыт)</li><li><code>Express</code> (твёрдый 9-летний опыт)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (твёрдый 5-летний опыт)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (твёрдый 8-летний опыт)</li><li><code>VueJS</code> (предпочитаю, твёрдый 4-летний опыт)</li><li><code>Cypress</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>Sass</code> (предпочитаю, твёрдый 8-летний опыт)</li><li><code>Less</code> (слабый 4-летний опыт)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>Docker Swarm</code> (твёрдый 6-летний опыт)</li><li><code>Kubernetes</code> (слабый 5-летний опыт)</li><li><code>Woodpecker CI</code> (твёрдый 4-летний опыт)</li><li><code>Drone CI</code> (твёрдый 3-летний опыт)</li><li><code>Gitlab CI</code> (твёрдый 7-летний опыт)</li><li><code>GitHub Actions</code> (4-летний опыт)</li></ul><h2 id="интересы" tabindex="-1"><a class="header-anchor" href="#интересы"><span>Интересы</span></a></h2><p>Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.</p><p>Помимо программирования я люблю готовить и проводить время со своей любимой семьей!</p><h2 id="контакты" tabindex="-1"><a class="header-anchor" href="#контакты"><span>Контакты</span></a></h2><p>Simplex (Предпочтительно): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="ссылки" tabindex="-1"><a class="header-anchor" href="#ссылки"><span>Ссылки</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Приостановлен)</a></li></ul></div></div><!----></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
-    <script type="module" src="/assets/app-Cngbh0tK.js" defer></script>
+    <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/"><!----><span class="vp-site-name" aria-hidden="true">Дмитрий Плешевский</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-home"><header class="vp-hero"><!----><!----><p class="vp-hero-description"> </p><!----></header><!----><div vp-content><div><p>Всегда актуальная ссылка на <a class="route-link" href="/">резюме</a>.</p><h2 id="общие-сведения" tabindex="-1"><a class="header-anchor" href="#общие-сведения"><span>Общие сведения</span></a></h2><p>Меня зовут Дмитрий Плешевский.</p><p>Как энтузиаст open-source разработки, я всегда готов к сотрудничеству и участию в интересных проектах. Меня вдохновляет возможность вносить вклад в сообщество и делиться знаниями. Основные технологии, с которыми я работаю, включают <code>TypeScript</code>, <code>Rust</code>, <code>Python</code>, <code>PostgreSQL</code>, <code>Minio</code>, <code>RabbitMQ</code>, <code>React</code>, <code>VueJS</code>, <code>Docker</code>. Особенно люблю функциональное программирование, которое позволяет писать чистый и эффективный код. Как евангелист <code>NixOS</code>, я не только активно использую его в своих проектах, но и активно агитирую людей и компании переходить на эту систему, подчеркивая ее преимущества и помогая внедрять ее в их инфраструктуру. Большой опыт в разработке backend и frontend приложений, а также в DevOps, позволяет эффективно решать сложные задачи. Также имею опыт работы в качестве архитектора, руководителя команды и наставника.</p><h2 id="умения" tabindex="-1"><a class="header-anchor" href="#умения"><span>Умения</span></a></h2><h4 id="языки-программирования" tabindex="-1"><a class="header-anchor" href="#языки-программирования"><span>Языки программирования:</span></a></h4><ul><li>TypeScript (предпочитаю, твёрдый 9-летний опыт)</li><li>SQL (предпочитаю, твёрдый 8-летний опыт)</li><li>Rust (предпочитаю, 5-летний опыт)</li><li>Python (твёрдый 9-летний опыт)</li><li>Haskell</li><li>Bash (8-летний опыт)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="хранилища-данных" tabindex="-1"><a class="header-anchor" href="#хранилища-данных"><span>Хранилища данных:</span></a></h4><ul><li>PostgreSQL (предпочитаю, твёрдый 8-летний опыт)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Redis</li><li>Minio (предпочитаю, твердый 5-летний опыт)</li></ul><hr><p>Я так же имею большой опыт в создании следующих типов приложений:</p><ul><li>Традиционные (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Динамическое (SPA)</li><li>Гибридное (SSR + SPA)</li><li>Консольные</li><li>Кроссплатформенные</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>async-graphql</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>shaku</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>bb8</code> + <code>postgres-types</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>diesel</code> (2-летний опыт)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (твёрдый 5-летний опыт)</li><li><code>Express</code> (твёрдый 9-летний опыт)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (твёрдый 5-летний опыт)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (твёрдый 8-летний опыт)</li><li><code>VueJS</code> (предпочитаю, твёрдый 4-летний опыт)</li><li><code>Cypress</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>Sass</code> (предпочитаю, твёрдый 8-летний опыт)</li><li><code>Less</code> (слабый 4-летний опыт)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>Docker Swarm</code> (твёрдый 6-летний опыт)</li><li><code>Kubernetes</code> (слабый 5-летний опыт)</li><li><code>Woodpecker CI</code> (твёрдый 4-летний опыт)</li><li><code>Drone CI</code> (твёрдый 3-летний опыт)</li><li><code>Gitlab CI</code> (твёрдый 7-летний опыт)</li><li><code>GitHub Actions</code> (4-летний опыт)</li></ul><h2 id="интересы" tabindex="-1"><a class="header-anchor" href="#интересы"><span>Интересы</span></a></h2><p>Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.</p><p>Помимо программирования я люблю готовить и проводить время со своей любимой семьей!</p><h2 id="контакты" tabindex="-1"><a class="header-anchor" href="#контакты"><span>Контакты</span></a></h2><p>Simplex (Предпочтительно): <a href="https://simplex.chat/contact#/?v=2-7&amp;smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="ссылки" tabindex="-1"><a class="header-anchor" href="#ссылки"><span>Ссылки</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Приостановлен)</a></li></ul></div></div><!----></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
+    <script type="module" src="/assets/app-DJYZ00Zc.js" defer></script>
   </body>
 </html>
diff --git a/sitemap.xml b/sitemap.xml
index 5c2fdcc..9f07400 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml-stylesheet type="text/xsl" href="/sitemap.xsl"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://pleshevski.ru/</loc><lastmod>2024-09-05T22:11:51.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/works.html</loc><lastmod>2024-10-15T14:10:49.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url><url><loc>https://pleshevski.ru/eng/</loc><lastmod>2024-09-05T22:11:51.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/eng/works.html</loc><lastmod>2024-08-07T08:48:54.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url></urlset>
\ No newline at end of file
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://pleshevski.ru/</loc><lastmod>2025-03-12T12:50:22.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/works.html</loc><lastmod>2024-10-15T14:10:49.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url><url><loc>https://pleshevski.ru/eng/</loc><lastmod>2025-03-12T12:50:22.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/"/></url><url><loc>https://pleshevski.ru/eng/works.html</loc><lastmod>2024-08-07T08:48:54.000Z</lastmod><changefreq>monthly</changefreq><xhtml:link rel="alternate" hreflang="ru-RU" href="https://pleshevski.ru/works.html"/><xhtml:link rel="alternate" hreflang="en-US" href="https://pleshevski.ru/eng/works.html"/></url></urlset>
\ No newline at end of file
diff --git a/works.html b/works.html
index eaa7e7a..7a21d02 100644
--- a/works.html
+++ b/works.html
@@ -33,11 +33,11 @@
     </script>
     <link rel="alternate" hreflang="en-us" href="https://pleshevski.ru/eng/works.html"><meta property="og:url" content="https://pleshevski.ru/works.html"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:title" content="Работы"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><meta property="og:locale:alternate" content="en-US"><meta property="og:updated_time" content="2024-10-15T14:10:49.000Z"><meta property="article:modified_time" content="2024-10-15T14:10:49.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Работы"}</script><title>Работы | Дмитрий Плешевский</title><meta name="description" content=" ">
     <link rel="preload" href="/assets/style-BTqgNJf6.css" as="style"><link rel="stylesheet" href="/assets/style-BTqgNJf6.css">
-    <link rel="modulepreload" href="/assets/app-Cngbh0tK.js"><link rel="modulepreload" href="/assets/works.html-UxQSy3c_.js">
-    <link rel="prefetch" href="/assets/index.html-BvT0yAcG.js" as="script"><link rel="prefetch" href="/assets/index.html-B8MvPzPB.js" as="script"><link rel="prefetch" href="/assets/works.html-Be9u9wdK.js" as="script"><link rel="prefetch" href="/assets/404.html-BJKGAZg4.js" as="script">
+    <link rel="modulepreload" href="/assets/app-DJYZ00Zc.js"><link rel="modulepreload" href="/assets/works.html-DY9jTouw.js">
+    <link rel="prefetch" href="/assets/index.html-CQ1iAHbC.js" as="script"><link rel="prefetch" href="/assets/index.html-Dd-yZNG5.js" as="script"><link rel="prefetch" href="/assets/works.html-DG7W-s4f.js" as="script"><link rel="prefetch" href="/assets/404.html-Bw-82Xq4.js" as="script">
   </head>
   <body>
     <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container data-v-765855fb><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/"><!----><span class="vp-site-name" aria-hidden="true">Дмитрий Плешевский</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div vp-content><!--[--><!--]--><div><h2 id="выделенныи-опыт-работы" tabindex="-1"><a class="header-anchor" href="#выделенныи-опыт-работы"><span>Выделенный опыт работы</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Даты: Август 2018 – по настоящее время</li><li>Роли: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Разработка инструмента управления проектами для дизайнеров интерьера.</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Стек: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Перенес триггеры базы данных в бизнес-логику. Проще стало читать код, вносить изменение и система стала надежнее.</li><li>Ввёл практику написания unit тестов и интеграционных тестов. Самолично написал более 70% всех тестов.</li><li>Добавил GraphQL подписки для динамичного обновления.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Стек: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Сформировал UIKit и общие компоненты, оптимизировал сложные и нагруженные компоненты.</li><li>Изменил работу с API на фронтенде.</li><li>Внедрил практику написания интеграционных тестов с помощью cypress.</li><li>Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.</li></ul><h5 id="руководство-командои" tabindex="-1"><a class="header-anchor" href="#руководство-командои"><span>Руководство командой</span></a></h5><ul><li>Ввёл практику TDD (Test-Driven Development).</li><li>Я привнес в проект &quot;метод критической цепи&quot;, &quot;метод буфера&quot; и &quot;метод планирования с конца&quot;. Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями.</li><li>Составлял индивидуальный план развития для членов команды.</li></ul><h5 id="архитектура" tabindex="-1"><a class="header-anchor" href="#архитектура"><span>Архитектура</span></a></h5><ul><li>Разбил всю кодовую базу на модули по фичам.</li><li>Ускорил базу данных <code>PostgreSQL</code>, разбив данные компаний по отдельным схемам и применив партиципирование таблиц.</li><li>Добавил кеширование запросов с <code>Redis</code>.</li><li>Уменьшил затраты на инфраструткуру в 5 раз, перенес весь проект с kubernetes на <code>NixOS</code>.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка бэк-офиса для социальной платформы Core Spirit.</p><ul><li>Интегрировал Dependabot, который помог обновить все устаревшие зависимости. Заменил webpack на vite.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Даты: Май 2018 - по настоящее время (Пассивная поддержка)</li><li>Роль: Tech Lead</li></ul><p>Разработка веб-инфраструктуры образовательного центра Мастер Прогресс.</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">Главного сайта</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Кабинета студента</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">Инструмента для работы с rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>Создана полная инфраструктура на <code>NixOS</code>. До этого создал инфраструктуру используя <code>Drone CI</code> / <code>Woodpecker CI</code> и <code>Docker swarm</code>, которая проработала более 5 лет.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Даты: Август 2018 - May 2020, Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка социальной платформы, сфокусированной на улучшении человека и планеты.</p><ul><li>REST API (<code>Node.JS</code>, <code>Express</code>, <code>PostgreSQL</code>) для основного сайта и бэк-офиса. Успел поработать с новой версией REST API на <code>Go</code>, <code>PostgreSQL</code></li><li>Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).</li><li>Создал нейронную сеть для автоматической категоризации статей.</li></ul><hr><h3 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h3><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>В этой компании было 6 значительных проектов, которые я успешно завершил:</p><ul><li>Оптимизация создания рекламных страниц (PHP, JavaScript)</li><li>Поддержка основного традиционного сайта <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)</li><li>Работа с нейронными сетями для подбора товаров</li><li>Разработка приложений для распознавания лиц для Android (Java)</li></ul><hr><h2 id="хронология" tabindex="-1"><a class="header-anchor" href="#хронология"><span>Хронология</span></a></h2><p>В списке перечислены только публичные проекты.</p></div><!--[--><!--]--></div><footer class="vp-page-meta"><!----><div class="vp-meta-item git-info"><div class="vp-meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="vp-meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: dmitriy@ideascup.me">Dmitriy Pleshevskiy</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: dmitriy@pleshevski.ru">Dmitriy Pleshevskiy</span><!----><!--]--><!--]--></span></div></div></footer><!----><!--[--><!--[--><div class="works-table-wrapper" data-v-765855fb><table data-v-765855fb><thead><tr><th>Название</th><th>Описание</th><th>Роль</th><th>Технологии</th><th>Статус</th><th>Даты</th></tr></thead><tbody><!--[--><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/nixeovim">nixeovim</a></td><td>Configure and build neovim editor using nix</td><td>author</td><td>Nix</td><td>actively-developed</td><td><div><small class="">04/24/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/mindustry-tools">Mindustry tools</a></td><td>Tools for the Mindustry game</td><td>author</td><td>Nix, Godot</td><td>passively-maintained</td><td><div><small class="">01/07/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://rosmintrud.masterprogress.ru">Master Progress Rosmintrud tools</a></td><td>Internal service to prepare documents for the rosmintrud (SPA)</td><td>tech&nbsp;lead</td><td>Deno, Sqlite, TS, Vue, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">07/03/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-plpgsql">tree-sitter-plpgsql</a></td><td>plpgsql grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>passively-maintained</td><td><div><small class="">01/05/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-d2">tree-sitter-d2</a></td><td>d2 grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>actively-developed</td><td><div><small class="">12/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/mynix/nix2lua">nix2lua</a></td><td>This is a small but functional library that converts your nix configurations into lua format.</td><td>author</td><td>Nix, Lua</td><td>passively-maintained</td><td><div><small class="">11/22/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/vnetod">vnetod</a></td><td>Dotenv section switcher</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/29/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/recipes">recipes</a></td><td>Site with recipes which cares about privacy</td><td>author</td><td>TS, Deno, Rust</td><td>passively-maintained</td><td><div><small class="">05/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru">pleshevski.ru</a></td><td>Source code of my personal site</td><td>author</td><td>TS, Vue, Vuepress, Nix</td><td>passively-maintained</td><td><div><small class="">03/16/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/espruino-starter">espruino-starter</a></td><td>Quickly start creating your new project on the espruino board or a board based on it.</td><td>author</td><td>JS</td><td>as-is</td><td><div><small class="">08/23/2021</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/sonic-channel">sonic-channel</a></td><td>Rust client for sonic search backend.</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/18/2020</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/it-fsm">it-fsm</a></td><td>Simple full-featured finite state machine for your project</td><td>author</td><td>TS, NodeJS, Deno</td><td>passively-maintained</td><td><div><small class="">10/11/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://cabinet.masterprogress.ru">Cabinet Master Progress</a></td><td>Student&#39;s cabinet of the educational center Master Progress (SSR + SPA)</td><td>tech&nbsp;lead</td><td>Python, Flask, PostgreSQL, TS, React, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">09/22/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/genrss">genrss</a></td><td>RSS generator for python</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="">07/23/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://www.binarymanagement.com">Binary Management</a></td><td>Project management tool for interior designers</td><td>developer, tech&nbsp;lead, team&nbsp;lead</td><td>TS, NodeJS, React, Antd, Docker, Drone CI, Rust, Nix</td><td>actively-developed</td><td><div><small class="">09/15/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://masterprogress.ru">Master Progress</a></td><td>Main website of the educational center Master Progress (SSR + Forms)</td><td>tech&nbsp;lead</td><td>Python, Flask, JS, Nix</td><td>passively-maintained</td><td><div><small class="">04/10/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/picsg">picsg</a></td><td>A tool for steganographing information in a picture encoded using the Vernam cipher.</td><td>author</td><td>Haskell</td><td>as-is</td><td><div><small class="grey">04/13/2024</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/yandexgpt_tg_bot">yandexgpt_tg_bot</a></td><td>The Telegram bot to describe article with link by YandexGPT.</td><td>author</td><td>JS, NodeJS, Nix</td><td>as-is</td><td><div><small class="grey">06/27/2023</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/estring">estring</a></td><td>A simple way to parse a string using type annotations.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/23/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/enve">enve</a></td><td>It helps you work with environment variables and convert it to any type using only type annotations</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/18/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/docker_stack">docker stack drone plugin</a></td><td>Deploy to production using `docker stack deploy`</td><td>author</td><td>Docker, Drone CI, Woodpecker CI</td><td>as-is</td><td><div><small class="grey">06/06/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/paren">paren</a></td><td>Library for parsing and rendering information.</td><td>author</td><td>TS, Deno</td><td>experimental</td><td><div><small class="grey">03/14/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/hwt">hwt</a></td><td>healthy workaholic timer – A tool that keeps you from breaking your health by working all day.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">02/04/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/wd2">wd2</a></td><td>A wrapper over d2 which allows to use additional configs from d2 file</td><td>author</td><td>Bash, Nix</td><td>as-is</td><td><div><small class="grey">12/12/2022</small></div><div><small>07/31/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/react-rest-request">react-rest-request</a></td><td>Minimalistic REST API client for React inspired by Apollo.</td><td>author</td><td>TS, React</td><td>deprecated</td><td><div><small class="grey">10/04/2020</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/marshmallow_pageinfo">marshmallow_pageinfo</a></td><td>Page info marshmallow schema for api</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">10/05/2019</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ictmpl">ictmpl</a></td><td>Generate projects from templates</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">06/30/2018</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/github/dexios">dexios</a></td><td>Dexios is a fast, secure, and open source command-line encryption tool.</td><td>collaborator</td><td>Rust</td><td></td><td><div><small class="grey">06/01/2022</small></div><div><small>02/28/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/itconfig">itconfig</a></td><td>Easy build a configs from environment variables and use it in globally.</td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">12/22/2019</small></div><div><small>07/24/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/migra">migra</a></td><td>Simple SQL migration manager for your project.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">01/31/2021</small></div><div><small>03/17/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ood_persistence">ood_persistence</a></td><td>Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture </td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">10/12/2021</small></div><div><small>10/21/2021</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://corespirit.com">Core Spirit</a></td><td>Social platform focusing on human and planetary enhancement</td><td>developer</td><td>TS, NodeJS, Go, Python, React, Docker, Drone CI</td><td></td><td><div><small class="grey">09/05/2018</small></div><div><small>12/31/2019</small></div></td></tr><!--]--></tbody></table></div><!--]--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
-    <script type="module" src="/assets/app-Cngbh0tK.js" defer></script>
+    <script type="module" src="/assets/app-DJYZ00Zc.js" defer></script>
   </body>
 </html>