muerwre.github.io/bio/index.html
muerwre 1f068b4685 commit 4247aff7889ba00c575befe5f73932d9eedbad0e
Author: Fedor Katurov <gotham48@gmail.com>
Date:   Thu Nov 3 20:46:37 2022 +0600

    fixed buttons placement
2022-11-03 14:48:34 +00:00

12 lines
No EOL
37 KiB
HTML

<!DOCTYPE html>
<html data-head-attrs="">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="head:count" content="2"><link rel="modulepreload" href="/bio/_payload.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/entry.f8ff8132.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/content.741e4176.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/LayoutThemeToggle.dfe6c45f.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/LayoutThemeToggle.vue_used_vue_type_style_index_0_lang.module.001d6eed.js"><link rel="preload" as="style" href="/nuxt/LayoutThemeToggle.vue_used_vue_type_style_index_0_lang.cfa40af4.css"><link rel="modulepreload" as="script" crossorigin href="/nuxt/LayoutFooter.01993b55.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/bio.e2cfb6e3.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioHeading.fc552931.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioSkills.1cbb9b74.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioSkillsCard.dcf6f14b.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiStars.0b5a97ee.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/IconStar.c0f2126f.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiCard.fe784af1.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioProjects.9611713f.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioProjectCard.4bb88134.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/IconsCode.51acf16d.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiActionButton.8de8506c.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/ArrowRight.4c99b7f0.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioCareer.96a55a4c.js"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/react-logo.8351f38f.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/react-native-logo.bdbaa7c9.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/react-ssr-logo.3593105e.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/ts-logo.5847c362.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/golang-logo.f772e478.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/html-logo.1f694231.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/arch-logo.838efbc7.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/gql-logo.1e66e5b3.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/swagger-logo.b314537c.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/vue-logo.17ff892a.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/postgres-logo.d981f813.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/docker-logo.7f942bd1.svg"><link rel="prefetch" as="image" type="image/png" href="/nuxt/vault48.40538b94.png"><link rel="prefetch" as="image" type="image/png" href="/nuxt/orchid-map.2f398715.png"><link rel="prefetch" as="image" type="image/png" href="/nuxt/obsidian-garden.39e6dff3.png"><link rel="prefetch" as="script" crossorigin href="/nuxt/client-db.4629eda6.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/default.2294e3b6.js"><link rel="prefetch" as="style" href="/nuxt/LayoutMainMenuToggle.vue_used_vue_type_style_index_0_lang.5944fda9.css"><link rel="prefetch" as="script" crossorigin href="/nuxt/LayoutMainMenuToggle.46044f42.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/LayoutMainMenuToggle.vue_used_vue_type_style_index_0_lang.module.ab60ac3f.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/LayoutMainMenu.73696950.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/navigation.b4be76a2.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/web-socket.da2a25c3.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/error-component.42d91046.js"><link rel="prefetch" as="style" href="/nuxt/entry.deeb6f50.css"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/howdy.824e8e62.svg"><link rel="stylesheet" href="/nuxt/LayoutThemeToggle.vue_used_vue_type_style_index_0_lang.cfa40af4.css"><style>._wrapper_1hfaq_1{display:flex;flex-direction:column;height:100%}._content_1hfaq_7{flex:1;padding:40px 120px}@media (max-width:1024px){._content_1hfaq_7{padding:40px 40px 20px}}@media (max-width:768px){._content_1hfaq_7{padding:40px 20px 20px}}._footer_1hfaq_22{border-top:1px solid var(--color-line);margin-top:60px;padding:10px}._theme_toggle_1hfaq_28{stroke:currentColor;stroke-width:.5px;position:absolute;right:20px;top:20px}@media (max-width:768px){._theme_toggle_1hfaq_28{stroke-width:1.5px;right:16px;top:16px}}</style><style>._section_1e0mk_1{padding:40px 0}._section_1e0mk_1._heading_1e0mk_4{padding-bottom:0}</style><style>._grid_15n56_1{grid-column-gap:40px;display:grid;grid-template-columns:1fr 2fr}._text_15n56_7{color:var(--color-text-secondary)}._text_15n56_7 b{color:var(--color-text)}</style><style>._list_89lzg_1{-moz-column-gap:20px;column-gap:20px;display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));row-gap:20px}</style><style>._grid_1kefv_1{grid-column-gap:16px;align-items:center;border-bottom:1px solid var(--color-line);display:grid;grid-template-columns:48px 1fr;padding:10px;transition:all .25s}._title_1kefv_11{margin:0 0 4px}._icon_1kefv_15{align-items:center;display:flex}._text_1kefv_20{display:flex;flex-direction:column;padding-bottom:4px}._description_1kefv_26{color:var(--color-text-secondary);font-size:.9rem;line-height:1.4rem;padding:10px}</style><style>._card_e1njf_1{border:1px solid var(--color-line);border-radius:8px;transition:all .25s}._card_e1njf_1:hover{background-color:var(--color-code-background);border-color:var(--color-text-secondary)}</style><style>._rating_11ify_1{display:flex;flex-direction:row;margin-left:-3px}._rating_11ify_1>img{margin-right:2px}._star_11ify_10{stroke:none;fill:currentColor}._star_11ify_10:first-child{color:var(--color-rating-1)}._star_11ify_10:nth-child(2){color:var(--color-rating-2)}._star_11ify_10:nth-child(3){color:var(--color-rating-3)}._star_11ify_10:nth-child(4){color:var(--color-rating-4)}._star_11ify_10:nth-child(5){color:var(--color-rating-5)}._star_11ify_10._filled_11ify_29{fill:var(--color-line)}</style><style>._grid_1ng9c_1{-moz-column-gap:16px;column-gap:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));row-gap:16px}</style><style>._card_1wy9v_1{display:flex;flex-direction:column;height:100%}._thumbnail_1wy9v_7{border-bottom:1px solid var(--color-line);border-radius:8px 8px 0 0;height:250px;overflow:hidden}._image_1wy9v_14{height:auto;-o-object-fit:cover;object-fit:cover;width:100%}._content_1wy9v_20{display:flex;flex:1;flex-direction:column;padding:16px}._head_1wy9v_27{margin-bottom:16px}._title_1wy9v_31{margin:0 0 4px}._url_1wy9v_35{font-size:.9em}._description_1wy9v_39{color:var(--color-text-secondary);font-size:.9em;line-height:1.5em;white-space:pre-line}._buttons_1wy9v_46{-moz-column-gap:10px;column-gap:10px;display:grid;grid-template-columns:repeat(2,1fr);padding:16px;row-gap:10px}</style><style>._button_aq4bi_1{align-items:center;border-radius:8px;color:#fff;display:inline-flex;justify-content:center;text-decoration:none}._button_aq4bi_1._variant-primary_aq4bi_9{background-color:var(--color-primary)}._button_aq4bi_1._variant-outline_aq4bi_12{box-shadow:var(--color-text) 0 0 0 1px;color:var(--color-text);overflow:hidden;position:relative;transition:all .25s}._button_aq4bi_1._variant-outline_aq4bi_12:after{background:var(--color-primary);border-radius:8px;content:" ";inset:0;opacity:0;position:absolute;transform:scale(0);transition:all .25s;z-index:0}._button_aq4bi_1._variant-outline_aq4bi_12:hover{box-shadow:var(--color-background) 0 0 0 1px}._button_aq4bi_1._variant-outline_aq4bi_12:hover:after{opacity:1;transform:scale(1)}._button_aq4bi_1._size-md_aq4bi_37{height:40px;padding:0 30px}._button_aq4bi_1._size-md_aq4bi_37._prefixed_aq4bi_41,._button_aq4bi_1._size-md_aq4bi_37._suffixed_aq4bi_41{padding:0 10px 0 20px}._button_aq4bi_1._size-md_aq4bi_37._suffixed_aq4bi_41{padding-right:0 20px 0 10px}._title_aq4bi_48{flex:1;position:relative;text-align:center;z-index:1}._size-md_aq4bi_37._prefixed_aq4bi_41 ._title_aq4bi_48{padding-left:10px}._size-md_aq4bi_37._suffixed_aq4bi_41 ._title_aq4bi_48{padding-right:10px}._prefix_aq4bi_41,._suffix_aq4bi_41{display:inline-flex;position:relative;z-index:2}</style><link rel="stylesheet" href="/nuxt/entry.deeb6f50.css" media="print" onload="this.media='all'; this.onload=null;"><script>const w=window,de=document.documentElement,knownColorSchemes=["dark","light"],preference=window.localStorage.getItem("nuxt-color-mode")||"dark";let value=preference==="system"?getColorScheme():preference;const forcedColorMode=de.getAttribute("data-color-mode-forced");forcedColorMode&&(value=forcedColorMode),addColorScheme(value),w["__NUXT_COLOR_MODE__"]={preference,value,getColorScheme,addColorScheme,removeColorScheme};function addColorScheme(e){const o=""+e+"",t="";de.classList?de.classList.add(o):de.className+=" "+o,t&&de.setAttribute("data-"+t,e)}function removeColorScheme(e){const o=""+e+"",t="";de.classList?de.classList.remove(o):de.className=de.className.replace(new RegExp(o,"g"),""),t&&de.removeAttribute("data-"+t)}function prefersColorScheme(e){return w.matchMedia("(prefers-color-scheme"+e+")")}function getColorScheme(){if(w.matchMedia&&prefersColorScheme("").media!=="not all"){for(const e of knownColorSchemes)if(prefersColorScheme(":"+e).matches)return e}return"light"}
</script></head>
<body data-head-attrs=""><div id="__nuxt"><div class="_wrapper_1hfaq_1" hastransition="true"><div class="_content_1hfaq_7"><button class="_theme_toggle_1hfaq_28 _button_jz7in_1 _theme_toggle_1hfaq_28"><span></span></button><!--[--><article><section class="_section_1e0mk_1 _heading_1e0mk_4"><div class="_grid_15n56_1"><div><img src="/nuxt/howdy.824e8e62.svg"></div><div class="_text_15n56_7"><h1>Howdy!</h1><p> My name is <b>Fedor Katurov</b>, I&#39;m a fullstack developer from Siberia. </p><p> I develop frontend applications with <b>React</b>, <b>Vue</b> and numerous other frameworks for the most of my time, but I&#39;m also capable of doing <b>Typescript</b> and <b>Golang</b> backend. </p></div></div></section><section class="_section_1e0mk_1"><div><h2>Skills</h2><div class="_list_89lzg_1"><!--[--><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/react-logo.8351f38f.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">React</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Classes and FC-s, hooks, context, redux, redux-saga, mobx</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/ts-logo.5847c362.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">Typescript</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">For both frontend and backend development: generics, guards, infers</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/react-ssr-logo.3593105e.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">SSR (Next, Gatsby)</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Automated generation, incremental, static, and dynamic rendering</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/vue-logo.17ff892a.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">Vue.js &amp; Nuxt</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Common SPA-s and SSR blogs like this one, with composition API, and Vuex</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/react-native-logo.bdbaa7c9.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">React Native</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Basic developing and releasing experience without native modules</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/golang-logo.f772e478.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">Golang</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Monolith and microservice apps with REST, GraphQL, and GRPC</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/docker-logo.7f942bd1.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">Docker</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Docker, docker-compose, private registries, gitlab-ci, and drone-ci</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/html-logo.1f694231.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">HTML, CSS, SVG</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Adaptive markup, all modern techniques, preprocessors, and CSS-in-JS</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/arch-logo.838efbc7.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">Linux Shell</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Linux user since 2003, can write scripts to automate my work. BTW, I use Arch!</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/gql-logo.1e66e5b3.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">GraphQL</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Both server- and client-side. Queries, mutations, cache manipulation</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/swagger-logo.b314537c.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">REST API</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">With Axios, fetch, express, gorilla-mux, and gin-gonic</div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_grid_1kefv_1"><div class="_icon_1kefv_15"><!--[--><img src="/nuxt/postgres-logo.d981f813.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">SQL</h3><div class="_rating_11ify_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_11ify_10 _filled_11ify_29"><path d="m11.65 44 3.25-14.05L4 20.5l14.4-1.25L24 6l5.6 13.25L44 20.5l-10.9 9.45L36.35 44 24 36.55Z"></path></svg><!--]--></div></div></div><div class="_description_1kefv_26">Base queries, JOIN-s, indexes and simpl query optimizations</div><!--]--></div><!--]--></div></div></section><section class="_section_1e0mk_1"><div><h2>Pet Projects</h2><div class="_grid_1ng9c_1"><!--[--><div class="_card_e1njf_1"><!--[--><div class="_card_1wy9v_1"><div class="_thumbnail_1wy9v_7"><img src="/nuxt/vault48.40538b94.png" class="_image_1wy9v_14" alt="Vault48"></div><div class="_content_1wy9v_20"><div class="_head_1wy9v_27"><h3 class="_title_1wy9v_31">Vault48</h3><div class="_url_1wy9v_35"><a href="https://vault48.org" rel="noopener noreferrer">https://vault48.org</a></div></div><div class="_description_1wy9v_39">Community blog with a long 13-year history, features photo, video and audio embedding.
Beeing initially written with Drupal 5, went through refactoring to Laravel + Vue and then, nowadays works on React and Golang stack.</div></div><div class="_buttons_1wy9v_46"><a href="https://github.com/muerwre/vault-frontend" rel="noopener noreferrer" class="_button_aq4bi_1 _variant-outline_aq4bi_12 _size-md_aq4bi_37 _suffixed_aq4bi_41" _target="blank"><!----><span class="_title_aq4bi_48"><!--[--> Source Code <!--]--></span><span class="_suffix_aq4bi_41"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" fill="currentColor"><path xmlns="http://www.w3.org/2000/svg" d="m16 35.9-12-12 12.1-12.1 2.15 2.15L8.3 23.9l9.85 9.85Zm15.9.1-2.15-2.15 9.95-9.95-9.85-9.85L32 11.9l12 12Z"></path></svg><!--]--></span></a><a href="https://vault48.org" rel="noopener noreferrer" class="_button_aq4bi_1 _variant-outline_aq4bi_12 _size-md_aq4bi_37 _suffixed_aq4bi_41" _target="blank"><!----><span class="_title_aq4bi_48"><!--[--> Visit <!--]--></span><span class="_suffix_aq4bi_41"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" fill="currentColor"><path d="m24 40-2.1-2.15L34.25 25.5H8v-3h26.25L21.9 10.15 24 8l16 16Z"></path></svg><!--]--></span></a></div></div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_card_1wy9v_1"><div class="_thumbnail_1wy9v_7"><img src="/nuxt/orchid-map.2f398715.png" class="_image_1wy9v_14" alt="Orchid Map"></div><div class="_content_1wy9v_20"><div class="_head_1wy9v_27"><h3 class="_title_1wy9v_31">Orchid Map</h3><div class="_url_1wy9v_35"><a href="https://map.vault48.org" rel="noopener noreferrer">https://map.vault48.org</a></div></div><div class="_description_1wy9v_39">Local cycling community Web Maps made with React, Leaflet, and Golang.
Implements automatic route building with OSRM and map rasterization with canvas. Used by users in local cycling communities for ride sharing.</div></div><div class="_buttons_1wy9v_46"><a href="https://github.com/muerwre/orchidmap-front" rel="noopener noreferrer" class="_button_aq4bi_1 _variant-outline_aq4bi_12 _size-md_aq4bi_37 _suffixed_aq4bi_41" _target="blank"><!----><span class="_title_aq4bi_48"><!--[--> Source Code <!--]--></span><span class="_suffix_aq4bi_41"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" fill="currentColor"><path xmlns="http://www.w3.org/2000/svg" d="m16 35.9-12-12 12.1-12.1 2.15 2.15L8.3 23.9l9.85 9.85Zm15.9.1-2.15-2.15 9.95-9.95-9.85-9.85L32 11.9l12 12Z"></path></svg><!--]--></span></a><a href="https://map.vault48.org" rel="noopener noreferrer" class="_button_aq4bi_1 _variant-outline_aq4bi_12 _size-md_aq4bi_37 _suffixed_aq4bi_41" _target="blank"><!----><span class="_title_aq4bi_48"><!--[--> Visit <!--]--></span><span class="_suffix_aq4bi_41"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" fill="currentColor"><path d="m24 40-2.1-2.15L34.25 25.5H8v-3h26.25L21.9 10.15 24 8l16 16Z"></path></svg><!--]--></span></a></div></div><!--]--></div><div class="_card_e1njf_1"><!--[--><div class="_card_1wy9v_1"><div class="_thumbnail_1wy9v_7"><img src="/nuxt/obsidian-garden.39e6dff3.png" class="_image_1wy9v_14" alt="Obsidian Garden"></div><div class="_content_1wy9v_20"><div class="_head_1wy9v_27"><h3 class="_title_1wy9v_31">Obsidian Garden</h3><div class="_url_1wy9v_35"><a href="https://muerwre.github.io" rel="noopener noreferrer">https://muerwre.github.io</a></div></div><div class="_description_1wy9v_39">Frontend for personal knowledge database managed by Obsidian.md software.
Made with nuxt3, nuxt-content plugin and some customizations. Deployed with drone-ci directly to github-pages.</div></div><div class="_buttons_1wy9v_46"><a href="https://github.com/muerwre/muerwre.github.io" rel="noopener noreferrer" class="_button_aq4bi_1 _variant-outline_aq4bi_12 _size-md_aq4bi_37 _suffixed_aq4bi_41" _target="blank"><!----><span class="_title_aq4bi_48"><!--[--> Source Code <!--]--></span><span class="_suffix_aq4bi_41"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" fill="currentColor"><path xmlns="http://www.w3.org/2000/svg" d="m16 35.9-12-12 12.1-12.1 2.15 2.15L8.3 23.9l9.85 9.85Zm15.9.1-2.15-2.15 9.95-9.95-9.85-9.85L32 11.9l12 12Z"></path></svg><!--]--></span></a><a href="https://muerwre.github.io" rel="noopener noreferrer" class="_button_aq4bi_1 _variant-outline_aq4bi_12 _size-md_aq4bi_37 _suffixed_aq4bi_41" _target="blank"><!----><span class="_title_aq4bi_48"><!--[--> Visit <!--]--></span><span class="_suffix_aq4bi_41"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" fill="currentColor"><path d="m24 40-2.1-2.15L34.25 25.5H8v-3h26.25L21.9 10.15 24 8l16 16Z"></path></svg><!--]--></span></a></div></div><!--]--></div><!--]--></div></div></section><section class="_section_1e0mk_1"><div><h2>Career</h2></div></section></article><!--]--></div><footer class="_footer_ogxvf_1 _footer_1hfaq_22 _footer_1hfaq_22"><div>btw, have a nice day</div><div class="_filler_ogxvf_9"></div><div> (2018 - 2022) <a href="https://github.com/muerwre/" rel="noopener noreferrer" target="_blank">muerwre</a></div></footer></div></div><script type="module">import p from "/bio/_payload.js";window.__NUXT__={...p,...((function(a,b,c,d,e,f){return {state:{"$scolor-mode":{preference:b,value:b,unknown:c,forced:a}},_errors:{},serverRendered:c,config:{public:{content:{clientDB:{isSPA:a,integrity:1667486853304},navigation:{fields:["blblblb"]},base:"_content",tags:{p:"prose-p",a:"prose-a",blockquote:"prose-blockquote","code-inline":"prose-code-inline",code:"prose-code",em:"prose-em",h1:"prose-h1",h2:"prose-h2",h3:"prose-h3",h4:"prose-h4",h5:"prose-h5",h6:"prose-h6",hr:"prose-hr",img:"prose-img",ul:"prose-ul",ol:"prose-ol",li:"prose-li",strong:"prose-strong",table:"prose-table",thead:"prose-thead",tbody:"prose-tbody",td:"prose-td",th:"prose-th",tr:"prose-tr"},highlight:{theme:{default:"github-dark",light:"solarized-light"},preload:[d,"c","go","graphql","scss",d,e,"docker","typescript","javascript","nginx","bash","yaml",e],apiURL:"\u002Fapi\u002F_content\u002Fhighlight"},wsUrl:f,documentDriven:a,anchorLinks:{depth:4,exclude:[1]}}},app:{baseURL:"\u002F",buildAssetsDir:"nuxt\u002F",cdnURL:f}},prerenderedAt:1667486876429}}(false,"dark",true,"shell","sh","")))}</script><script type="module" src="/nuxt/entry.f8ff8132.js" crossorigin></script><script type="module" src="/nuxt/content.741e4176.js" crossorigin></script><script type="module" src="/nuxt/LayoutThemeToggle.dfe6c45f.js" crossorigin></script><script type="module" src="/nuxt/bio.e2cfb6e3.js" crossorigin></script><script type="module" src="/nuxt/BioHeading.fc552931.js" crossorigin></script><script type="module" src="/nuxt/BioSkills.1cbb9b74.js" crossorigin></script><script type="module" src="/nuxt/BioSkillsCard.dcf6f14b.js" crossorigin></script><script type="module" src="/nuxt/UiCard.fe784af1.js" crossorigin></script><script type="module" src="/nuxt/UiStars.0b5a97ee.js" crossorigin></script><script type="module" src="/nuxt/IconStar.c0f2126f.js" crossorigin></script><script type="module" src="/nuxt/BioProjects.9611713f.js" crossorigin></script><script type="module" src="/nuxt/BioProjectCard.4bb88134.js" crossorigin></script><script type="module" src="/nuxt/UiActionButton.8de8506c.js" crossorigin></script><script type="module" src="/nuxt/IconsCode.51acf16d.js" crossorigin></script><script type="module" src="/nuxt/ArrowRight.4c99b7f0.js" crossorigin></script><script type="module" src="/nuxt/BioCareer.96a55a4c.js" crossorigin></script><script type="module" src="/nuxt/LayoutFooter.01993b55.js" crossorigin></script></body>
</html>