muerwre.github.io/docs/about/index.html
2023-12-29 05:30:13 +00:00

12 lines
No EOL
44 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html data-head-attrs="">
<head><title>About Me</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script src="https://anal.vault48.org/script.js" data-website-id="7d587423-ffda-4732-a99d-6cf60d5c9a8a" async></script><meta name="head:count" content="3"><link rel="modulepreload" href="/about/_payload.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/entry.4ee9a191.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/landing.7155978c.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/LayoutHeader.19a97e65.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/LayoutHeader.vue_used_vue_type_style_index_0_lang.module.57d4f89f.js"><link rel="preload" as="style" href="/nuxt/LayoutHeader.vue_used_vue_type_style_index_0_lang.b2295632.css"><link rel="modulepreload" as="script" crossorigin href="/nuxt/content.b0611f82.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/LayoutThemeToggle.c725bcad.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/LayoutThemeToggle.vue_used_vue_type_style_index_0_lang.module.ab8f2448.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.b77d7334.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/about.3d92e8bf.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioHeading.5ec474f5.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/IconsSend.2235267c.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiActionButton.91db8a82.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/IconsGithub.902139d3.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiButtonGroup.393bd539.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioSkills.vue_used_vue_type_style_index_0_lang.module.516c18c9.js"><link rel="preload" as="style" href="/nuxt/BioSkills.vue_used_vue_type_style_index_0_lang.4d0cadf8.css"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioSkills.23266a90.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioSkillsCard.689bf162.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiStars.1dbf25c1.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/IconStar.55a52cde.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiCard.7884f8b4.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/UiCard.vue_used_vue_type_style_index_0_lang.module.a0027dfd.js"><link rel="preload" as="style" href="/nuxt/UiCard.vue_used_vue_type_style_index_0_lang.7760099e.css"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioProjects.6ca9848b.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/BioProjectCard.fb6f0a69.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/IconsCode.2674d4a9.js"><link rel="modulepreload" as="script" crossorigin href="/nuxt/ArrowRight.7cd04562.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/client-db.68378479.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/web-socket.71cfb5c2.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/error-component.bbec604a.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/default.c79b0ef7.js"><link rel="prefetch" as="style" href="/nuxt/LayoutMainMenuToggle.vue_used_vue_type_style_index_0_lang.17e7aae7.css"><link rel="prefetch" as="script" crossorigin href="/nuxt/LayoutMainMenuToggle.799227e3.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/LayoutMainMenuToggle.vue_used_vue_type_style_index_0_lang.module.fbcd3219.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/LayoutMainMenu.7308a64c.js"><link rel="prefetch" as="script" crossorigin href="/nuxt/navigation.c07ec359.js"><link rel="prefetch" as="style" href="/nuxt/entry.8e071ff5.css"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/howdy.90a75ece.svg"><link rel="prefetch" as="image" type="image/svg+xml" href="/nuxt/react-logo.1aab3d6d.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="stylesheet" href="/nuxt/LayoutHeader.vue_used_vue_type_style_index_0_lang.b2295632.css"><link rel="stylesheet" href="/nuxt/LayoutThemeToggle.vue_used_vue_type_style_index_0_lang.cfa40af4.css"><link rel="stylesheet" href="/nuxt/BioSkills.vue_used_vue_type_style_index_0_lang.4d0cadf8.css"><link rel="stylesheet" href="/nuxt/UiCard.vue_used_vue_type_style_index_0_lang.7760099e.css"><style>._wrapper_1qq06_1{display:flex;flex-direction:column;height:100%;min-height:100vh}._header_container_1qq06_8{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);position:sticky;top:0;z-index:10}._header_container_1qq06_8:before{background:var(--top-gradient);content:" ";height:4px;left:0;position:absolute;right:0;top:0;z-index:2}._header_container_1qq06_8:after{background:var(--color-background);content:"";inset:0;opacity:.95;position:absolute;z-index:0}@supports ((-webkit-backdrop-filter:blur(5px)) or (backdrop-filter:blur(5px))){._header_container_1qq06_8:after{opacity:.85}}._header_content_1qq06_38{margin:auto;max-width:min(1280px,100vw);padding:0 40px;position:relative;z-index:1}@media (max-width:1024px){._header_content_1qq06_38{padding:0 40px}}@media (max-width:768px){._header_content_1qq06_38{padding:0 20px}}</style><style>._header_t5iqp_1{padding:22px 0 20px;text-align:left}._header_t5iqp_1 a{color:var(--color-text);padding:0 25px 0 0;position:relative;text-decoration:none}._header_t5iqp_1 a._active_t5iqp_11{color:var(--color-link)}._header_t5iqp_1 a._active_t5iqp_11:after{background:var(--color-link);left:3px;right:28px}._header_t5iqp_1 a:after{background:var(--color-text);bottom:-6px;content:"";height:2px;left:50%;position:absolute;right:50%;transition:all .25s}</style><style>._wrapper_vom09_1{display:flex;flex:1;flex-direction:column;height:100%;padding-top:40px}@media (max-width:1024px){._wrapper_vom09_1{padding-top:10px}}._content_vom09_14{flex:1}._footer_vom09_18{border-top:1px solid var(--color-line);margin-top:60px;padding:10px}._theme_toggle_vom09_24{stroke:currentColor;stroke-width:.5px;position:absolute;right:20px;top:20px;z-index:12}@media (max-width:768px){._theme_toggle_vom09_24{stroke-width:1.5px;right:16px;top:16px}}</style><style>._content_1jhz3_1{margin:auto;max-width:min(1280px,100vw);padding:0 40px}@media (max-width:1024px){._content_1jhz3_1{padding:0 40px}}@media (max-width:768px){._content_1jhz3_1{padding:0 20px}}._section_1jhz3_17{padding:40px 0}._section_1jhz3_17._heading_1jhz3_20{padding-bottom:0}@media (max-width:1024px){._heading_1jhz3_20{padding-top:20px}}</style><style>@import url("https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@600&family=Roboto:wght@400;700&display=swap");._page-enter-active_1ss95_2,._page-leave-active_1ss95_3{transition:all .4s}._page-enter-from_1ss95_7,._page-leave-to_1ss95_8{opacity:0;transform:translateY(50px)}body,html{background:var(--color-background);color:var(--color-text);font-family:var(--family-texts);margin:0;padding:0}*{box-sizing:border-box;transition:color .25s}a{color:var(--color-link)}h1>a,h2>a,h3>a,h4>a,h5>a{color:var(--color-header);text-decoration:none}pre{border-radius:10px;line-height:1.5em;overflow:scroll;padding:10px;width:100%}:not(pre)>code,pre{background-color:var(--color-code-background)}:not(pre)>code{border-radius:4px;color:var(--color-code-inline);padding:0 5px}h1,h2,h3,h4,h5{color:var(--color-header);font-family:var(--family-headings);font-weight:700}h1{color:var(--color-heading-primary);font-size:2.6rem;margin-bottom:1.5rem}h1:not(:first-child){margin-top:3rem}@media (max-width:560px){h1{font-size:2rem;line-height:2.4rem}}h2{color:var(--color-heading-secondary);font-size:2rem}h2:not(:first-child){margin-top:2rem}h3,h4,h5{color:var(--color-heading-tertiary)}li,p{line-height:1.5em}li img,p img{max-inline-size:100%}li:not(:last-child){margin-bottom:.25em}button{background:none;padding:0}button,button:focus{border:none}table{border:2px solid var(--color-line);border-collapse:collapse}table td,table th{border:1px solid var(--color-line);padding:5px 10px;text-align:left}table thead{background:var(--color-table-head);border-bottom:2px solid var(--color-line)}blockquote{border-left:3px solid var(--color-primary);color:var(--color-text);margin:0 10px;padding:0 20px}blockquote ol,blockquote ul{padding-left:15px}._highlight_1ss95_138{background-color:var(--color-highlight-background);border-radius:3px;color:var(--color-highlight-color);padding:0 1px}:root{--family-headings:"Roboto Slab","Segoe UI",Tahoma,Geneva,Verdana,sans-serif;--family-texts:"Roboto","Segoe UI",Tahoma,Geneva,Verdana,sans-serif;--size-phone:$phone;--size-tablet:$size-tablet;--size-desktop:$size-desktop;--color-primary:#e84a72;--color-primary-contrast:#fff;--color-background:#16161c;--color-menu-background:#1a1c23;--color-line:#2d2f36;--color-menu-overlay-background:rgba(22,22,28,.9);--color-code-background:#1a1c23;--color-code-language-background:#23252f;--color-code-language-name:#1eaeae;--color-text:#fdf0ed;--color-text-secondary:#a3a4a7;--color-link:#e84a72;--color-code-inline:#1eb980;--color-heading-primary:#fff;--color-heading-secondary:#f9cbbe;--color-heading-tertiary:#f9cec3;--color-menu-title:#fadad1;--color-menu-link:#fab28e;--color-menu-link-active:#e84a72;--color-menu-line:#2e303e;--color-table-head:#2f212b;--color-rating-0:#333;--color-rating-1:#ded187;--color-rating-2:#dbde87;--color-rating-3:#bade87;--color-rating-4:#9cde87;--color-rating-5:#87deaa;--color-highlight-color:var(--color-text);--color-highlight-background:#254e50;--top-gradient:linear-gradient(90deg,#a93a58,#58a93a,#3a58a9)}:root._light_1ss95_192{--color-primary:#e84a72;--color-primary-contrast:#fff;--color-background:#fce9e4;--color-menu-background:#fbe2db;--color-line:#d9c5c5;--color-menu-overlay-background:rgba(22,22,28,.9);--color-code-background:#fbe2db;--color-code-language-background:#23252f;--color-code-language-name:#1eaeae;--color-text:#5a5d68;--color-text-secondary:#7b7d86;--color-link:#e84a72;--color-code-inline:#8931b9;--color-heading-primary:#4c5161;--color-heading-secondary:#6bb8b4;--color-heading-tertiary:#6bb8b4;--color-menu-title:#6bb8b4;--color-menu-link:#eb6481;--color-menu-link-active:#e84a72;--color-menu-line:#f9cbbe;--color-table-head:#f8ccc8;--color-rating-0:#cecece;--color-rating-1:#e4b882;--color-rating-2:#e4a882;--color-rating-3:#e49782;--color-rating-4:#e48782;--color-rating-5:#e4828d;--color-highlight-color:var(--color-text);--color-highlight-background:#fab795;--top-gradient:linear-gradient(90deg,#ee7a94,#94ee7a,#7a94ee)}._buttons_1ss95_230{align-items:flex-start;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(180px,auto));justify-content:flex-start}</style><style>._button_15t7y_1{align-items:center;border-radius:8px;color:#fff;display:inline-flex;justify-content:center;text-decoration:none}._button_15t7y_1._variant-primary_15t7y_9{background-color:var(--color-primary)}._button_15t7y_1._variant-outline_15t7y_12{box-shadow:var(--color-text) 0 0 0 1px;color:var(--color-text);overflow:hidden;position:relative;transition:all .25s}._button_15t7y_1._variant-outline_15t7y_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_15t7y_1._variant-outline_15t7y_12:hover{box-shadow:var(--color-background) 0 0 0 1px;color:var(--color-primary-contrast)}._button_15t7y_1._variant-outline_15t7y_12:hover:after{opacity:1;transform:scale(1)}._button_15t7y_1._size-md_15t7y_38{height:40px;padding:0 30px}._button_15t7y_1._size-md_15t7y_38._prefixed_15t7y_42,._button_15t7y_1._size-md_15t7y_38._suffixed_15t7y_42{padding:0 10px 0 20px}._button_15t7y_1._size-md_15t7y_38._suffixed_15t7y_42{padding-right:0 20px 0 10px}._title_15t7y_49{flex:1;position:relative;text-align:center;z-index:1}._size-md_15t7y_38._prefixed_15t7y_42 ._title_15t7y_49{padding-left:10px}._size-md_15t7y_38._suffixed_15t7y_42 ._title_15t7y_49{padding-right:10px}._prefix_15t7y_42,._suffix_15t7y_42{display:inline-flex;position:relative;z-index:2}</style><link rel="stylesheet" href="/nuxt/entry.8e071ff5.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_1qq06_1" hastransition="true"><div class="_header_container_1qq06_8"><div class="_header_content_1qq06_38"><header class="_header_t5iqp_1"><a href="/" class="">Home</a><a aria-current="page" href="/about" class="_active_t5iqp_11 router-link-exact-active">About</a><a href="/contacts" class="">Contacts</a></header></div></div><div class="_wrapper_vom09_1" hastransition="true"><div class="_content_vom09_14"><button class="_theme_toggle_vom09_24 _button_jz7in_1 _theme_toggle_vom09_24"><span></span></button><!--[--><!--[--><article class="_content_1jhz3_1"><section class="_section_1jhz3_17 _heading_1jhz3_20"><div class="_grid_1d3hp_1"><div class="_image_1d3hp_29"><img src="/nuxt/howdy.90a75ece.svg"></div><div class="_text_1d3hp_13"><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 as a job and a hobby. I&#39;m also capable of doing <b>Typescript</b> and <b>Golang</b> backends, services, and integrations. </p><div class="_buttons_1d3hp_42 _buttons_1ss95_230 _buttons_1d3hp_42"><!--[--><a href="/contacts" class="_button_15t7y_1 _variant-primary_15t7y_9 _size-md_15t7y_38 _suffixed_15t7y_42"><!----><span class="_title_15t7y_49"><!--[--> Contact me <!--]--></span><span class="_suffix_15t7y_42"><!--[--><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="M7 34.05Q5.85 33.8 4.925 33 4 32.2 4 31.05V13.9q0-.6.25-1.125t.95-.875l16-7.9 15.35 7.9q.45.35.9 1.025.45.675.6 1.225h-3.7L21.2 7.35 7 14.4ZM11.5 42q-1.2 0-2.1-.925-.9-.925-.9-2.075V18.65q0-1.15.9-2.075.9-.925 2.1-.925H41q1.15 0 2.075.925Q44 17.5 44 18.65V39q0 1.15-.925 2.075Q42.15 42 41 42Zm14.75-12.9L11.5 21.85V39H41V21.85Zm0-3.35 14.45-7.1H11.8ZM41 18.65H11.5 41Z"></path></svg><!--]--></span></a><a href="https://github.com/muerwre" rel="noopener noreferrer" target="_blank" class="_button_15t7y_1 _variant-outline_15t7y_12 _size-md_15t7y_38 _suffixed_15t7y_42"><!----><span class="_title_15t7y_49"><!--[--> Visit my Github <!--]--></span><span class="_suffix_15t7y_42"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 1024 1024" fill="currentColor"><path xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" transform="scale(64)"></path></svg><!--]--></span></a><!--]--></div></div></div></section><section class="_section_1jhz3_17"><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.1aab3d6d.svg" width="48" height="48"><!--]--></div><div class="_text_1kefv_20"><h3 class="_title_1kefv_11">React</h3><div class="_rating_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_1"><!--[--><svg xmlns="http://www.w3.org/2000/svg" height="22" width="22" viewbox="0 0 48 48" class="_star_pb5ie_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_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_10 _filled_pb5ie_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_pb5ie_10 _filled_pb5ie_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_1jhz3_17"><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_15t7y_1 _variant-outline_15t7y_12 _size-md_15t7y_38 _suffixed_15t7y_42" _target="blank"><!----><span class="_title_15t7y_49"><!--[--> Code <!--]--></span><span class="_suffix_15t7y_42"><!--[--><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_15t7y_1 _variant-outline_15t7y_12 _size-md_15t7y_38 _suffixed_15t7y_42" _target="blank"><!----><span class="_title_15t7y_49"><!--[--> Visit <!--]--></span><span class="_suffix_15t7y_42"><!--[--><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_15t7y_1 _variant-outline_15t7y_12 _size-md_15t7y_38 _suffixed_15t7y_42" _target="blank"><!----><span class="_title_15t7y_49"><!--[--> Code <!--]--></span><span class="_suffix_15t7y_42"><!--[--><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_15t7y_1 _variant-outline_15t7y_12 _size-md_15t7y_38 _suffixed_15t7y_42" _target="blank"><!----><span class="_title_15t7y_49"><!--[--> Visit <!--]--></span><span class="_suffix_15t7y_42"><!--[--><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_15t7y_1 _variant-outline_15t7y_12 _size-md_15t7y_38 _suffixed_15t7y_42" _target="blank"><!----><span class="_title_15t7y_49"><!--[--> Code <!--]--></span><span class="_suffix_15t7y_42"><!--[--><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_15t7y_1 _variant-outline_15t7y_12 _size-md_15t7y_38 _suffixed_15t7y_42" _target="blank"><!----><span class="_title_15t7y_49"><!--[--> Visit <!--]--></span><span class="_suffix_15t7y_42"><!--[--><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></article><!--]--><!--]--></div><footer class="_footer_ogxvf_1 _footer_vom09_18 _footer_vom09_18"><div>btw, have a nice day</div><div class="_filler_ogxvf_9"></div><div> (2018 - 2023) <a href="https://github.com/muerwre/" rel="noopener noreferrer" target="_blank">muerwre</a></div></footer></div></div></div><script type="module">import p from "/about/_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:1703827768080},navigation:{fields:[]},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:1703827784914}}(false,"dark",true,"shell","sh","")))}</script><script type="module" src="/nuxt/entry.4ee9a191.js" crossorigin></script><script type="module" src="/nuxt/landing.7155978c.js" crossorigin></script><script type="module" src="/nuxt/LayoutHeader.19a97e65.js" crossorigin></script><script type="module" src="/nuxt/content.b0611f82.js" crossorigin></script><script type="module" src="/nuxt/LayoutThemeToggle.c725bcad.js" crossorigin></script><script type="module" src="/nuxt/about.3d92e8bf.js" crossorigin></script><script type="module" src="/nuxt/BioHeading.5ec474f5.js" crossorigin></script><script type="module" src="/nuxt/UiButtonGroup.393bd539.js" crossorigin></script><script type="module" src="/nuxt/UiActionButton.91db8a82.js" crossorigin></script><script type="module" src="/nuxt/IconsSend.2235267c.js" crossorigin></script><script type="module" src="/nuxt/IconsGithub.902139d3.js" crossorigin></script><script type="module" src="/nuxt/BioSkills.23266a90.js" crossorigin></script><script type="module" src="/nuxt/BioSkillsCard.689bf162.js" crossorigin></script><script type="module" src="/nuxt/UiCard.7884f8b4.js" crossorigin></script><script type="module" src="/nuxt/UiStars.1dbf25c1.js" crossorigin></script><script type="module" src="/nuxt/IconStar.55a52cde.js" crossorigin></script><script type="module" src="/nuxt/BioProjects.6ca9848b.js" crossorigin></script><script type="module" src="/nuxt/BioProjectCard.fb6f0a69.js" crossorigin></script><script type="module" src="/nuxt/IconsCode.2674d4a9.js" crossorigin></script><script type="module" src="/nuxt/ArrowRight.7cd04562.js" crossorigin></script><script type="module" src="/nuxt/LayoutFooter.b77d7334.js" crossorigin></script></body>
</html>