1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="canonical" href="https://v1v2.io/blog-projects" class="jsx-7e3bacb8ad11cb1" data-next-head=""/><title data-next-head="">Blog & Projects | V1V2</title><meta charSet="utf-8"/><link rel="icon" sizes="any" href="/favicon.ico"/><link rel="apple-touch-icon" href="/icon-180.png"/><link rel="icon" type="image/svg+xml" href="/icon.svg"/><link rel="manifest" href="/manifest.json"/><meta name="theme-color" content="#222"/><link rel="preload" href="https://cdn.v1v2.io/_next/static/css/aa94488fb30f8d6e.css" as="style"/><link rel="stylesheet" href="https://cdn.v1v2.io/_next/static/css/aa94488fb30f8d6e.css" data-n-g=""/><noscript data-n-css=""></noscript>
1<script defer="" nomodule="" src="https://cdn.v1v2.io/_next/static/chunks/polyfills-42372ed130431b0a.js"></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/webpack-f1bdc121024fa65b.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/framework-febc38e8e55ff7d4.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/main-65d4e6402d8b9d99.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/pages/_app-7d3f014508d7a15e.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/252f366e-524fe27010f7ba8b.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/0c428ae2-aaa0dc026c400cdf.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/1bfc9850-ea6d6136c7410bec.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/1a48c3c1-9203d0e5b5900771.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/d64684d8-4c669f2b29e9c595.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/8593-16e51e8a79bae6f9.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/1940-da4e26c24db396bf.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/118-352366a20aa37481.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/2503-676faff56c67d306.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/774-ec9bf36e03cee093.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/chunks/pages/blog-projects-df9138275a20adf1.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/f6mMl2Nq29FoYZoze8f5_/_buildManifest.js" defer=""></script>
1<script src="https://cdn.v1v2.io/_next/static/f6mMl2Nq29FoYZoze8f5_/_ssgManifest.js" defer=""></script>
1<style id="__jsx-7e3bacb8ad11cb1">aside>:first-child{margin-top:0}aside>:last-child{margin-bottom:0}</style><style id="__jsx-e3d2254df3ae0ad9">article header>:last-child{margin-bottom:0}article footer>:first-child{margin-top:0}article section>:first-child{margin-top:0}article section>:last-child{margin-bottom:0}</style><style id="__jsx-75b87823bb2211a2">html{overflow-y:scroll}</style></head><body>
1<script id="chakra-script">!(function(){try{var a=function(c){var v="(prefers-color-scheme: dark)",h=window.matchMedia(v).matches?"dark":"light",r=c==="system"?h:c,o=document.documentElement,s=document.body,l="chakra-ui-light",d="chakra-ui-dark",i=r==="dark";return s.classList.add(i?d:l),s.classList.remove(i?l:d),o.style.colorScheme=r,o.dataset.theme=r,r},n=a,m="light",e="chakra-ui-color-mode",t=localStorage.getItem(e);t?a(t):localStorage.setItem(e,a(m))}catch(a){}})();</script>
1<div id="__next"><style data-emotion="css-global 1ytqnbf">:host,:root,[data-theme]{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;
1--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-linkedin-50:#E8F4F9;--chakra-colors-linkedin-100:#CFEDFB;--chakra-colors-linkedin-200:#9BDAF3;--chakra-colors-linkedin-300:#68C7EC;--chakra-colors-linkedin-400:#34B3E4;--chakra-colors-linkedin-500:#00A0DC;--chakra-colors-linkedin-600:#008CC9;--chakra-colors-linkedin-700:#0077B5;--chakra-colors-linkedin-800:#005E93;--chakra-colors-linkedin-900:#004471;--chakra-colors-facebook-50:#E8F4F9;--chakra-colors-facebook-100:#D9DEE9;--chakra-colors-facebook-200:#B7C2DA;--chakra-colors-facebook-300:#6482C0;--chakra-colors-facebook-400:#4267B2;--chakra-colors-facebook-500:#385898;--chakra-colors-facebook-600:#314E89;--chakra-colors-facebook-700:#29487D;--chakra-colors-facebook-800:#223B67;--chakra-colors-facebook-900:#1E355B;--chakra-colors-messenger-50:#D0E6FF;--chakra-colors-messenger-100:#B9DAFF;--chakra-colors-messenger-200:#A2CDFF;--chakra-colors-messenger-300:#7AB8FF;--chakra-colors-messenger-400:#2E90FF;--chakra-colors-messenger-500:#0078FF;--chakra-colors-messenger-600:#0063D1;--chakra-colors-messenger-700:#0052AC;--chakra-colors-messenger-800:#003C7E;--chakra-colors-messenger-900:#002C5C;--chakra-colors-whatsapp-50:#dffeec;--chakra-colors-whatsapp-100:#b9f5d0;--chakra-colors-whatsapp-200:#90edb3;--chakra-colors-whatsapp-300:#65e495;--chakra-colors-whatsapp-400:#3cdd78;--chakra-colors-whatsapp-500:#22c35e;--chakra-colors-whatsapp-600:#179848;--chakra-colors-whatsapp-700:#0c6c33;--chakra-colors-whatsapp-800:#01421c;--chakra-colors-whatsapp-900:#001803;--chakra-colors-twitter-50:#E5F4FD;--chakra-colors-twitter-100:#C8E9FB;--chakra-colors-twitter-200:#A8DCFA;--chakra-colors-twitter-300:#83CDF7;--chakra-colors-twitter-400:#57BBF5;--chakra-colors-twitter-500:#1DA1F2;--chakra-colors-twitter-600:#1A94DA;--chakra-colors-twitter-700:#1681BF;--chakra-colors-twitter-800:#136B9E;--chakra-colors-twitter-900:#0D4D71;--chakra-colors-telegram-50:#E3F2F9;--chakra-colors-telegram-100:#C5E4F3;--chakra-colors-telegram-200:#A2D4EC;--chakra-colors-telegram-300:#7AC1E4;--chakra-colors-telegram-400:#47A9DA;--chakra-colors-telegram-500:#0088CC;--chakra-colors-telegram-600:#007AB8;--chakra-colors-telegram-700:#006BA1;--chakra-colors-telegram-800:#005885;--chakra-colors-telegram-900:#003F5E;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-3xs:0.45rem;--chakra-fontSizes-2xs:0.625rem;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;
1--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0-5:0.125rem;--chakra-space-1-5:0.375rem;--chakra-space-2-5:0.625rem;--chakra-space-3-5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0-5:0.125rem;--chakra-sizes-1-5:0.375rem;--chakra-sizes-2-5:0.625rem;--chakra-sizes-3-5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-prose:60ch;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;
1--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;}.chakra-ui-light :host:not([data-theme]),.chakra-ui-light :root:not([data-theme]),.chakra-ui-light [data-theme]:not([data-theme]),[data-theme=light] :host:not([data-theme]),[data-theme=light] :root:not([data-theme]),[data-theme=light] [data-theme]:not([data-theme]),:host[data-theme=light],:root[data-theme=light],[data-theme][data-theme=light]{--chakra-colors-chakra-body-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-body-bg:var(--chakra-colors-white);--chakra-colors-chakra-border-color:var(--chakra-colors-gray-200);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-100);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-gray-500);}.chakra-ui-dark :host:not([data-theme]),.chakra-ui-dark :root:not([data-theme]),.chakra-ui-dark [data-theme]:not([data-theme]),[data-theme=dark] :host:not([data-theme]),[data-theme=dark] :root:not([data-theme]),[data-theme=dark] [data-theme]:not([data-theme]),:host[data-theme=dark],:root[data-theme=dark],[data-theme][data-theme=dark]{--chakra-colors-chakra-body-text:var(--chakra-colors-whiteAlpha-900);--chakra-colors-chakra-body-bg:var(--chakra-colors-gray-800);--chakra-colors-chakra-border-color:var(--chakra-colors-whiteAlpha-300);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-700);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-whiteAlpha-400);}</style><style data-emotion="css-global 3kbdol">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;font-feature-settings:'kern';}*,*::before,*::after{border-width:0;border-style:solid;box-sizing:border-box;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bold;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible;}button,select{text-transform:none;}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none!important;}input[type="number"]{-moz-appearance:textfield;}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none!important;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none!important;}body,blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}ol,ul{margin:0;padding:0;}textarea{resize:vertical;}button,[role="button"]{cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit;}img,svg,video,canvas,audio,iframe,embed,object{display:block;}img,video{max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]):not
1([data-focus-visible-disabled]){outline:none;box-shadow:none;}select::-ms-expand{display:none;}:root{--chakra-vh:100vh;}@supports (height: -webkit-fill-available){:root{--chakra-vh:-webkit-fill-available;}}@supports (height: -moz-fill-available){:root{--chakra-vh:-moz-fill-available;}}@supports (height: 100dvh){:root{--chakra-vh:100dvh;}}</style><style data-emotion="css-global rhudb1">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-gray-800);background:#fff;transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::-moz-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*:-ms-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*,*::before,::after{border-color:var(--chakra-colors-chakra-border-color);word-wrap:break-word;}html{-webkit-tap-highlight-color:transparent;}.js-focus-visible :focus:not(.focus-visible),.js-focus-visible :focus:not(.focus-visible)+[data-focus]{outline:2px solid transparent;outline-offset:2px;box-shadow:var(--chakra-shadows-none);}aside{background:var(--chakra-colors-gray-100);border-radius:5px;margin-top:var(--chakra-space-5);margin-bottom:var(--chakra-space-5);-webkit-padding-start:var(--chakra-space-6);padding-inline-start:var(--chakra-space-6);-webkit-padding-end:var(--chakra-space-6);padding-inline-end:var(--chakra-space-6);padding-top:var(--chakra-space-4);padding-bottom:var(--chakra-space-4);}html[data-theme=dark] aside{background-color:var(--chakra-colors-whiteAlpha-100);}@media screen and (min-width: 30em){aside{margin-top:var(--chakra-space-7);margin-bottom:var(--chakra-space-7);}}p{margin-top:var(--chakra-space-5);margin-bottom:var(--chakra-space-5);}@media screen and (min-width: 30em){p{margin-top:var(--chakra-space-7);margin-bottom:var(--chakra-space-7);}}blockquote{margin-top:var(--chakra-space-5);margin-bottom:var(--chakra-space-5);padding-left:var(--chakra-space-4);font-style:italic;border-left-width:4px;border-left-style:solid;border-left-color:var(--chakra-colors-gray-200);color:var(--chakra-colors-gray-600);}@media screen and (min-width: 30em){blockquote{margin-top:var(--chakra-space-7);margin-bottom:var(--chakra-space-7);}}html[data-theme=dark] blockquote{color:var(--chakra-colors-whiteAlpha-700);border-left-color:var(--chakra-colors-whiteAlpha-500);}#nprogress .bar{background:var(--chakra-colors-black);}#nprogress .peg{box-shadow:0 0 10px black,0 0 5px black;}html[data-theme=dark] #nprogress .bar{background:var(--chakra-colors-white);}html[data-theme=dark] #nprogress .peg{box-shadow:0 0 10px white,0 0 5px white;}select{cursor:pointer;}html[data-theme=dark] .chakra-modal__content{background:#222;}html[data-theme=dark] .tool-icon-dark{fill:#e3e3e3;}html[data-theme=light] .body-color{fill:var(--chakra-colors-gray-800);}html[data-theme=dark] .body-color{fill:var(--chakra-colors-gray-100);}html[data-theme=light] .body-color--thick{fill:#333;}html[data-theme=dark] .body-color--thick{fill:var(--chakra-colors-gray-200);}.header{background:#fff;}html[data-theme=dark] .header{background:#222;}html[data-theme=light] .active-nav{background:var(--chakra-colors-gray-100);}html[data-theme=dark] .active-nav{background:#333;}pre::-webkit-scrollbar{height:14px;}pre::-webkit-scrollbar-thumb{background:#807783;border-radius:999px;border:4px solid #2d2a2e;}pre::-webkit-scrollbar-thumb:hover{background:#9e97a1;}</style><style data-emotion="css jzoxp1">.css-jzoxp1{box-shadow:var(--chakra-shadows-md);padding-top:var(--chakra-space-2);padding-bottom:var(--chakra-space-2);position:fixed;top:0px;width:var(--chakra-sizes-full);z-index:10;margin-bottom:var(--chakra-space-5);}@media print{.css-jzoxp1{display:none;}}</style><div class="header css-jzoxp1"><style data-emotion="css 14vcoqp">.css-14vcoqp{width:100%;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);max-width:var(--chakra-sizes-container-lg);}</style><div class="chakra-container css-14vcoqp"><style data-emotion="css 1lekzkb">.css-1lekzkb{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;
1-webkit-justify-content:space-between;justify-content:space-between;}</style><div class="css-1lekzkb"><style data-emotion="css vzd9e0">.css-vzd9e0{transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-fast);transition-timing-function:var(--chakra-transition-easing-ease-out);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline;outline:2px solid transparent;outline-offset:2px;color:inherit;margin-right:var(--chakra-space-2);}.css-vzd9e0:hover,.css-vzd9e0[data-hover]{-webkit-text-decoration:underline;text-decoration:underline;}.css-vzd9e0:focus-visible,.css-vzd9e0[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}</style><a class="chakra-link css-vzd9e0" href="/"><style data-emotion="css 1j6e1us">@media screen and (max-width: 310px){.css-1j6e1us{width:26px;overflow-x:hidden;}}</style><div class="css-1j6e1us"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 647 141" class="body-color" width="110px"><title>V1V2</title><path d="M.2 44.9v33.5L76.5 34l76.3 44.4V44.9L76.5.6Z"></path><path d="M.2 107.5V141l76.3-44.3 76.3 44.3v-33.5L76.5 63.2ZM647 67V32.5c0-.6 0-1.3-.2-2l-.5-2-.5-1q-1-2.6-2.6-4.9a19.1 19.1 0 0 0-4-4q-2.1-1.4-4.2-1.4h-91.4l-1.3 2.1V38l1.4 2.3h76.7V59h-66.1a7 7 0 0 0-3.3.8l-1.1.8a16.8 16.8 0 0 0-3.8 3.8q-1.7 2.3-2.7 5-1.1 2.8-1.1 5v34.4l.3 2.5.7 2.4q1.1 2.7 2.8 5c.9 1.2 1.9 2.3 3 3.3l.8.6q2.1 1.5 4.4 1.5h91.2l1.5-2.3v-18.6l-1.6-2.3h-76.6V82.3H635c.9 0 1.8-.1 2.6-.5l1.6-1.1q2.2-1.5 4-4 1.7-2.3 2.6-5c.4-.6.6-1.2.9-2ZM201.7 24.8l52 99.4h24L330 24.8l.3-.5.2-.9.1-1.1v-3.8l-.1-.8-1-.5h-26.6l-36.6 74.4-.6.1-37-74.5h-27c-.3 0-.4.2-.5.5l-.2 1.5v4.2l.2.4Zm197.7 0 52.1 99.4h24l52.2-99.4.4-.5.1-.9.2-1.1v-3.8l-.3-.8q0-.4-.8-.5h-26.6l-36.6 74.4-.7.1-37-74.5h-27c-.2 0-.4.2-.5.5l-.1 1.5v4.2l.1.4Zm-16.1-7.6 1.4 2.1V122l-1.4 2.3h-22.8l-2.3-2.5V40.3H346l-1.5-1.8V18.8l1.5-1.6Z"></path></svg></div></a><style data-emotion="css q30igl">.css-q30igl{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}.css-q30igl>*:not(style)~*:not(style){margin-top:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-bottom:0px;-webkit-margin-start:var(--chakra-space-0-5);margin-inline-start:var(--chakra-space-0-5);}@media screen and (max-width: 730px){.css-q30igl{display:none;}}</style><div class="chakra-stack css-q30igl"><style data-emotion="css 14y8b9d">.css-14y8b9d:hover svg,.css-14y8b9d[data-hover] svg{color:#2ea0ff;}</style><div class="css-14y8b9d"><style data-emotion="css 1x4o3bv">.css-1x4o3bv{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;white-space:nowrap;vertical-align:middle;outline:2px solid transparent;outline-offset:2px;line-height:1.2;border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-semibold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);height:var(--chakra-sizes-10);min-width:var(--chakra-sizes-10);font-size:var(--chakra-fontSizes-md);-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);color:inherit;}.css-1x4o3bv:focus-visible,.css-1x4o3bv[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-1x4o3bv:disabled,.css-1x4o3bv[disabled],.css-1x4o3bv[aria-disabled=true],.css-1x4o3bv[data-disabled]{opacity:0.4;cursor:not-allowed;box-shadow:var(--chakra-shadows-none);}.css-1x4o3bv:hover,.css-1x4o3bv[data-hover]{background:var(--chakra-colors-gray-100);}.css-1x4o3bv:hover:disabled,.css-1x4o3bv[data-hover]:disabled,.css-1x4o3bv:hover[disabled],.css-1x4o3bv[data-hover][disabled],.css-1x4o3bv:hover[aria-disabled=true],.css-1x4o3bv[data-hover][aria-disabled=true],.css-1x4o3bv:hover[data-disabled],.css-1x4o3bv[data-hover][data-disabled]{background:initial;}.css-1x4o3bv:active,.css-1x4o3bv[data-active]{background:var(--chakra-colors-gray-200);}</style><a class="chakra-button active-nav css-1x4o3bv" href="/blog-projects"><style data-emotion="css 7t9p3t">.css-7t9p3t{width:var(--chakra-sizes-3-5);height:var(--chakra-sizes-3-5);display:inline-block;line-height:1em;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:#2ea0ff;margin-right:var(--chakra-space-2);transition-property:color;transition-duration:var(--chakra-transition-duration-normal);}@media screen and (max-width: 830px){.css-7t9p3t{display:none;}}</style><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-7t9p3t" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z"></path></svg>Blog & Projects</a></div><style data-emotion="css 134v6db">.css-134v6db:hover svg,.css-134v6db[data-hover] svg{color:#df7400;}</style><div class="css-134v6db"><a class="chakra-button css-1x4o3bv" href="/resume"><style data-emotion="css 16ls1n7">.css-16ls1n7{width:var(--chakra-sizes-3-5);height:var(--chakra-sizes-3-5);display:inline-block;line-height:1em;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:var(--chakra-space-2);transition-property:color;transition-duration:var(--chakra-transition-duration-normal);}@media screen and (max-width: 830px){.css-16ls1n7{display:none;}}</style><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" focusable="false" class="chakra-icon css-16ls1n7" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 1A1.5 1.5 0 0 0 5 2.5V3H1.5A1.5 1.5 0 0 0 0 4.5v1.384l7.614 2.03a1.5 1.5 0 0 0 .772 0L16 5.884V4.5A1.5 1.5 0 0 0 14.5 3H11v-.5A1.5 1.5 0 0 0 9.5 1h-3zm0 1h3a.5.5 0 0 1 .5.5V3H6v-.5a.5.5 0 0 1 .5-.5z"></path><path d="M0 12.5A1.5 1.5 0 0 0 1.5 14h13a1.5 1.5 0 0 0 1.5-1.5V6.85L8.129 8.947a.5.5 0 0 1-.258 0L0 6.85v5.65z"></path></svg>Resume</a></div></div><style data-emotion="css 84zodg">.css-84zodg{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}.css-84zodg>*:not(style)~*:not(style){margin-top:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-bottom:0px;-webkit-margin-start:0.5rem;margin-inline-start:0.5rem;}</style><div class="chakra-stack css-84zodg"><style data-emotion="css g5hwou">.css-g5hwou{transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-fast);transition-timing-function:var(--chakra-transition-easing-ease-out);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline;outline:2px solid transparent;outline-offset:2px;color:inherit;}.css-g5hwou:hover,.css-g5hwou[data-hover]{-webkit-text-decoration:underline;text-decoration:underline;}.css-g5hwou:focus-visible,.css-g5hwou[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}@media screen and (max-width: 230px){.css-g5hwou{display:none;}}</style><a target="_blank" rel="noopener" class="chakra-link css-g5hwou" href="https://x.com/verekia"><style data-emotion="css 13zvu4r">.css-13zvu4r{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
1-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;white-space:nowrap;vertical-align:middle;outline:2px solid transparent;outline-offset:2px;line-height:1.2;border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-semibold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);height:var(--chakra-sizes-10);min-width:var(--chakra-sizes-10);font-size:var(--chakra-fontSizes-md);-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);color:inherit;padding:0px;}.css-13zvu4r:focus-visible,.css-13zvu4r[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-13zvu4r:disabled,.css-13zvu4r[disabled],.css-13zvu4r[aria-disabled=true],.css-13zvu4r[data-disabled]{opacity:0.4;cursor:not-allowed;box-shadow:var(--chakra-shadows-none);}.css-13zvu4r:hover,.css-13zvu4r[data-hover]{background:var(--chakra-colors-gray-100);}.css-13zvu4r:hover:disabled,.css-13zvu4r[data-hover]:disabled,.css-13zvu4r:hover[disabled],.css-13zvu4r[data-hover][disabled],.css-13zvu4r:hover[aria-disabled=true],.css-13zvu4r[data-hover][aria-disabled=true],.css-13zvu4r:hover[data-disabled],.css-13zvu4r[data-hover][data-disabled]{background:initial;}.css-13zvu4r:active,.css-13zvu4r[data-active]{background:var(--chakra-colors-gray-200);}</style><button type="button" class="chakra-button css-13zvu4r" aria-label="GitHub logo" tabindex="-1"><style data-emotion="css 6ey7w3">.css-6ey7w3{width:var(--chakra-sizes-6);height:var(--chakra-sizes-6);display:inline-block;line-height:1em;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:currentColor;}</style><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3" fill-opacity="0.9" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></button></a><style data-emotion="css 1xohrvt">.css-1xohrvt{transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-fast);transition-timing-function:var(--chakra-transition-easing-ease-out);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline;outline:2px solid transparent;outline-offset:2px;color:inherit;}.css-1xohrvt:hover,.css-1xohrvt[data-hover]{-webkit-text-decoration:underline;text-decoration:underline;}.css-1xohrvt:focus-visible,.css-1xohrvt[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}@media screen and (max-width: 356px){.css-1xohrvt{display:none;}}</style><a target="_blank" rel="noopener" class="chakra-link css-1xohrvt" href="https://github.com/verekia"><button type="button" class="chakra-button css-13zvu4r" aria-label="GitHub logo" tabindex="-1"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" focusable="false" class="chakra-icon css-6ey7w3" fill-opacity="0.9" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></button></a><button type="button" class="chakra-button css-13zvu4r" aria-label="Dark mode"><style data-emotion="css i1hv63">.css-i1hv63{width:var(--chakra-sizes-5);height:var(--chakra-sizes-5);
1display:inline-block;line-height:1em;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:currentColor;}</style><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" focusable="false" class="chakra-icon css-i1hv63" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M20.742 13.045a8.088 8.088 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.025 8.025 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10.014 10.014 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.937 9.937 0 0 0 7.072 2.93 9.93 9.93 0 0 0 7.07-2.929 10.007 10.007 0 0 0 2.583-4.491 1.001 1.001 0 0 0-1.224-1.224zm-2.772 4.301a7.947 7.947 0 0 1-5.656 2.343 7.953 7.953 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a7.923 7.923 0 0 1 2.06-1.483 10.027 10.027 0 0 0 2.89 7.848 9.972 9.972 0 0 0 7.848 2.891 8.036 8.036 0 0 1-1.484 2.059z"></path></svg></button><style data-emotion="css q4or0n">.css-q4or0n{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;white-space:nowrap;vertical-align:middle;outline:2px solid transparent;outline-offset:2px;line-height:1.2;border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-semibold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);height:var(--chakra-sizes-10);min-width:var(--chakra-sizes-10);font-size:var(--chakra-fontSizes-md);-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);color:inherit;padding:0px;}.css-q4or0n:focus-visible,.css-q4or0n[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-q4or0n:disabled,.css-q4or0n[disabled],.css-q4or0n[aria-disabled=true],.css-q4or0n[data-disabled]{opacity:0.4;cursor:not-allowed;box-shadow:var(--chakra-shadows-none);}.css-q4or0n:hover,.css-q4or0n[data-hover]{background:var(--chakra-colors-gray-100);}.css-q4or0n:hover:disabled,.css-q4or0n[data-hover]:disabled,.css-q4or0n:hover[disabled],.css-q4or0n[data-hover][disabled],.css-q4or0n:hover[aria-disabled=true],.css-q4or0n[data-hover][aria-disabled=true],.css-q4or0n:hover[data-disabled],.css-q4or0n[data-hover][data-disabled]{background:initial;}.css-q4or0n:active,.css-q4or0n[data-active]{background:var(--chakra-colors-gray-200);}@media screen and (min-width: 731px){.css-q4or0n{display:none;}}</style><button type="button" class="chakra-button css-q4or0n" aria-label="Menu"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" focusable="false" class="chakra-icon css-6ey7w3" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"></path></svg></button></div></div></div></div><style data-emotion="css 1woelp6">.css-1woelp6{height:var(--chakra-sizes-14);}@media print{.css-1woelp6{display:none;}}</style><div class="css-1woelp6"></div><style data-emotion="css u914cs">.css-u914cs{width:100%;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);max-width:730px;padding-bottom:200px;font-size:1rem;line-height:26px;}@media screen and (min-width: 30em){.css-u914cs{font-size:1.125rem;line-height:29px;}}.css-u914cs h1{font-weight:600;}.css-u914cs h2{text-align:center;font-size:24px;margin-top:var(--chakra-space-12);margin-bottom:var(--chakra-space-6);font-weight:600;}.css-u914cs h3{font-size:18px;margin-top:var(--chakra-space-10);margin-bottom:var(--chakra-space-4);font-weight:600;}.css-u914cs h4{font-size:16px;margin-top:var(--chakra-space-6);margin-bottom:var(--chakra-space-4);}.css-u914cs ul,.css-u914cs ol{margin-top:var(--chakra-space-5);margin-bottom:var(--chakra-space-5);margin-left:var(--chakra-space-7);}@media screen and (min-width: 30em){.css-u914cs ul,.css-u914cs ol{margin-top:var(--chakra-space-7);margin-bottom:var(--chakra-space-7);}}.css-u914cs ul>ul,.css-u914cs ol>ol{margin-top:var(--chakra-space-1);margin-bottom:var(--chakra-space-1);margin-left:var(--chakra-space-5);}.css-u914cs ul li,.css-u914cs ol li{padding-left:var(--chakra-space-1);}.css-u914cs p+ul{margin-top:var(--chakra-space-3);}.css-u914cs ul+p{margin-top:var(--chakra-space-3);}.css-u914cs p,.css-u914cs ul{font-weight:400;}@media screen and (min-width: 30em){.css-u914cs p,.css-u914cs ul{font-weight:400;}}.css-u914cs b,.css-u914cs strong{font-weight:700;}@media screen and (min-width: 30em){.css-u914cs b,.css-u914cs strong{font-weight:500;}}.css-u914cs .chakra-wrap__list{margin:0px;}.css-u914cs .chakra-wrap__listitem{padding-left:0px;}.css-u914cs >header{margin-bottom:var(--chakra-space-10);}@media screen and (min-width: 30em){.css-u914cs >header{margin-bottom:var(--chakra-space-12);}}.css-u914cs >footer{margin-top:var(--chakra-space-10);}@media screen and (min-width: 30em){.css-u914cs >footer{margin-top:var(--chakra-space-12);}}.css-u914cs >section{margin-top:var(--chakra-space-10);margin-bottom:var(--chakra-space-10);}@media screen and (min-width: 30em){.css-u914cs >section{margin-top:var(--chakra-space-12);margin-bottom:var(--chakra-space-12);}}.css-u914cs >section>section{margin-top:var(--chakra-space-5);margin-bottom:var(--chakra-space-5);}@media screen and (min-width: 30em){.css-u914cs >section>section{margin-top:var(--chakra-space-7);margin-bottom:var(--chakra-space-7);}}.css-u914cs >section>section>section{margin-top:var(--chakra-space-5);margin-bottom:var(--chakra-space-5);}@media screen and (min-width: 30em){.css-u914cs >section>section>section{margin-top:var(--chakra-space-7);margin-bottom:var(--chakra-space-7);}}.css-u914cs .deprecation-warning{background:var(--chakra-colors-orange-100);}html[data-theme=dark] .css-u914cs .deprecation-warning{background:#735016;}@media print{.css-u914cs{margin-bottom:0px;}}</style><article class="chakra-container css-u914cs"><style data-emotion="css 1qweys2">.css-1qweys2{font-family:var(--chakra-fonts-heading);font-weight:var(--chakra-fontWeights-bold);line-height:1.33;text-align:center;font-size:var(--chakra-fontSizes-3xl);margin-top:var(--chakra-space-8);margin-bottom:var(--chakra-space-8);}@media screen and (min-width: 48em){.css-1qweys2{line-height:1.2;}}</style><h1 class="chakra-heading css-1qweys2"><style data-emotion="css 1muveo0">@media screen and (min-width: 830px){.css-1muveo0{display:none;}}</style><span class="css-1muveo0"><style data-emotion="css z1ypbw">.css-z1ypbw{width:var(--chakra-sizes-7);height:var(--chakra-sizes-7);display:inline-block;line-height:1em;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:currentColor;vertical-align:middle;margin-right:var(--chakra-space-3);position:relative;top:-2px;}</style><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-z1ypbw" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z"></path></svg></span>Blog & Projects</h1><style data-emotion="css kbguv5">.css-kbguv5{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}.css-kbguv5>*:not(style)~*:not(style){margin-top:var(--chakra-space-7);-webkit-margin-end:0px;margin-inline-end:0px;margin-bottom:0px;
1-webkit-margin-start:0px;margin-inline-start:0px;}</style><div class="chakra-stack css-kbguv5"><style data-emotion="css b92dn7">.css-b92dn7{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:145px;padding:var(--chakra-space-5);border-width:1px;border-radius:var(--chakra-radii-md);cursor:pointer;-webkit-transition:0.15s ease-in-out;transition:0.15s ease-in-out;}@media screen and (min-width: 30em){.css-b92dn7{min-height:148px;}}.css-b92dn7:hover,.css-b92dn7[data-hover]{box-shadow:var(--chakra-shadows-md);}.css-b92dn7 h3{margin-top:0px;}</style><article class="css-b92dn7"><style data-emotion="css 98eg9c">.css-98eg9c{font-family:var(--chakra-fonts-heading);font-weight:var(--chakra-fontWeights-bold);font-size:var(--chakra-fontSizes-xl);line-height:1.2;margin-top:0px;margin-bottom:var(--chakra-space-3);}</style><h3 class="chakra-heading css-98eg9c"><style data-emotion="css gdptt9">.css-gdptt9{transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-fast);transition-timing-function:var(--chakra-transition-easing-ease-out);cursor:pointer;-webkit-text-decoration:none!important;text-decoration:none!important;outline:2px solid transparent;outline-offset:2px;color:inherit;}.css-gdptt9:focus-visible,.css-gdptt9[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-gdptt9:hover,.css-gdptt9[data-hover]{-webkit-text-decoration:none;text-decoration:none;}</style><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://manablade.com">Mana Blade<style data-emotion="css k3ag4y">.css-k3ag4y{width:1em;height:1em;display:inline-block;line-height:1em;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:currentColor;vertical-align:middle;margin-left:var(--chakra-space-2);position:relative;top:-1px;}</style><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><style data-emotion="css 1lvdfxf">.css-1lvdfxf{margin-top:var(--chakra-space-3);margin-bottom:var(--chakra-space-4);}</style><p class="chakra-text css-1lvdfxf"><style data-emotion="css t0z19i">.css-t0z19i{margin-right:var(--chakra-space-1-5);color:var(--chakra-colors-gray-500);}@media screen and (min-width: 381px){.css-t0z19i{display:none;}}</style><span class="css-t0z19i">2025<!-- --> â¢</span>A 3D MMORPG built with React Three Fiber, Three.js, WebGPU, and Bun.</p><style data-emotion="css sj4rx6">.css-sj4rx6{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-height:24px;}</style><div class="css-sj4rx6"><style data-emotion="css i6bazn">.css-i6bazn{overflow:hidden;}</style><div class="chakra-wrap css-i6bazn"><style data-emotion="css x2hviy">.css-x2hviy{--chakra-wrap-x-spacing:var(--chakra-space-3);--chakra-wrap-y-spacing:0.5rem;--wrap-x-spacing:calc(var(--chakra-wrap-x-spacing) / 2);--wrap-y-spacing:calc(var(--chakra-wrap-y-spacing) / 2);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;padding:0px;margin:calc(var(--wrap-y-spacing) * -1) calc(var(--wrap-x-spacing) * -1);}.css-x2hviy>*:not(style){margin:var(--wrap-y-spacing) var(--wrap-x-spacing);}</style><ul class="chakra-wrap__list css-x2hviy"><style data-emotion="css 1yp4ln">.css-1yp4ln{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}</style><li class="chakra-wrap__listitem css-1yp4ln"><style data-emotion="css 1ilwx1p">.css-1ilwx1p{line-height:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}</style><div class="css-1ilwx1p"><style data-emotion="css 6ey7w3">.css-6ey7w3{width:var(--chakra-sizes-6);height:var(--chakra-sizes-6);display:inline-block;line-height:1em;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:currentColor;}</style><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4
110 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="m119.6 0-3.9.4a128.3 128.3 0 0 0 0 255.3c4 .4 20.7.4 24.6 0 17.2-2 31.7-6.2 46-13.5 2.3-1.1 2.7-1.4 2.4-1.7-.2-.1-9.6-12.7-20.8-28L147.4 185l-25.7-38A3646 3646 0 0 0 96 109s-.2 16.9-.2 37.5c-.1 36-.1 37.5-.6 38.3a4.5 4.5 0 0 1-2.2 2.3c-.8.4-1.5.5-5.3.5h-4.3l-1.1-.8a4.7 4.7 0 0 1-1.7-1.8l-.6-1V83.5l.9-1c.4-.5 1.2-1.1 1.8-1.5 1-.5 1.4-.5 5.8-.5 5 0 6 .2 7.2 1.6.4.4 14.3 21.4 31 46.6L177 205l20.3 30.7 1-.6a127.4 127.4 0 0 0 56.4-125.8A128.5 128.5 0 0 0 140.6.4c-2.4-.3-19-.5-21-.3zM172 77.6a5 5 0 0 1 2.5 3c.2.6.3 14.5.2 45.8v45l-8-12.1-8-12.2v-32.7c0-21.1.2-33 .3-33.6a5.1 5.1 0 0 1 2.5-3.1c1-.6 1.4-.6 5.3-.6 3.7 0 4.4 0 5.2.5z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="#fff" stroke-linecap="square" stroke-miterlimit="10" viewBox="0 0 226.77 226.77" xmlns="http://www.w3.org/2000/svg" focusable="false" class="chakra-icon css-6ey7w3"><g fill-rule="evenodd" stroke="#000" stroke-linecap="butt" stroke-linejoin="round" stroke-width="4"><path d="M71.984 204.863 28.771 29.923l173.23 49.874z"></path><path d="m115.354 54.865 21.591 87.496-86.567-24.945z"></path><path d="M93.874 129.283 83.15 85.818l43.008 12.346zM72.422 42.406 83.146 85.87 40.138 73.525zM158.434 67.183l10.724 43.465-43.008-12.346zM93.879 129.313l10.724 43.465-43.008-12.346z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-100 -100 1000 1000" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path fill="inherit" d="M280 560h240v240H280zM280 280h240v240H280zM0 280h240v240H0z"></path><path fill="inherit" fill-rule="evenodd" d="M560 0H280v240h280v280h240V0H560Z" clip-rule="evenodd"></path></svg></div></li></ul></div><style data-emotion="css 17xejub">.css-17xejub{-webkit-flex:1;-ms-flex:1;flex:1;justify-self:stretch;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;}</style><div class="css-17xejub"></div><style data-emotion="css iylejo">.css-iylejo{position:relative;top:3px;color:var(--chakra-colors-gray-500);}@media screen and (max-width: 380px){.css-iylejo{display:none;}}</style><div class="css-iylejo">2025</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://www.webgamedev.com/blog/minimana-tech-stack">The Tech Stack of Mini Mana<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2024<!-- --> â¢</span>A deep dive into the tech stack of my multiplayer RPG, Mini Mana.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4
110 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="m119.6 0-3.9.4a128.3 128.3 0 0 0 0 255.3c4 .4 20.7.4 24.6 0 17.2-2 31.7-6.2 46-13.5 2.3-1.1 2.7-1.4 2.4-1.7-.2-.1-9.6-12.7-20.8-28L147.4 185l-25.7-38A3646 3646 0 0 0 96 109s-.2 16.9-.2 37.5c-.1 36-.1 37.5-.6 38.3a4.5 4.5 0 0 1-2.2 2.3c-.8.4-1.5.5-5.3.5h-4.3l-1.1-.8a4.7 4.7 0 0 1-1.7-1.8l-.6-1V83.5l.9-1c.4-.5 1.2-1.1 1.8-1.5 1-.5 1.4-.5 5.8-.5 5 0 6 .2 7.2 1.6.4.4 14.3 21.4 31 46.6L177 205l20.3 30.7 1-.6a127.4 127.4 0 0 0 56.4-125.8A128.5 128.5 0 0 0 140.6.4c-2.4-.3-19-.5-21-.3zM172 77.6a5 5 0 0 1 2.5 3c.2.6.3 14.5.2 45.8v45l-8-12.1-8-12.2v-32.7c0-21.1.2-33 .3-33.6a5.1 5.1 0 0 1 2.5-3.1c1-.6 1.4-.6 5.3-.6 3.7 0 4.4 0 5.2.5z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="#fff" stroke-linecap="square" stroke-miterlimit="10" viewBox="0 0 226.77 226.77" xmlns="http://www.w3.org/2000/svg" focusable="false" class="chakra-icon css-6ey7w3"><g fill-rule="evenodd" stroke="#000" stroke-linecap="butt" stroke-linejoin="round" stroke-width="4"><path d="M71.984 204.863 28.771 29.923l173.23 49.874z"></path><path d="m115.354 54.865 21.591 87.496-86.567-24.945z"></path><path d="M93.874 129.283 83.15 85.818l43.008 12.346zM72.422 42.406 83.146 85.87 40.138 73.525zM158.434 67.183l10.724 43.465-43.008-12.346zM93.879 129.313l10.724 43.465-43.008-12.346z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-100 -100 1000 1000" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path fill="inherit" d="M280 560h240v240H280zM280 280h240v240H280zM0 280h240v240H0z"></path><path fill="inherit" fill-rule="evenodd" d="M560 0H280v240h280v280h240V0H560Z" clip-rule="evenodd"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2024</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://polydraw.v1v2.io">PolyDraw<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2023<!-- --> â¢</span>I made PolyDraw, a small app to draw and organize polygons.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4
110 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="m119.6 0-3.9.4a128.3 128.3 0 0 0 0 255.3c4 .4 20.7.4 24.6 0 17.2-2 31.7-6.2 46-13.5 2.3-1.1 2.7-1.4 2.4-1.7-.2-.1-9.6-12.7-20.8-28L147.4 185l-25.7-38A3646 3646 0 0 0 96 109s-.2 16.9-.2 37.5c-.1 36-.1 37.5-.6 38.3a4.5 4.5 0 0 1-2.2 2.3c-.8.4-1.5.5-5.3.5h-4.3l-1.1-.8a4.7 4.7 0 0 1-1.7-1.8l-.6-1V83.5l.9-1c.4-.5 1.2-1.1 1.8-1.5 1-.5 1.4-.5 5.8-.5 5 0 6 .2 7.2 1.6.4.4 14.3 21.4 31 46.6L177 205l20.3 30.7 1-.6a127.4 127.4 0 0 0 56.4-125.8A128.5 128.5 0 0 0 140.6.4c-2.4-.3-19-.5-21-.3zM172 77.6a5 5 0 0 1 2.5 3c.2.6.3 14.5.2 45.8v45l-8-12.1-8-12.2v-32.7c0-21.1.2-33 .3-33.6a5.1 5.1 0 0 1 2.5-3.1c1-.6 1.4-.6 5.3-.6 3.7 0 4.4 0 5.2.5z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 582 582" focusable="false" class="chakra-icon css-6ey7w3"><rect width="582" height="582" rx="291" fill="url(#chakra-ui_svg__a)"></rect>
1<path d="m157.5 303.4 198.4-197c3.7-3.7 9.7.8 7.1 5.4l-73.8 135.3c-1.6 3 .6 6.7 4 6.7h127.6c4 0 6 5 3 7.9L200.4 470.3c-4 3.8-10-1.5-6.8-6l105.9-146c2.1-3 0-7.1-3.7-7.1h-135c-4 0-6-5-3.2-7.8z" fill="#fff"></path><defs><linearGradient id="chakra-ui_svg__a" x1="291" y1="0" x2="291" y2="582" gradientUnits="userSpaceOnUse"><stop stop-color="#7BCBD4"></stop><stop offset="1" stop-color="#29C6B7"></stop></linearGradient></defs></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2023</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://minimana.v1v2.io">Mini Mana<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2023<!-- --> â¢</span>I launched Mini Mana, a multiplayer RPG built with React Three Fiber.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.
11-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="m119.6 0-3.9.4a128.3 128.3 0 0 0 0 255.3c4 .4 20.7.4 24.6 0 17.2-2 31.7-6.2 46-13.5 2.3-1.1 2.7-1.4 2.4-1.7-.2-.1-9.6-12.7-20.8-28L147.4 185l-25.7-38A3646 3646 0 0 0 96 109s-.2 16.9-.2 37.5c-.1 36-.1 37.5-.6 38.3a4.5 4.5 0 0 1-2.2 2.3c-.8.4-1.5.5-5.3.5h-4.3l-1.1-.8a4.7 4.7 0 0 1-1.7-1.8l-.6-1V83.5l.9-1c.4-.5 1.2-1.1 1.8-1.5 1-.5 1.4-.5 5.8-.5 5 0 6 .2 7.2 1.6.4.4 14.3 21.4 31 46.6L177 205l20.3 30.7 1-.6a127.4 127.4 0 0 0 56.4-125.8A128.5 128.5 0 0 0 140.6.4c-2.4-.3-19-.5-21-.3zM172 77.6a5 5 0 0 1 2.5 3c.2.6.3 14.5.2 45.8v45l-8-12.1-8-12.2v-32.7c0-21.1.2-33 .3-33.6a5.1 5.1 0 0 1 2.5-3.1c1-.6 1.4-.6 5.3-.6 3.7 0 4.4 0 5.2.5z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 582 582" focusable="false" class="chakra-icon css-6ey7w3"><rect width="582" height="582" rx="291" fill="url(#chakra-ui_svg__a)"></rect>
1<path d="m157.5 303.4 198.4-197c3.7-3.7 9.7.8 7.1 5.4l-73.8 135.3c-1.6 3 .6 6.7 4 6.7h127.6c4 0 6 5 3 7.9L200.4 470.3c-4 3.8-10-1.5-6.8-6l105.9-146c2.1-3 0-7.1-3.7-7.1h-135c-4 0-6-5-3.2-7.8z" fill="#fff"></path><defs><linearGradient id="chakra-ui_svg__a" x1="291" y1="0" x2="291" y2="582" gradientUnits="userSpaceOnUse"><stop stop-color="#7BCBD4"></stop><stop offset="1" stop-color="#29C6B7"></stop></linearGradient></defs></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="#fff" stroke-linecap="square" stroke-miterlimit="10" viewBox="0 0 226.77 226.77" xmlns="http://www.w3.org/2000/svg" focusable="false" class="chakra-icon css-6ey7w3"><g fill-rule="evenodd" stroke="#000" stroke-linecap="butt" stroke-linejoin="round" stroke-width="4"><path d="M71.984 204.863 28.771 29.923l173.23 49.874z"></path><path d="m115.354 54.865 21.591 87.496-86.567-24.945z"></path><path d="M93.874 129.283 83.15 85.818l43.008 12.346zM72.422 42.406 83.146 85.87 40.138 73.525zM158.434 67.183l10.724 43.465-43.008-12.346zM93.879 129.313l10.724 43.465-43.008-12.346z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-100 -100 1000 1000" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path fill="inherit" d="M280 560h240v240H280zM280 280h240v240H280zM0 280h240v240H0z"></path><path fill="inherit" fill-rule="evenodd" d="M560 0H280v240h280v280h240V0H560Z" clip-rule="evenodd"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2023</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://webgamer.io">WebGamer.io<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2023<!-- --> â¢</span>I built WebGamer, a portal of curated web games (15.000 visitors/month).</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4
110 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="m119.6 0-3.9.4a128.3 128.3 0 0 0 0 255.3c4 .4 20.7.4 24.6 0 17.2-2 31.7-6.2 46-13.5 2.3-1.1 2.7-1.4 2.4-1.7-.2-.1-9.6-12.7-20.8-28L147.4 185l-25.7-38A3646 3646 0 0 0 96 109s-.2 16.9-.2 37.5c-.1 36-.1 37.5-.6 38.3a4.5 4.5 0 0 1-2.2 2.3c-.8.4-1.5.5-5.3.5h-4.3l-1.1-.8a4.7 4.7 0 0 1-1.7-1.8l-.6-1V83.5l.9-1c.4-.5 1.2-1.1 1.8-1.5 1-.5 1.4-.5 5.8-.5 5 0 6 .2 7.2 1.6.4.4 14.3 21.4 31 46.6L177 205l20.3 30.7 1-.6a127.4 127.4 0 0 0 56.4-125.8A128.5 128.5 0 0 0 140.6.4c-2.4-.3-19-.5-21-.3zM172 77.6a5 5 0 0 1 2.5 3c.2.6.3 14.5.2 45.8v45l-8-12.1-8-12.2v-32.7c0-21.1.2-33 .3-33.6a5.1 5.1 0 0 1 2.5-3.1c1-.6 1.4-.6 5.3-.6 3.7 0 4.4 0 5.2.5z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 582 582" focusable="false" class="chakra-icon css-6ey7w3"><rect width="582" height="582" rx="291" fill="url(#chakra-ui_svg__a)"></rect>
1<path d="m157.5 303.4 198.4-197c3.7-3.7 9.7.8 7.1 5.4l-73.8 135.3c-1.6 3 .6 6.7 4 6.7h127.6c4 0 6 5 3 7.9L200.4 470.3c-4 3.8-10-1.5-6.8-6l105.9-146c2.1-3 0-7.1-3.7-7.1h-135c-4 0-6-5-3.2-7.8z" fill="#fff"></path><defs><linearGradient id="chakra-ui_svg__a" x1="291" y1="0" x2="291" y2="582" gradientUnits="userSpaceOnUse"><stop stop-color="#7BCBD4"></stop><stop offset="1" stop-color="#29C6B7"></stop></linearGradient></defs></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2023</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://www.webgamedev.com">WebGameDev.com<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2023<!-- --> â¢</span>I created Web Game Dev, a website, newsletter, and community of 1500 members about game development in JavaScript.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.
11-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="m119.6 0-3.9.4a128.3 128.3 0 0 0 0 255.3c4 .4 20.7.4 24.6 0 17.2-2 31.7-6.2 46-13.5 2.3-1.1 2.7-1.4 2.4-1.7-.2-.1-9.6-12.7-20.8-28L147.4 185l-25.7-38A3646 3646 0 0 0 96 109s-.2 16.9-.2 37.5c-.1 36-.1 37.5-.6 38.3a4.5 4.5 0 0 1-2.2 2.3c-.8.4-1.5.5-5.3.5h-4.3l-1.1-.8a4.7 4.7 0 0 1-1.7-1.8l-.6-1V83.5l.9-1c.4-.5 1.2-1.1 1.8-1.5 1-.5 1.4-.5 5.8-.5 5 0 6 .2 7.2 1.6.4.4 14.3 21.4 31 46.6L177 205l20.3 30.7 1-.6a127.4 127.4 0 0 0 56.4-125.8A128.5 128.5 0 0 0 140.6.4c-2.4-.3-19-.5-21-.3zM172 77.6a5 5 0 0 1 2.5 3c.2.6.3 14.5.2 45.8v45l-8-12.1-8-12.2v-32.7c0-21.1.2-33 .3-33.6a5.1 5.1 0 0 1 2.5-3.1c1-.6 1.4-.6 5.3-.6 3.7 0 4.4 0 5.2.5z"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2023</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://github.com/verekia/v1v2">V1V2 Packages<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2021<!-- --> â¢</span>I created TypeScript utility packages for React, Next.js, Chakra UI, and NProgress.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4
110 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 256" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="m119.6 0-3.9.4a128.3 128.3 0 0 0 0 255.3c4 .4 20.7.4 24.6 0 17.2-2 31.7-6.2 46-13.5 2.3-1.1 2.7-1.4 2.4-1.7-.2-.1-9.6-12.7-20.8-28L147.4 185l-25.7-38A3646 3646 0 0 0 96 109s-.2 16.9-.2 37.5c-.1 36-.1 37.5-.6 38.3a4.5 4.5 0 0 1-2.2 2.3c-.8.4-1.5.5-5.3.5h-4.3l-1.1-.8a4.7 4.7 0 0 1-1.7-1.8l-.6-1V83.5l.9-1c.4-.5 1.2-1.1 1.8-1.5 1-.5 1.4-.5 5.8-.5 5 0 6 .2 7.2 1.6.4.4 14.3 21.4 31 46.6L177 205l20.3 30.7 1-.6a127.4 127.4 0 0 0 56.4-125.8A128.5 128.5 0 0 0 140.6.4c-2.4-.3-19-.5-21-.3zM172 77.6a5 5 0 0 1 2.5 3c.2.6.3 14.5.2 45.8v45l-8-12.1-8-12.2v-32.7c0-21.1.2-33 .3-33.6a5.1 5.1 0 0 1 2.5-3.1c1-.6 1.4-.6 5.3-.6 3.7 0 4.4 0 5.2.5z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 582 582" focusable="false" class="chakra-icon css-6ey7w3"><rect width="582" height="582" rx="291" fill="url(#chakra-ui_svg__a)"></rect>
1<path d="m157.5 303.4 198.4-197c3.7-3.7 9.7.8 7.1 5.4l-73.8 135.3c-1.6 3 .6 6.7 4 6.7h127.6c4 0 6 5 3 7.9L200.4 470.3c-4 3.8-10-1.5-6.8-6l105.9-146c2.1-3 0-7.1-3.7-7.1h-135c-4 0-6-5-3.2-7.8z" fill="#fff"></path><defs><linearGradient id="chakra-ui_svg__a" x1="291" y1="0" x2="291" y2="582" gradientUnits="userSpaceOnUse"><stop stop-color="#7BCBD4"></stop><stop offset="1" stop-color="#29C6B7"></stop></linearGradient></defs></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2021</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://cityfilter.v1v2.io">City Filter<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2020<!-- --> â¢</span>City Filter is a web app I built to find the best cities to live throughout the year. It was originally built with Gatsby and Hasura. I switched to Next.js and Airtable.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><rect fill="#3178c6" height="512" rx="50" width="512"></rect><rect fill="#3178c6" height="512" rx="50" width="512"></rect><path clip-rule="evenodd" d="M317 407.4v50c8 4.3 17.7 7.4 28.8 9.5a189 189 0 0 0 69.3-.3c10.8-2.3 20.3-6.1 28.5-11.4 8-5.2 14.5-12.1 19.3-20.6s7.1-19 7.1-31.6c0-9-1.4-17-4-23.8s-6.7-13-11.8-18.2c-5.1-5.4-11.2-10.1-18.4-14.4s-15.2-8.2-24.2-12c-6.5-2.6-12.4-5.3-17.7-7.8a89.8 89.8 0 0 1-13.3-7.8 34.1 34.1 0 0 1-8.4-8.5c-2-3-3-6.3-3-10 0-3.5.9-6.6 2.7-9.4s4.2-5.1 7.5-7.1c3.2-2 7.2-3.5 11.9-4.6a69 69 0 0 1 15.6-1.7 99.3 99.3 0 0 1 53.2 15.7v-46.8c-7.6-3-15.9-5-25-6.5s-19.3-2.1-31-2.1c-11.9 0-23.2 1.3-33.8 3.8s-20 6.6-28 12a59.8 59.8 0 0 0-19.3 20.7c-4.7 8.4-7 18.5-7 30.1 0 15 4.3 27.7 13 38.2a98.2 98.2 0 0 0 39.1 26.8c6.9 2.8 13.3 5.5 19.3 8.3s11 5.5 15.4 8.4c4.3 3 7.7 6.1 10.2 9.5a19.4 19.4 0 0 1 1.4 20.8c-1.5 2.7-3.9 5.1-7 7.2s-7.2 3.6-12 4.7a71.5 71.5 0 0 1-16.6 1.8 95.1 95.1 0 0 1-61.9-22.9zm-84.2-123.3H297V243H118v41h64v183h50.8z" fill="#fff" fill-rule="evenodd"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2
10 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#764ABC"><path d="M65.6 65.4a5.6 5.6 0 0 0-.6-11.2h-.2a5.6 5.6 0 0 0-3.8 9.5 35.8 35.8 0 0 1-16.4 15.7 27 27 0 0 1-16.3 3.1c-4.5-.6-8-2.6-10.2-5.9a14.7 14.7 0 0 1-.8-15.5c1.9-3.8 4.9-6.6 6.8-8a54 54 0 0 1-1.3-5.1c-14.5 10.5-13 24.7-8.6 31.4 3.3 5 10 8.1 17.4 8.1a38.4 38.4 0 0 0 34-22.1z"></path><path d="M83.2 53a40.6 40.6 0 0 0-31.6-13.8H50c-.9-1.8-2.8-3-4.9-3h-.2a5.6 5.6 0 0 0 .2 11.2h.2a5.6 5.6 0 0 0 4.9-3.4H52c7.6 0 14.8 2.2 21.3 6.5 5 3.3 8.6 7.6 10.6 12.8 1.7 4.2 1.6 8.3-.2 11.8A14.7 14.7 0 0 1 70 83.3c-4 0-7.8-1.2-9.8-2.1a59 59 0 0 1-4.5 3.6c4.3 2 8.7 3.1 12.9 3.1 9.6 0 16.7-5.3 19.4-10.6 2.9-5.8 2.7-15.8-4.8-24.3z"></path><path d="M32.4 67.1c.1 3 2.6 5.4 5.6 5.4h.2a5.6 5.6 0 0 0-.2-11.2h-.2l-.7.1a36.6 36.6 0 0 1-5.2-22.2c.4-6 2.4-11.2 5.9-15.5 2.9-3.7 8.5-5.5 12.3-5.6 10.6-.2 15.1 13 15.4 18.3l5 1.5c-1.2-16.2-11.2-24.6-20.8-24.6-9 0-17.3 6.5-20.6 16.1a41 41 0 0 0 4 34.8c-.5.7-.8 1.8-.7 2.9z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" focusable="false" class="chakra-icon css-6ey7w3"><circle cx="14" cy="14" r="14" fill="#639"></circle><path fill="#fff" d="M6.2 21.8A10.9 10.9 0 0 1 3 14.2L13.9 25c-2.8-.1-5.6-1.1-7.7-3.2zm10.2 2.9L3.3 11.6a11 11 0 0 1 19.6-4.1l-1.5 1.3A9.2 9.2 0 0 0 14 5a9.1 9.1 0 0 0-8.5 6L17 22.5a9 9 0 0 0 5.8-6.5H18v-2h7a11 11 0 0 1-8.6 10.7z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 256 204" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#00B0FF" d="M0 110.8V0l96 55.4v37l-64-37v74z"></path><path fill="#0081CB" d="M96 55.4 192 0v110.8l-64 37-32-18.5 64-37V55.5l-64 37z"></path><path fill="#00B0FF" d="M96 129.3v37l64 37v-37z"></path><path d="m160 203.2 96-55.4V73.9l-32 18.5v37l-64 36.9v37zm64-147.8v-37L256 0v37l-32 18.4z" fill="#0081CB"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" fill="#001934" data-name="Group 2" viewBox="0 0 257.3 300" focusable="false" class="chakra-icon tool-icon-dark css-6ey7w3"><path d="M251.1 98.7c8.6-20.6 8.6-62.6-2.7-94.8-3-5.8-11.6-3.9-12 2.3v2.4c-2 30.7-13.2 47.5-30 55.6-2.7 1.2-7 1.2-9.7-.8a128 128 0 0 0-136.8 0 9.6 9.6 0 0 1-8.5.8C34.3 58 22.6 39.3 20.7 8.2V5.9c-.4-6.3-9.3-8.2-12-2.3-11.3 32.5-11.1 74.5-2.9 95a46 46 0 0 1 .8 32.3 120.2 120.2 0 0 0-6.5 42.7c1.5 67.6 59 125.1 126.7 126.3a128.4 128.4 0 0 0 123.2-169 46 46 0 0 1 1.1-32.3zM126.8 269.3a97.9 97.9 0 0 1-95.6-95.6 97.2 97.2 0 0 1 99-99.5 97.6 97.6 0 0 1-3.4 195.1z" class="hasura_svg__cls-1" data-name="Path 7"></path><path d="m143.5 161.2-23-35.3a12.5 12.5 0 0 0-17-4 12.8 12.8 0 0 0-5.9 10.6 13.1 13.1 0 0 0 2 6.6l15.5 24a5.3 5.3 0 0 1-.4 5.9l-24 26.4a12.3 12.3 0 0 0 .7 17.5 13.6 13.6 0 0 0 8.6 3.1 12.7 12.7 0 0 0 8.9-3.9l17.9-21c1.5-1.5 3.9-1.5 5 .4l12.8 18.3a7.6 7.6 0 0 0 3.5 3.5 12.3 12.3 0 0 0 14 .4 12.8 12.8 0 0 0 5.9-10.5 13.1 13.1 0 0 0-2-6.6z" class="hasura_svg__cls-1" data-name="Path 8"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" focusable="false" class="chakra-icon css-6ey7w3"><path d="M28.6 6 4.7 15.7a1.6 1.6 0 0 0 0 3l24 9.4a8.9 8.9 0 0 0 6.6 0l24-9.5a1.6 1.6 0 0 0 0-3L35.2 6a8.9 8.9 0 0 0-6.7 0" fill="#fc0"></path><path d="M34.1 33.4v23.8a1.6 1.6 0 0 0 2.2 1.5L63 48.3a1.6 1.6 0 0 0 1-1.5V23.1a1.6 1.6 0 0 0-2.2-1.5L35.1 31.9a1.6 1.6 0 0 0-1 1.5" fill="#31c2f2"></path><path d="M27.9 34.7 19 38.9l-16.7 8c-1 .5-2.4-.3-2.4-1.5V23.2c0-.5.2-.8.5-1.1a1.8 1.8 0 0 1 .4-.3c.4-.2 1-.3 1.5-.1l25.3 10c1.3.5 1.4 2.4.2 3" fill="#ed3049"></path><path d="m27.9 34.7-8 3.8L.5 22a1.8 1.8 0 0 1 .4-.3c.4-.2 1-.3 1.5-.1l25.3 10c1.3.5 1.4 2.4.2 3" fill="#c62842"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2020</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://github.com/sharynjs/sharyn">Sharyn.js â Front-End Library<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2018<!-- --> â¢</span>My library of front-end utilities.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630 630" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#f7df1e" d="M0 0h630v630H0z"></path><path d="M423.2 492.2c12.7 20.7 29.2 36 58.4 36 24.5 0 40.2-12.3 40.2-29.3 0-20.3-16.1-27.4-43.1-39.3l-14.8-6.3c-42.7-18.2-71.1-41-71.1-89.2 0-44.4 33.8-78.2 86.7-78.2 37.6 0 64.7 13 84.2 47.4l-46.1 29.6c-10.2-18.2-21.1-25.4-38.1-25.4-17.3 0-28.3 11-28.3 25.4 0 17.8 11 25 36.4 36l14.8 6.3c50.3 21.5 78.7 43.5 78.7 93 0 53.3-41.9 82.5-98.1 82.5-55 0-90.5-26.2-108-60.6zm-209.1 5.1c9.3 16.5 17.7 30.5 38 30.5 19.5 0 31.8-7.6 31.8-37.2V289.3H343v202c0 61.4-36 89.3-88.4 89.3-47.4 0-74.9-24.6-88.8-54.1z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4
110 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#764ABC"><path d="M65.6 65.4a5.6 5.6 0 0 0-.6-11.2h-.2a5.6 5.6 0 0 0-3.8 9.5 35.8 35.8 0 0 1-16.4 15.7 27 27 0 0 1-16.3 3.1c-4.5-.6-8-2.6-10.2-5.9a14.7 14.7 0 0 1-.8-15.5c1.9-3.8 4.9-6.6 6.8-8a54 54 0 0 1-1.3-5.1c-14.5 10.5-13 24.7-8.6 31.4 3.3 5 10 8.1 17.4 8.1a38.4 38.4 0 0 0 34-22.1z"></path><path d="M83.2 53a40.6 40.6 0 0 0-31.6-13.8H50c-.9-1.8-2.8-3-4.9-3h-.2a5.6 5.6 0 0 0 .2 11.2h.2a5.6 5.6 0 0 0 4.9-3.4H52c7.6 0 14.8 2.2 21.3 6.5 5 3.3 8.6 7.6 10.6 12.8 1.7 4.2 1.6 8.3-.2 11.8A14.7 14.7 0 0 1 70 83.3c-4 0-7.8-1.2-9.8-2.1a59 59 0 0 1-4.5 3.6c4.3 2 8.7 3.1 12.9 3.1 9.6 0 16.7-5.3 19.4-10.6 2.9-5.8 2.7-15.8-4.8-24.3z"></path><path d="M32.4 67.1c.1 3 2.6 5.4 5.6 5.4h.2a5.6 5.6 0 0 0-.2-11.2h-.2l-.7.1a36.6 36.6 0 0 1-5.2-22.2c.4-6 2.4-11.2 5.9-15.5 2.9-3.7 8.5-5.5 12.3-5.6 10.6-.2 15.1 13 15.4 18.3l5 1.5c-1.2-16.2-11.2-24.6-20.8-24.6-9 0-17.3 6.5-20.6 16.1a41 41 0 0 0 4 34.8c-.5.7-.8 1.8-.7 2.9z"></path></g></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2018</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://github.com/verekia/js-stack-from-scratch">JavaScript Stack from Scratch<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2016-2017<!-- --> â¢</span>My tutorial about ES6, React, and Front-End development (19k GitHub stars).</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630 630" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#f7df1e" d="M0 0h630v630H0z"></path><path d="M423.2 492.2c12.7 20.7 29.2 36 58.4 36 24.5 0 40.2-12.3 40.2-29.3 0-20.3-16.1-27.4-43.1-39.3l-14.8-6.3c-42.7-18.2-71.1-41-71.1-89.2 0-44.4 33.8-78.2 86.7-78.2 37.6 0 64.7 13 84.2 47.4l-46.1 29.6c-10.2-18.2-21.1-25.4-38.1-25.4-17.3 0-28.3 11-28.3 25.4 0 17.8 11 25 36.4 36l14.8 6.3c50.3 21.5 78.7 43.5 78.7 93 0 53.3-41.9 82.5-98.1 82.5-55 0-90.5-26.2-108-60.6zm-209.1 5.1c9.3 16.5 17.7 30.5 38 30.5 19.5 0 31.8-7.6 31.8-37.2V289.3H343v202c0 61.4-36 89.3-88.4 89.3-47.4 0-74.9-24.6-88.8-54.1z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="170 50 500 500" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4a43.8 43.8 0 0 0-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9a487.8 487.8 0 0 0-41.6-50c32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9a467 467 0 0 0-63.6 11c-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4a44 44 0 0 0 22.5 5.6c27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7a450.4 450.4 0 0 1-13.5 39.5 473.3 473.3 0 0 0-27.5-47.4c14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5a532.7 532.7 0 0 1-24.1 38.2 520.3 520.3 0 0 1-90.2.1 551.2 551.2 0 0 1-45-77.8 521.5 521.5 0 0 1 44.8-78.1 520.3 520.3 0 0 1 90.2-.1 551.2 551.2 0 0 1 45 77.8 560 560 0 0 1-20.7 39.9zm32.3-13c5.4 13.4
110 26.8 13.8 39.8a448.8 448.8 0 0 1-41.2 8 552.4 552.4 0 0 0 27.4-47.8zM421.2 430a412.3 412.3 0 0 1-27.8-32 619 619 0 0 0 55.3 0c-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9a451.2 451.2 0 0 1-41-7.9c3.7-12.9 8.3-26.2 13.5-39.5a473.3 473.3 0 0 0 27.5 47.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32a619 619 0 0 0-55.3 0c9-11.7 18.3-22.4 27.5-32zm-74 58.9a552.4 552.4 0 0 0-27.4 47.7c-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9a473.5 473.5 0 0 0-22.2 60.6c-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9a487.8 487.8 0 0 0 41.6 50c-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9a467 467 0 0 0 63.6-11 280 280 0 0 1 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9a473.5 473.5 0 0 0 22.2-60.6c9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle><path d="M520.5 78.1z"></path></g></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" focusable="false" class="chakra-icon css-6ey7w3"><g fill="#764ABC"><path d="M65.6 65.4a5.6 5.6 0 0 0-.6-11.2h-.2a5.6 5.6 0 0 0-3.8 9.5 35.8 35.8 0 0 1-16.4 15.7 27 27 0 0 1-16.3 3.1c-4.5-.6-8-2.6-10.2-5.9a14.7 14.7 0 0 1-.8-15.5c1.9-3.8 4.9-6.6 6.8-8a54 54 0 0 1-1.3-5.1c-14.5 10.5-13 24.7-8.6 31.4 3.3 5 10 8.1 17.4 8.1a38.4 38.4 0 0 0 34-22.1z"></path><path d="M83.2 53a40.6 40.6 0 0 0-31.6-13.8H50c-.9-1.8-2.8-3-4.9-3h-.2a5.6 5.6 0 0 0 .2 11.2h.2a5.6 5.6 0 0 0 4.9-3.4H52c7.6 0 14.8 2.2 21.3 6.5 5 3.3 8.6 7.6 10.6 12.8 1.7 4.2 1.6 8.3-.2 11.8A14.7 14.7 0 0 1 70 83.3c-4 0-7.8-1.2-9.8-2.1a59 59 0 0 1-4.5 3.6c4.3 2 8.7 3.1 12.9 3.1 9.6 0 16.7-5.3 19.4-10.6 2.9-5.8 2.7-15.8-4.8-24.3z"></path><path d="M32.4 67.1c.1 3 2.6 5.4 5.6 5.4h.2a5.6 5.6 0 0 0-.2-11.2h-.2l-.7.1a36.6 36.6 0 0 1-5.2-22.2c.4-6 2.4-11.2 5.9-15.5 2.9-3.7 8.5-5.5 12.3-5.6 10.6-.2 15.1 13 15.4 18.3l5 1.5c-1.2-16.2-11.2-24.6-20.8-24.6-9 0-17.3 6.5-20.6 16.1a41 41 0 0 0 4 34.8c-.5.7-.8 1.8-.7 2.9z"></path></g></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2016-2017</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://github.com/verekia/zerocss">ZeroCSS â CSS Utility Classes Generator<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2016<!-- --> â¢</span>I created a utility classes generator (something a bit similar to Tailwind).</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 630 630" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#f7df1e" d="M0 0h630v630H0z"></path><path d="M423.2 492.2c12.7 20.7 29.2 36 58.4 36 24.5 0 40.2-12.3 40.2-29.3 0-20.3-16.1-27.4-43.1-39.3l-14.8-6.3c-42.7-18.2-71.1-41-71.1-89.2 0-44.4 33.8-78.2 86.7-78.2 37.6 0 64.7 13 84.2 47.4l-46.1 29.6c-10.2-18.2-21.1-25.4-38.1-25.4-17.3 0-28.3 11-28.3 25.4 0 17.8 11 25 36.4 36l14.8 6.3c50.3 21.5 78.7 43.5 78.7 93 0 53.3-41.9 82.5-98.1 82.5-55 0-90.5-26.2-108-60.6zm-209.1 5.1c9.3 16.5 17.7 30.5 38 30.5 19.5 0 31.8-7.6 31.8-37.2V289.3H343v202c0 61.4-36 89.3-88.4 89.3-47.4 0-74.9-24.6-88.8-54.1z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#264de4" d="M71.357 460.819 30.272 0h451.456l-41.129 460.746L255.724 512z"></path><path fill="#2965f1" d="m405.388 431.408 35.148-393.73H256v435.146z"></path><path fill="#ebebeb" d="m124.46 208.59 5.065 56.517H256V208.59zm-5.041-57.875H256V94.197H114.281zM256 355.372l-.248.066-62.944-16.996-4.023-45.076h-
156.736l7.919 88.741 115.772 32.14.26-.073z"></path><path fill="#fff" d="M255.805 208.59v56.517H325.4l-6.56 73.299-63.035 17.013v58.8l115.864-32.112.85-9.549 13.28-148.792 1.38-15.176 10.203-114.393H255.805v56.518h79.639L330.3 208.59z"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2016</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a target="_blank" rel="noopener" class="chakra-link css-gdptt9" href="https://initializr.v1v2.io">Initializr â Official HTML5 Boilerplate custom builder<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" focusable="false" class="chakra-icon css-k3ag4y" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2011-2014<!-- --> â¢</span>Initializr is a tool I made to generate HTML5 projects. It was the official custom build tool of HTML5 Boilerplate and reached 4 million visitors since its creation.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3"><path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2011-2014</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/initializr-generateur-html5-boilerplate">Initializr - Un générateur de templates avec HTML5 Boilerplate</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2011<!-- --> â¢</span>The launch post about my tool Initializr in French.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3"><path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2011</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/livre-html5">HTML5 : De la page web à l'application web, livre chez Dunod</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2011<!-- --> â¢</span>I co-wrote a book about HTML5 in French. This was the launch post.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3">
1<path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2011</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/logo-html5">Le logo HTML5 officiel du W3C</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2011<!-- --> â¢</span>The W3C unveiled the HTML5 logo, which I covered in this French article.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3"><path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2011</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/introduction-css3">Introduction au CSS3</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2011<!-- --> â¢</span>A complete overview of CSS3 in French.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#264de4" d="M71.357 460.819 30.272 0h451.456l-41.129 460.746L255.724 512z"></path><path fill="#2965f1" d="m405.388 431.408 35.148-393.73H256v435.146z"></path><path fill="#ebebeb" d="m124.46 208.59 5.065 56.517H256V208.59zm-5.041-57.875H256V94.197H114.281zM256 355.372l-.248.066-62.944-16.996-4.023-45.076h-
156.736l7.919 88.741 115.772 32.14.26-.073z"></path><path fill="#fff" d="M255.805 208.59v56.517H325.4l-6.56 73.299-63.035 17.013v58.8l115.864-32.112.85-9.549 13.28-148.792 1.38-15.176 10.203-114.393H255.805v56.518h79.639L330.3 208.59z"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2011</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/introduction-html5">Introduction à l'HTML5</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2011<!-- --> â¢</span>A complete overview of HTML5 in French.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3"><path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2011</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/conferences-html5-devoxx-2010">Les conférences sur HTML5 au Devoxx 2010</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2010<!-- --> â¢</span>French summary of the HTML5 talks of Devoxx 2010, a conference in Belgium.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3"><path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2010</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/application-web-offline-cache-manifest">Une application web offline HTML5 avec le cache manifest</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2010<!-- --> â¢</span>A French tutorial about the (now deprecated) HTML5 offline application cache.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3">
1<path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2010</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/police-css3-font-face-google-font">Une police personnalisée CSS3 avec @font-face ou Google Font</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2010<!-- --> â¢</span>A French tutorial about using custom fonts with @font-face and Google Fonts.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#264de4" d="M71.357 460.819 30.272 0h451.456l-41.129 460.746L255.724 512z"></path><path fill="#2965f1" d="m405.388 431.408 35.148-393.73H256v435.146z"></path><path fill="#ebebeb" d="m124.46 208.59 5.065 56.517H256V208.59zm-5.041-57.875H256V94.197H114.281zM256 355.372l-.248.066-62.944-16.996-4.023-45.076h-
156.736l7.919 88.741 115.772 32.14.26-.073z"></path><path fill="#fff" d="M255.805 208.59v56.517H325.4l-6.56 73.299-63.035 17.013v58.8l115.864-32.112.85-9.549 13.28-148.792 1.38-15.176 10.203-114.393H255.805v56.518h79.639L330.3 208.59z"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2010</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/ombre-css3-box-shadow">Les ombres en CSS3 avec box-shadow</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2010<!-- --> â¢</span>A French tutorial about box-shadow.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#264de4" d="M71.357 460.819 30.272 0h451.456l-41.129 460.746L255.724 512z"></path><path fill="#2965f1" d="m405.388 431.408 35.148-393.73H256v435.146z"></path><path fill="#ebebeb" d="m124.46 208.59 5.065 56.517H256V208.59zm-5.041-57.875H256V94.197H114.281zM256 355.372l-.248.066-62.944-16.996-4.023-45.076h-
156.736l7.919 88.741 115.772 32.14.26-.073z"></path><path fill="#fff" d="M255.805 208.59v56.517H325.4l-6.56 73.299-63.035 17.013v58.8l115.864-32.112.85-9.549 13.28-148.792 1.38-15.176 10.203-114.393H255.805v56.518h79.639L330.3 208.59z"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2010</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/api-google-maps-geolocalisation-html5">L'API Google Maps avec la géolocalisation HTML5</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2010<!-- --> â¢</span>A French tutorial about using HTML5 geolocation with the Google Maps API.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3"><path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2010</div></div></article><article class="css-b92dn7"><h3 class="chakra-heading css-98eg9c"><a class="chakra-link css-gdptt9" href="/blog/geolocalisation-html5">La géolocalisation en HTML5</a></h3><p class="chakra-text css-1lvdfxf"><span class="css-t0z19i">2010<!-- --> â¢</span>My very first tutorial, in French, was about HTML5 geolocation.</p><div class="css-sj4rx6"><div class="chakra-wrap css-i6bazn"><ul class="chakra-wrap__list css-x2hviy"><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3000 2000" focusable="false" class="chakra-icon css-6ey7w3"><path fill="#002494" d="M0 0h1010v2000H0z"></path><path fill="#FFF" d="M1000 0h1010v2000H1000z"></path><path fill="#ED2938" d="M2000 0h1000v2000H2000z"></path></svg></div></li><li class="chakra-wrap__listitem css-1yp4ln"><div class="css-1ilwx1p"><svg fill="none" height="2500" width="2183" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 141.532" focusable="false" class="chakra-icon css-6ey7w3"><path d="M10.383 126.894 0 0l124 .255-10.979 126.639-50.553 14.638z" fill="#e34f26"></path><path d="M62.468 129.277V12.085l51.064.17-9.106 104.851z" fill="#ef652a"></path><path d="m99.49 41.362 1.446-15.49H22.383l4.34 47.49h54.213L78.81 93.617l-17.362 4.68-17.617-5.106-.936-12.085H27.319l2.128 24.681 32 8.936 32.255-8.936 4.34-48.17H41.107L39.49 41.362z" fill="#fff"></path></svg></div></li></ul></div><div class="css-17xejub"></div><div class="css-iylejo">2010</div></div></article></div></article><span></span><span id="__chakra_env" hidden=""></span></div>
1<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/blog-projects","query":{},"buildId":"f6mMl2Nq29FoYZoze8f5_","assetPrefix":"https://cdn.v1v2.io","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.