Help
RSS
API
Feed
Maltego
Contact
Domain > alfu.dev
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-10-09
172.67.215.28
(
ClassC
)
2026-01-25
216.198.79.1
(
ClassC
)
Port 443
HTTP/1.1 200 OKAccept-Ranges: bytesAccess-Control-Allow-Origin: *Age: 0Cache-Control: public, max-age0, must-revalidateContent-Disposition: inlineContent-Length: 72893Content-Type: text/html; charsetutf-8Date: Sun, 25 Jan 2026 22:11:46 GMTEtag: 936887993d9ede2a56e3a38e372944c1Last-Modified: Sun, 25 Jan 2026 22:11:46 GMTServer: VercelStrict-Transport-Security: max-age63072000X-Matched-Path: /X-Vercel-Cache: HITX-Vercel-Id: pdx1::mwn8k-1769379106521-9db62ea4390a !DOCTYPE html>html langen>head>meta charSetutf-8/>title>Al Fu - Fullstack Developer Portfolio/title>meta namedescription contentAl Fu - Passionate Fullstack Software Developer specializing in modern web applications/>meta nameviewport contentwidthdevice-width, initial-scale1/>link relicon href/favicon.svg typeimage/svg+xml/>link relicon href/favicon.ico/>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css/>meta namenext-head-count content7/>link relpreconnect hrefhttps://fonts.googleapis.com/>link relpreconnect hrefhttps://fonts.gstatic.com crossorigintrue/>link relpreconnect hrefhttps://fonts.gstatic.com crossorigin />link data-next-fontsize-adjust relpreconnect href/ crossoriginanonymous/>link relpreload href/_next/static/css/5941428792ec8ede.css asstyle/>link relstylesheet href/_next/static/css/5941428792ec8ede.css data-n-g/>noscript data-n-css>/noscript>script defer nomodule src/_next/static/chunks/polyfills-42372ed130431b0a.js>/script>script src/_next/static/chunks/webpack-ee7e63bc15b31913.js defer>/script>script src/_next/static/chunks/framework-49c6cecf1f6d5795.js defer>/script>script src/_next/static/chunks/main-a2464d6d00b134e7.js defer>/script>script src/_next/static/chunks/pages/_app-951c602edea6c373.js defer>/script>script src/_next/static/chunks/527-6ad725c89ad36fe3.js defer>/script>script src/_next/static/chunks/pages/index-02e7ddfb068ba06d.js defer>/script>script src/_next/static/w1g27VTNj8-2UAM8q3SHT/_buildManifest.js defer>/script>script src/_next/static/w1g27VTNj8-2UAM8q3SHT/_ssgManifest.js defer>/script>style id__jsx-842940fa43e0ab58>.animated-logo.jsx-842940fa43e0ab58{-webkit-animation:elegantGlow 10s cubic-bezier(.4,0,.6,1)infinite;-moz-animation:elegantGlow 10s cubic-bezier(.4,0,.6,1)infinite;-o-animation:elegantGlow 10s cubic-bezier(.4,0,.6,1)infinite;animation:elegantGlow 10s cubic-bezier(.4,0,.6,1)infinite;-webkit-transition:all.3s ease;-moz-transition:all.3s ease;-o-transition:all.3s ease;transition:all.3s ease}.animated-logo.jsx-842940fa43e0ab58:hover{-webkit-animation-duration:3s;-moz-animation-duration:3s;-o-animation-duration:3s;animation-duration:3s;-webkit-transform:scale(1.02);-moz-transform:scale(1.02);-ms-transform:scale(1.02);-o-transform:scale(1.02);transform:scale(1.02)}@-webkit-keyframes elegantGlow{0%,100%{-webkit-filter:invert(1)sepia(0)saturate(1)hue-rotate(0deg)brightness(1)drop-shadow(0 0 5px rgba(255,255,255,.3));filter:invert(1)sepia(0)saturate(1)hue-rotate(0deg)brightness(1)drop-shadow(0 0 5px rgba(255,255,255,.3))}25%{-webkit-filter:invert(1)sepia(.8)saturate(3)hue-rotate(120deg)brightness(1.1)drop-shadow(0 0 15px rgba(47,191,113,.4));filter:invert(1)sepia(.8)saturate(3)hue-rotate(120deg)brightness(1.1)drop-shadow(0 0 15px rgba(47,191,113,.4))}50%{-webkit-filter:invert(1)sepia(.6)saturate(2.5)hue-rotate(200deg)brightness(1.05)drop-shadow(0 0 12px rgba(100,149,237,.3));filter:invert(1)sepia(.6)saturate(2.5)hue-rotate(200deg)brightness(1.05)drop-shadow(0 0 12px rgba(100,149,237,.3))}75%{-webkit-filter:invert(1)sepia(.7)saturate(2.8)hue-rotate(280deg)brightness(1.08)drop-shadow(0 0 10px rgba(186,85,211,.35));filter:invert(1)sepia(.7)saturate(2.8)hue-rotate(280deg)brightness(1.08)drop-shadow(0 0 10px rgba(186,85,211,.35))}}@-moz-keyframes elegantGlow{0%,100%{filter:invert(1)sepia(0)saturate(1)hue-rotate(0deg)brightness(1)drop-shadow(0 0 5px rgba(255,255,255,.3))}25%{filter:invert(1)sepia(.8)saturate(3)hue-rotate(120deg)brightness(1.1)drop-shadow(0 0 15px rgba(47,191,113,.4))}50%{filter:invert(1)sepia(.6)saturate(2.5)hue-rotate(200deg)brightness(1.05)drop-shadow(0 0 12px rgba(100,149,237,.3))}75%{filter:invert(1)sepia(.7)saturate(2.8)hue-rotate(280deg)brightness(1.08)drop-shadow(0 0 10px rgba(186,85,211,.35))}}@-o-keyframes elegantGlow{0%,100%{filter:invert(1)sepia(0)saturate(1)hue-rotate(0deg)brightness(1)drop-shadow(0 0 5px rgba(255,255,255,.3))}25%{filter:invert(1)sepia(.8)saturate(3)hue-rotate(120deg)brightness(1.1)drop-shadow(0 0 15px rgba(47,191,113,.4))}50%{filter:invert(1)sepia(.6)saturate(2.5)hue-rotate(200deg)brightness(1.05)drop-shadow(0 0 12px rgba(100,149,237,.3))}75%{filter:invert(1)sepia(.7)saturate(2.8)hue-rotate(280deg)brightness(1.08)drop-shadow(0 0 10px rgba(186,85,211,.35))}}@keyframes elegantGlow{0%,100%{-webkit-filter:invert(1)sepia(0)saturate(1)hue-rotate(0deg)brightness(1)drop-shadow(0 0 5px rgba(255,255,255,.3));filter:invert(1)sepia(0)saturate(1)hue-rotate(0deg)brightness(1)drop-shadow(0 0 5px rgba(255,255,255,.3))}25%{-webkit-filter:invert(1)sepia(.8)saturate(3)hue-rotate(120deg)brightness(1.1)drop-shadow(0 0 15px rgba(47,191,113,.4));filter:invert(1)sepia(.8)saturate(3)hue-rotate(120deg)brightness(1.1)drop-shadow(0 0 15px rgba(47,191,113,.4))}50%{-webkit-filter:invert(1)sepia(.6)saturate(2.5)hue-rotate(200deg)brightness(1.05)drop-shadow(0 0 12px rgba(100,149,237,.3));filter:invert(1)sepia(.6)saturate(2.5)hue-rotate(200deg)brightness(1.05)drop-shadow(0 0 12px rgba(100,149,237,.3))}75%{-webkit-filter:invert(1)sepia(.7)saturate(2.8)hue-rotate(280deg)brightness(1.08)drop-shadow(0 0 10px rgba(186,85,211,.35));filter:invert(1)sepia(.7)saturate(2.8)hue-rotate(280deg)brightness(1.08)drop-shadow(0 0 10px rgba(186,85,211,.35))}}/style>style id__jsx-8164f075df013dab>@-webkit-keyframes slideInLeft{from{opacity:0;-webkit-transform:translatex(-50px);transform:translatex(-50px)}to{opacity:1;-webkit-transform:translatex(0);transform:translatex(0)}}@-moz-keyframes slideInLeft{from{opacity:0;-moz-transform:translatex(-50px);transform:translatex(-50px)}to{opacity:1;-moz-transform:translatex(0);transform:translatex(0)}}@-o-keyframes slideInLeft{from{opacity:0;-o-transform:translatex(-50px);transform:translatex(-50px)}to{opacity:1;-o-transform:translatex(0);transform:translatex(0)}}@keyframes slideInLeft{from{opacity:0;-webkit-transform:translatex(-50px);-moz-transform:translatex(-50px);-o-transform:translatex(-50px);transform:translatex(-50px)}to{opacity:1;-webkit-transform:translatex(0);-moz-transform:translatex(0);-o-transform:translatex(0);transform:translatex(0)}}@-webkit-keyframes slideInRight{from{opacity:0;-webkit-transform:translatex(50px);transform:translatex(50px)}to{opacity:1;-webkit-transform:translatex(0);transform:translatex(0)}}@-moz-keyframes slideInRight{from{opacity:0;-moz-transform:translatex(50px);transform:translatex(50px)}to{opacity:1;-moz-transform:translatex(0);transform:translatex(0)}}@-o-keyframes slideInRight{from{opacity:0;-o-transform:translatex(50px);transform:translatex(50px)}to{opacity:1;-o-transform:translatex(0);transform:translatex(0)}}@keyframes slideInRight{from{opacity:0;-webkit-transform:translatex(50px);-moz-transform:translatex(50px);-o-transform:translatex(50px);transform:translatex(50px)}to{opacity:1;-webkit-transform:translatex(0);-moz-transform:translatex(0);-o-transform:translatex(0);transform:translatex(0)}}@-webkit-keyframes gentlePulse{0%,100%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}}@-moz-keyframes gentlePulse{0%,100%{-moz-transform:scale(1);transform:scale(1)}50%{-moz-transform:scale(1.1);transform:scale(1.1)}}@-o-keyframes gentlePulse{0%,100%{-o-transform:scale(1);transform:scale(1)}50%{-o-transform:scale(1.1);transform:scale(1.1)}}@keyframes gentlePulse{0%,100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}}.skill-icon{-webkit-animation:gentlePulse 3s ease-in-out infinite;-moz-animation:gentlePulse 3s ease-in-out infinite;-o-animation:gentlePulse 3s ease-in-out infinite;animation:gentlePulse 3s ease-in-out infinite}.skill-icon:hover,.skill-item:hover .skill-icon{-webkit-transform:scale(1.3);-moz-transform:scale(1.3);-ms-transform:scale(1.3);-o-transform:scale(1.3);transform:scale(1.3);color:#4ecdc4!important;-webkit-filter:drop-shadow(0 0 8px rgba(47,191,113,.8));filter:drop-shadow(0 0 8px rgba(47,191,113,.8));-webkit-animation:none;-moz-animation:none;-o-animation:none;animation:none}.tech-pill:hover{-webkit-transform:translatey(-2px);-moz-transform:translatey(-2px);-ms-transform:translatey(-2px);-o-transform:translatey(-2px);transform:translatey(-2px);background:rgba(47,191,113,.2)!important;border-color:rgba(47,191,113,.5)!important;color:#2fbf71!important;-webkit-box-shadow:0 5px 15px rgba(47,191,113,.2);-moz-box-shadow:0 5px 15px rgba(47,191,113,.2);box-shadow:0 5px 15px rgba(47,191,113,.2)}.tech-pill:hover .tech-icon{color:#4ecdc4!important;-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2);-webkit-filter:drop-shadow(0 0 6px rgba(47,191,113,.8));filter:drop-shadow(0 0 6px rgba(47,191,113,.8))}@-webkit-keyframes ballPulse{0%,100%{-webkit-transform:scale(1);transform:scale(1);opacity:.8}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:.9}}@-moz-keyframes ballPulse{0%,100%{-moz-transform:scale(1);transform:scale(1);opacity:.8}50%{-moz-transform:scale(1.05);transform:scale(1.05);opacity:.9}}@-o-keyframes ballPulse{0%,100%{-o-transform:scale(1);transform:scale(1);opacity:.8}50%{-o-transform:scale(1.05);transform:scale(1.05);opacity:.9}}@keyframes ballPulse{0%,100%{-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);transform:scale(1);opacity:.8}50%{-webkit-transform:scale(1.05);-moz-transform:scale(1.05);-o-transform:scale(1.05);transform:scale(1.05);opacity:.9}}@-webkit-keyframes greenGlow{0%,100%{-webkit-box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02);box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02)}50%{-webkit-box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05);box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05)}}@-moz-keyframes greenGlow{0%,100%{-moz-box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02);box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02)}50%{-moz-box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05);box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05)}}@-o-keyframes greenGlow{0%,100%{box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02)}50%{box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05)}}@keyframes greenGlow{0%,100%{-webkit-box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02);-moz-box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02);box-shadow:0 0 50px rgba(47,191,113,.1),0 0 100px rgba(47,191,113,.05),inset 0 0 50px rgba(47,191,113,.02)}50%{-webkit-box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05);-moz-box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05);box-shadow:0 0 80px rgba(47,191,113,.2),0 0 150px rgba(47,191,113,.1),inset 0 0 80px rgba(47,191,113,.05)}}.home-banner:after{-webkit-animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite;-moz-animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite;-o-animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite;animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite;-webkit-transition:all.3s ease;-moz-transition:all.3s ease;-o-transition:all.3s ease;transition:all.3s ease}.tech-icon{-webkit-animation:slideInLeft.8s ease-out both;-moz-animation:slideInLeft.8s ease-out both;-o-animation:slideInLeft.8s ease-out both;animation:slideInLeft.8s ease-out both}.theme-light .home-banner:after{-webkit-animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite;-moz-animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite;-o-animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite;animation:ballPulse 8s ease-in-out infinite,greenGlow 6s ease-in-out infinite}.typing-container{min-height:2rem;display:block;width:100%}.typing-container .lead{line-height:1.5;margin:0}@media(max-width:768px){.home-banner .container{padding-left:20px!important;padding-right:20px!important;max-width:100%!important}.home-banner .row{margin-left:0!important;margin-right:0!important}.home-banner .col-lg-6{padding-left:0!important;padding-right:0!important}.type-box{padding-left:0!important;padding-right:0!important;margin-left:0!important;margin-right:0!important}.profile-image{width:400px!important;height:400px!important;max-width:90vw!important;max-height:90vw!important}.hb-img{padding:0!important;margin:0!important}.typing-container{min-height:3.4rem}.typing-container .lead{font-size:1.2rem!important;line-height:1.4}.tech-stack-section>div{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-moz-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;gap:.8rem!important}.tech-pill{-webkit-box-flex:0!important;-webkit-flex:0 0 -webkit-calc(50% - .4rem)!important;-moz-box-flex:0!important;-ms-flex:0 0 calc(50% - .4rem)!important;flex:0 0 -webkit-calc(50% - .4rem)!important;flex:0 0 -moz-calc(50% - .4rem)!important;flex:0 0 calc(50% - .4rem)!important;min-width:-webkit-calc(50% - .4rem)!important;min-width:-moz-calc(50% - .4rem)!important;min-width:calc(50% - .4rem)!important;padding:.6rem .8rem!important;font-size:.8rem!important}}@media(max-width:480px){.typing-container{min-height:3.6rem}.typing-container .lead{font-size:1.1rem!important;line-height:1.3}.tech-stack-section>div{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-moz-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;gap:.6rem!important}.tech-pill{-webkit-box-flex:0!important;-webkit-flex:0 0 -webkit-calc(50% - .3rem)!important;-moz-box-flex:0!important;-ms-flex:0 0 calc(50% - .3rem)!important;flex:0 0 -webkit-calc(50% - .3rem)!important;flex:0 0 -moz-calc(50% - .3rem)!important;flex:0 0 calc(50% - .3rem)!important;min-width:-webkit-calc(50% - .3rem)!important;min-width:-moz-calc(50% - .3rem)!important;min-width:calc(50% - .3rem)!important;padding:.5rem .6rem!important;font-size:.75rem!important}.tech-pill i{font-size:.9rem!important}}@media(max-width:360px){.typing-container{min-height:3.8rem}.typing-container .lead{font-size:1rem!important}.tech-pill{-webkit-box-flex:1!important;-webkit-flex:1 1 100%!important;-moz-box-flex:1!important;-ms-flex:1 1 100%!important;flex:1 1 100%!important;min-width:100%!important;margin-bottom:.5rem!important}.tech-stack-section>div{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-moz-box-orient:vertical!important;-moz-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important;gap:.5rem!important}}/style>style data-hrefhttps://fonts.googleapis.com/css2?familySpace+Grotesk:wght@300;400;500;600;700&familyRoboto:wght@300;400;500;700&displayswap>@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:normal;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuaabWmQ.woff) format(woff)}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:normal;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbWmQ.woff) format(woff)}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:normal;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWub2bWmQ.woff) format(woff)}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:normal;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuYjammQ.woff) format(woff)}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mQoQDjQSkFtoMM3T6r8E7mF71Q-gOoraIAEj62UUsg.woff) format(woff)}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mQoQDjQSkFtoMM3T6r8E7mF71Q-gOoraIAEj7oUUsg.woff) format(woff)}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mQoQDjQSkFtoMM3T6r8E7mF71Q-gOoraIAEj7aUUsg.woff) format(woff)}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mQoQDjQSkFtoMM3T6r8E7mF71Q-gOoraIAEj42Vksg.woff) format(woff)}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mQoQDjQSkFtoMM3T6r8E7mF71Q-gOoraIAEj4PVksg.woff) format(woff)}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2) format(woff2);unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2) format(woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2) format(woff2);unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2) format(woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2) format(woff2);unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2) format(woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2) format(woff2);unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2) format(woff2);unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v49/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2) format(woff2);unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2) format(woff2);unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}/style>/head>body>div id__next>div classmob-header stylepadding:10px 15px !important;min-height:50px !important;height:50px !important;max-height:50px !important;overflow:hidden>div classd-flex stylealign-items:center;height:100%;justify-content:space-between>div classnavbar-brand>a classlogo-text styleline-height:1;display:flex;align-items:center;height:24px href/>img srcstatic/img/favicon.svg altAl Fu Logo styleheight:24px !important;width:24px !important;filter:invert(1);margin:0;object-fit:contain/>/a>/div>button classtoggler-menu >span>/span>span>/span>span>/span>/button>/div>/div>header classheader-left >div classscroll-bar>div classhl-top>div classhl-logo>div classimg>img srcstatic/img/Al headshot.jpg title altAl Fu - Fullstack Developer stylewidth:120%;height:auto/>/div>div stylemargin-top:10px classjsx-842940fa43e0ab58>img srcstatic/img/logo.svg altAl Fu Logo styleheight:80px;width:auto;max-width:420px classjsx-842940fa43e0ab58 animated-logo/>/div>/div>/div>ul classnav nav-menu idpp-menu>li data-menuanchorhome classactive>a classnav-link href#home>i classti-home>/i>span>Home/span>/a>/li>li data-menuanchorabout>a classnav-link href#about>i classti-id-badge>/i>span>About Me/span>/a>/li>li data-menuanchorservices>a classnav-link href#services>i classti-panel>/i>span>Services/span>/a>/li>li data-menuanchorwork>a classnav-link href#work>i classti-bookmark-alt>/i>span>Portfolio/span>/a>/li>li data-menuanchorcontactme>a classnav-link href#contactme>i classti-map-alt>/i>span>Contact/span>/a>/li>/ul>/div>div classnav justify-content-center social-icons>a hrefhttps://www.linkedin.com/in/alfuguo target_blank relnoopener noreferrer>i classfab fa-linkedin-in>/i>/a>a hrefhttps://github.com/alfuguo target_blank relnoopener noreferrer>i classfab fa-github>/i>/a>/div>/header>main classmain-left pp-main-section>section idhome data-nav-tooltipHome styleposition:relative;overflow:hidden classjsx-8164f075df013dab pp-section pp-scrollable>div styleposition:relative;z-index:2 classjsx-8164f075df013dab home-banner>div classjsx-8164f075df013dab container>div classjsx-8164f075df013dab row full-screen align-items-center>div classjsx-8164f075df013dab col-lg-6>div styletransform:translateY(50px);opacity:0;transition:all 0.8s ease-out classjsx-8164f075df013dab type-box mobile-center>h6 styleanimation:none;font-family:'Roboto', sans-serif classjsx-8164f075df013dab>Hello, I am/h6>h1 stylebackground:linear-gradient(45deg, #2fbf71, #1e90ff);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;animation:none;font-size:3.5rem;font-weight:700;font-family:'Space Grotesk', sans-serif classjsx-8164f075df013dab font-alt>Al Fu/h1>div styleanimation:none;font-size:1.4rem;font-family:'Space Grotesk', sans-serif classjsx-8164f075df013dab typing-container>p stylemargin:0;width:100% classjsx-8164f075df013dab lead>I am a Passionate!-- --> span stylecolor:#2fbf71;font-weight:600 classjsx-8164f075df013dab>span styleopacity:1;transition:opacity 0.1s classjsx-8164f075df013dab>|/span>/span>/p>/div>div styleanimation:none;line-height:1.7;font-family:'Roboto', sans-serif classjsx-8164f075df013dab desc enhanced-description>p stylemargin-bottom:1.5rem;font-size:1.1rem;color:#e0e0e0 classjsx-8164f075df013dab>I build scalable web applications using!-- --> span stylecolor:#2fbf71;font-weight:600;background:linear-gradient(45deg, #2fbf71, #4ecdc4);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text classjsx-8164f075df013dab>Java, Spring Boot, React, and TypeScript/span> !-- -->with expertise in:/p>div stylebackground:rgba(47, 191, 113, 0.05);border:1px solid rgba(47, 191, 113, 0.2);border-radius:12px;padding:1.5rem;margin:0;backdrop-filter:blur(10px) classjsx-8164f075df013dab>div styledisplay:grid;gap:0.8rem;line-height:1.6 classjsx-8164f075df013dab>div styledisplay:flex;align-items:center classjsx-8164f075df013dab skill-item>i stylemargin-right:0.8rem;color:#2fbf71;font-size:1rem;transition:all 0.3s ease;cursor:pointer;flex-shrink:0 classjsx-8164f075df013dab fas fa-cogs skill-icon>/i>span classjsx-8164f075df013dab>strong stylebackground:linear-gradient(45deg, #2fbf71, #4ecdc4);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:600 classjsx-8164f075df013dab>RESTful API/strong> development and microservices/span>/div>div styledisplay:flex;align-items:center classjsx-8164f075df013dab skill-item>i stylemargin-right:0.8rem;color:#2fbf71;font-size:1rem;transition:all 0.3s ease;cursor:pointer;flex-shrink:0 classjsx-8164f075df013dab fas fa-palette skill-icon>/i>span classjsx-8164f075df013dab>strong stylebackground:linear-gradient(45deg, #2fbf71, #4ecdc4);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:600 classjsx-8164f075df013dab>Modern UIs/strong> with React, Next.js & Material UI/span>/div>div styledisplay:flex;align-items:center classjsx-8164f075df013dab skill-item>i stylemargin-right:0.8rem;color:#2fbf71;font-size:1rem;transition:all 0.3s ease;cursor:pointer;flex-shrink:0 classjsx-8164f075df013dab fas fa-database skill-icon>/i>span classjsx-8164f075df013dab>strong stylebackground:linear-gradient(45deg, #2fbf71, #4ecdc4);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:600 classjsx-8164f075df013dab>SQL databases/strong> and third-party API integration/span>/div>div styledisplay:flex;align-items:center classjsx-8164f075df013dab skill-item>i stylemargin-right:0.8rem;color:#2fbf71;font-size:1rem;transition:all 0.3s ease;cursor:pointer;flex-shrink:0 classjsx-8164f075df013dab fas fa-sync-alt skill-icon>/i>span classjsx-8164f075df013dab>strong stylebackground:linear-gradient(45deg, #2fbf71, #4ecdc4);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:600 classjsx-8164f075df013dab>Agile development/strong> and Git version control/span>/div>/div>/div>h4 stylemargin-top:1.5rem;margin-bottom:0.5rem;font-size:1.2rem;color:#2fbf71;font-weight:600;font-family:'Space Grotesk', sans-serif classjsx-8164f075df013dab>Tech Stack:/h4>/div>div styleanimation:none;margin-top:1.5rem classjsx-8164f075df013dab tech-stack-section>div styledisplay:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:1rem classjsx-8164f075df013dab>span styledisplay:flex;align-items:center;justify-content:center;gap:0.5rem;background:rgba(47, 191, 113, 0.1);border:1px solid rgba(47, 191, 113, 0.3);border-radius:12px;padding:0.6rem 1.1rem;font-size:0.85rem;font-weight:500;color:#e0e0e0;transition:all 0.3s ease;cursor:pointer;backdrop-filter:blur(10px) classjsx-8164f075df013dab tech-pill>i stylecolor:#2fbf71;font-size:1.3rem;transition:all 0.3s ease classjsx-8164f075df013dab fab fa-java tech-icon>/i>Java/span>span styledisplay:flex;align-items:center;justify-content:center;gap:0.5rem;background:rgba(47, 191, 113, 0.1);border:1px solid rgba(47, 191, 113, 0.3);border-radius:12px;padding:0.6rem 1.1rem;font-size:0.85rem;font-weight:500;color:#e0e0e0;transition:all 0.3s ease;cursor:pointer;backdrop-filter:blur(10px) classjsx-8164f075df013dab tech-pill>i stylecolor:#2fbf71;font-size:1.3rem;transition:all 0.3s ease classjsx-8164f075df013dab fab fa-react tech-icon>/i>React/span>span styledisplay:flex;align-items:center;justify-content:center;gap:0.5rem;background:rgba(47, 191, 113, 0.1);border:1px solid rgba(47, 191, 113, 0.3);border-radius:12px;padding:0.6rem 1.1rem;font-size:0.85rem;font-weight:500;color:#e0e0e0;transition:all 0.3s ease;cursor:pointer;backdrop-filter:blur(10px) classjsx-8164f075df013dab tech-pill>i stylecolor:#2fbf71;font-size:1.1rem;transition:all 0.3s ease classjsx-8164f075df013dab fas fa-code tech-icon>/i>TypeScript/span>span styledisplay:flex;align-items:center;justify-content:center;gap:0.5rem;background:rgba(47, 191, 113, 0.1);border:1px solid rgba(47, 191, 113, 0.3);border-radius:12px;padding:0.6rem 1.1rem;font-size:0.85rem;font-weight:500;color:#e0e0e0;transition:all 0.3s ease;cursor:pointer;backdrop-filter:blur(10px) classjsx-8164f075df013dab tech-pill>i stylecolor:#2fbf71;font-size:1.1rem;transition:all 0.3s ease classjsx-8164f075df013dab fas fa-database tech-icon>/i>SQL/span>/div>/div>div styleanimation:none;margin-top:1.5rem classjsx-8164f075df013dab btn-bar>a href/static/Alfu_CV.pdf downloadAl_Fu_CV.pdf target_blank relnoreferrer classjsx-8164f075df013dab px-btn px-btn-theme>Download CV/a>/div>/div>/div>div classjsx-8164f075df013dab col-lg-6>div styletransform:translateY(50px);opacity:0;transition:all 0.8s ease-out 0.6s;position:relative;display:flex;justify-content:center;align-items:center;height:100% classjsx-8164f075df013dab hb-img>img srcstatic/img/alfu-profile.jpg title altAl Fu - Fullstack Developer stylewidth:400px;height:400px;object-fit:cover;border-radius:15px;transition:all 0.4s ease;cursor:pointer classjsx-8164f075df013dab profile-image/>/div>/div>/div>/div>/div>/section>section idabout data-nav-tooltipAbout classpp-section pp-scrollable section counter>div classcontainer>div classrow align-items-center justify-content-center>div classcol-lg-6 m-15px-tb>div classabout-me>div classimg>div classimg-in>img srcstatic/img/fullstack dev.jpg title altAl Fu - Fullstack Developer/>/div>/div>/div>/div>div classcol-lg-6 m-15px-tb>div classabout-info>div classtitle>h3 stylecolor:#fff;font-size:2.5rem;font-weight:700;margin-bottom:30px;font-family:'Space Grotesk', sans-serif>About me./h3>/div>div classabout-text>h3 stylecolor:#fff;font-size:1.8rem;font-weight:600;line-height:1.4;margin-bottom:25px;letter-spacing:-0.5px;font-family:'Space Grotesk', sans-serif>I'm a Full Stack Developer who builds solutions that make a difference./h3>p stylecolor:#ccc;font-size:1.1rem;line-height:1.8;margin-bottom:30px;letter-spacing:0.2px;font-family:'Roboto', sans-serif>I'm a dedicated Full Stack Developer with expertise in Java, Spring Boot, React, and TypeScript. I specialize in building scalable web applications and RESTful APIs from scratch. Before transitioning to tech, I spent 8 years in hospitality management, which taught me that great software, like great service, anticipates user needs. I love working with teams to transform ideas into production-ready applications that deliver real business value./p>div classbtn-bar>a classpx-btn px-btn-theme href#contactme>span>Contact Me/span>/a>/div>/div>/div>/div>/div>div classseparated>/div>div classtitle>h3 stylecolor:#fff;font-size:2.2rem;font-weight:600;text-align:center;margin-bottom:40px;font-family:'Space Grotesk', sans-serif>Education & Skills/h3>/div>div classrow>div classcol-lg-4 m-15px-tb styledisplay:flex;align-items:flex-end>ul classaducation-box stylewidth:100%>li>span>2023-2024/span>h6>Java Full Stack Development/h6>p>Coder's Campus/p>/li>li>span>2022/span>h6>Google IT Support Certificate/h6>p>Google/p>/li>li>span>2008-2011/span>h6>MBA International Hospitality Management/h6>p>Institut Vatel, France/p>/li>/ul>/div>div classcol-lg-7 ml-auto m-15px-tb>div classskills-box>h3>My skills/h3>p>I'm passionate about full stack development with a focus on creating efficient, scalable, and user-friendly applications. Here are my core technical skills:/p>div classskills-grid>div classskill-item>i classfab fa-java>/i>span>Java/span>/div>div classskill-item>i classfas fa-leaf>/i>span>Spring Boot/span>/div>div classskill-item>i classfab fa-react>/i>span>React.js/span>/div>div classskill-item>i classfas fa-arrow-right>/i>span>Next.js/span>/div>div classskill-item>i classfab fa-node-js>/i>span>Node.js/span>/div>div classskill-item>i classfab fa-js-square>/i>span>JavaScript/span>/div>div classskill-item>i classfas fa-code>/i>span>TypeScript/span>/div>div classskill-item>i classfas fa-database>/i>span>SQL/PostgreSQL/span>/div>div classskill-item>i classfas fa-exchange-alt>/i>span>RESTful APIs/span>/div>div classskill-item>i classfab fa-figma>/i>span>Figma/span>/div>div classskill-item>i classfas fa-video>/i>span>Premiere Pro/span>/div>div classskill-item>i classfas fa-palette>/i>span>Illustrator/span>/div>/div>/div>/div>/div>div classseparated>/div>div classtitle>h3 stylecolor:#fff;font-size:2.2rem;font-weight:600;text-align:center;margin-bottom:40px;font-family:'Space Grotesk', sans-serif>Experience./h3>/div>div classresume-box>div classresume-row>div classrow>div classcol-12>div classrb-right>h6>Full Stack Java Developer/h6>label>We Make Good Software | Remote | 2024 - Present/label>div classrb-time>Full Time/div>div>ul>li>Developed and maintained scalable web applications using Spring Boot, React, and TypeScript/li>li>Built RESTful APIs and integrated third-party services to enhance application functionality/li>li>Collaborated with cross-functional teams in agile environments to deliver high-quality software solutions/li>li>Implemented responsive designs using Material UI and optimized applications for performance/li>li>Worked with SQL databases for data management and query optimization/li>/ul>/div>/div>/div>/div>/div>div classresume-row>div classrow>div classcol-12>div classrb-right>h6>Fairmont Gold Supervisor / Sales Administrative Assistant / IT Support/h6>label>Fairmont Hotels | Washington D.C. | 2013 - 2017/label>div classrb-time>Full Time/div>div>ul>li>Managed client relationships and coordinated operations for VIP guests suites/li>li>Increased floor revenue from $273 to $315 through strategic data analysis/li>li>Provided technical support for hotel property management system (PMS) and booking platforms/li>li>Troubleshot hardware/software issues for front desk operations and guest services systems/li>li>Maintained and updated client database using SQL queries for reporting and analytics/li>li>Automated daily reporting workflows using VBA macros and Excel integrations/li>/ul>/div>/div>/div>/div>/div>/div>/div>/section>section idservices data-nav-tooltipServices classpp-section pp-scrollable section>div classcontainer>div classtitle>h3>What I do?/h3>/div>div classrow>div classcol-sm-6 m-15px-tb>div classfeature-box-01 media>i classicon theme-bg icon-desktop>/i>div classfeature-content media-body>h5>Frontend Development/h5>p>I create modern, responsive, and interactive user interfaces using React, TypeScript, Material UI, and modern CSS frameworks. I focus on delivering exceptional user experiences with clean, maintainable code and pixel-perfect designs./p>/div>/div>/div>div classcol-sm-6 m-15px-tb>div classfeature-box-01 media>i classicon theme-bg icon-tools>/i>div classfeature-content media-body>h5>Backend Development/h5>p>I build robust server-side applications using Java, Spring Boot, and RESTful API architecture. I design scalable APIs, integrate third-party services, and ensure efficient data management with SQL databases./p>/div>/div>/div>div classcol-sm-6 m-15px-tb>div classfeature-box-01 media>i classicon theme-bg icon-mobile>/i>div classfeature-content media-body>h5>Full-Stack Solutions/h5>p>I provide end-to-end development services, from concept to deployment. I handle both frontend and backend development with Java/Spring Boot and React, ensuring seamless integration and optimal performance across the entire application./p>/div>/div>/div>div classcol-sm-6 m-15px-tb>div classfeature-box-01 media>i classicon theme-bg icon-documents>/i>div classfeature-content media-body>h5>Database Design/h5>p>I design and optimize databases using SQL (PostgreSQL, MySQL) and MongoDB. I ensure data integrity, implement efficient queries and stored procedures, and create scalable database architectures for enterprise applications./p>/div>/div>/div>div classcol-sm-6 m-15px-tb>div classfeature-box-01 media>i classicon theme-bg icon-genius>/i>div classfeature-content media-body>h5>API Development/h5>p>I specialize in designing and building RESTful APIs with Spring Boot. I implement secure authentication, handle complex data flows, integrate third-party services, and ensure APIs are scalable, well-documented, and maintainable./p>/div>/div>/div>div classcol-sm-6 m-15px-tb>div classfeature-box-01 media>i classicon theme-bg icon-target>/i>div classfeature-content media-body>h5>AI Development & Integration/h5>p>I design, build, and integrate AI-powered solutions to enhance applications and user experiences. From training custom models to implementing intelligent automation, I use modern AI tools and APIs to create smarter, more adaptive systems./p>/div>/div>/div>/div>/div>/section>section idwork data-nav-tooltipPortfolio classpp-section pp-scrollable section>div classcontainer>div classtitle>h3>My Portfolio/h3>/div>div classportfolio-filter-01>ul classfilter nav>li classactive>All/li>li class>Web Apps/li>li class>Mobile Apps/li>/ul>/div>div classportfolio-content>div classrow stylealign-items:flex-start>div classcol-sm-6 col-lg-4 grid-item stylemargin-bottom:40px;display:flex;flex-direction:column>div classportfolio-image-card styleheight:280px;background-color:#1e1e2e;border-radius:12px;overflow:hidden;box-shadow:0 4px 15px rgba(0,0,0,0.3);transition:transform 0.3s ease, box-shadow 0.3s ease;margin-bottom:20px;position:relative>div classportfolio-img stylewidth:100%;height:100%;overflow:hidden;background-color:#2a2a3e;display:flex;align-items:center;justify-content:center;padding:20px>img srcstatic/img/Yeahapp.png title altYEAH (Your Engagement and Accountability Helper) stylemax-width:100%;max-height:100%;object-fit:contain;border-radius:4px/>/div>div classportfolio-overlay styleposition:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(30, 30, 46, 0.95);display:flex;flex-direction:column;justify-content:center;align-items:center;opacity:0;transition:opacity 0.3s ease;padding:20px>div classportfolio-tech styledisplay:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;justify-content:center>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Java/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Spring Boot/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>MySQL/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Hibernate/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>React/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>TypeScript/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Twilio/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Anthropic API/span>/div>div styletext-align:center>a hrefhttps://www.yeahapp.com/ classpx-btn px-btn-theme target_blank relnoopener noreferrer>View Project/a>/div>/div>/div>div classportfolio-info stylecolor:#fff;display:flex;flex-direction:column>h5 styletext-align:center;margin-bottom:15px;color:#2fbf71;font-size:18px;font-weight:600;min-height:50px;display:flex;align-items:center;justify-content:center>YEAH (Your Engagement and Accountability Helper)/h5>p styletext-align:left;margin-bottom:0;line-height:1.6;color:#ccc;flex:1>SaaS platform that boosts course engagement and completion through automated check-ins, sentiment analysis, and AI-driven goal tracking./p>/div>/div>div classcol-sm-6 col-lg-4 grid-item stylemargin-bottom:40px;display:flex;flex-direction:column>div classportfolio-image-card styleheight:280px;background-color:#1e1e2e;border-radius:12px;overflow:hidden;box-shadow:0 4px 15px rgba(0,0,0,0.3);transition:transform 0.3s ease, box-shadow 0.3s ease;margin-bottom:20px;position:relative>div classportfolio-img stylewidth:100%;height:100%;overflow:hidden;background-color:#2a2a3e;display:flex;align-items:center;justify-content:center;padding:20px>img srcstatic/img/Harvest Market.png title altHarvest Market stylemax-width:100%;max-height:100%;object-fit:contain;border-radius:4px/>/div>div classportfolio-overlay styleposition:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(30, 30, 46, 0.95);display:flex;flex-direction:column;justify-content:center;align-items:center;opacity:0;transition:opacity 0.3s ease;padding:20px>div classportfolio-tech styledisplay:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;justify-content:center>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Java/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Spring Boot/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>MySQL/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Hibernate/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>React/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>JavaScript/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>Google Maps API/span>/div>div styletext-align:center>a href# classpx-btn px-btn-theme target_blank relnoopener noreferrer>View Project/a>/div>/div>/div>div classportfolio-info stylecolor:#fff;display:flex;flex-direction:column>h5 styletext-align:center;margin-bottom:15px;color:#2fbf71;font-size:18px;font-weight:600;min-height:50px;display:flex;align-items:center;justify-content:center>Harvest Market/h5>p styletext-align:left;margin-bottom:0;line-height:1.6;color:#ccc;flex:1>A community-focused platform connecting local farmers with consumers. Features fresh produce boxes, vendor recipes, market locations, and sustainable shopping practices./p>/div>/div>div classcol-sm-6 col-lg-4 grid-item stylemargin-bottom:40px;display:flex;flex-direction:column>div classportfolio-image-card styleheight:280px;background-color:#1e1e2e;border-radius:12px;overflow:hidden;box-shadow:0 4px 15px rgba(0,0,0,0.3);transition:transform 0.3s ease, box-shadow 0.3s ease;margin-bottom:20px;position:relative>div classportfolio-img stylewidth:100%;height:100%;overflow:hidden;background-color:#2a2a3e;display:flex;align-items:center;justify-content:center;padding:20px>img srcstatic/img/Yeahphoneapp.png title altYEAH Mobile App stylemax-width:100%;max-height:100%;object-fit:contain;border-radius:4px/>/div>div classportfolio-overlay styleposition:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(30, 30, 46, 0.95);display:flex;flex-direction:column;justify-content:center;align-items:center;opacity:0;transition:opacity 0.3s ease;padding:20px>div classportfolio-tech styledisplay:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;justify-content:center>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>React Native/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>REST APIs/span>span classtech-tag stylebackground-color:#2fbf71;color:white;padding:6px 12px;border-radius:15px;font-size:12px;font-weight:500;white-space:nowrap>YEAH Backend Integration/span>/div>div styletext-align:center>a hrefhttps://dev.yeahapp.com/ classpx-btn px-btn-theme target_blank relnoopener noreferrer>View Project/a>/div>/div>/div>div classportfolio-info stylecolor:#fff;display:flex;flex-direction:column>h5 styletext-align:center;margin-bottom:15px;color:#2fbf71;font-size:18px;font-weight:600;min-height:50px;display:flex;align-items:center;justify-content:center>YEAH Mobile App/h5>p styletext-align:left;margin-bottom:0;line-height:1.6;color:#ccc;flex:1>Companion mobile app for the YEAH SaaS platform. Enables students and clients to receive automated check-ins, track progress, and interact with AI-powered feedback anytime, anywhere./p>/div>/div>/div>/div>/div>/section>section idcontactme data-nav-tooltipContact classpp-section pp-scrollable section>div classcontainer>div classtitle>h3>Get In Touch/h3>/div>div classrow styledisplay:flex;align-items:stretch>div classcol-lg-5 col-xl-4 m-15px-tb styledisplay:flex>div classcontact-info styledisplay:flex;flex-direction:column;height:100%;padding:30px>h4 stylecolor:#2fbf71;margin-bottom:20px;font-size:24px;font-weight:600>Let's work together!/h4>p stylecolor:#ccc;line-height:1.6;margin-bottom:30px>I'm always interested in new opportunities and exciting projects. Whether you have a project in mind or just want to chat about technology, feel free to reach out!/p>div classcontact-item styledisplay:flex;align-items:center;margin-bottom:20px>div classcontact-icon stylemargin-right:15px;color:#2fbf71;font-size:18px>i classti-location-pin>/i>/div>div classcontact-text>h6 stylemargin:0;display:inline;margin-right:10px;color:#fff;font-weight:600>Address:/h6>span stylecolor:#ccc>College Park, Maryland, United States/span>/div>/div>div classcontact-item styledisplay:flex;align-items:center;margin-bottom:20px>div classcontact-icon stylemargin-right:15px;color:#2fbf71;font-size:18px>i classti-mobile>/i>/div>div classcontact-text>h6 stylemargin:0;display:inline;margin-right:10px;color:#fff;font-weight:600>Phone:/h6>span stylecolor:#ccc>+1 (703) 894-8202/span>/div>/div>div classcontact-item styledisplay:flex;align-items:center;margin-bottom:20px>div classcontact-icon stylemargin-right:15px;color:#2fbf71;font-size:18px>i classti-email>/i>/div>div classcontact-text>h6 stylemargin:0;display:inline;margin-right:10px;color:#fff;font-weight:600>Email:/h6>span stylecolor:#ccc>al.fuguo@gmail.com/span>/div>/div>/div>/div>div classcol-lg-7 col-xl-8 m-15px-tb styledisplay:flex>div classcontact-form styledisplay:flex;flex-direction:column;height:100%;padding:30px;width:100%>h4 stylecolor:#2fbf71;margin-bottom:20px;font-size:24px;font-weight:600>Contact/h4>form>div classrow>div classcol-md-6>div classform-group>input namename placeholderName * classform-control typetext required value/>/div>/div>div classcol-md-6>div classform-group>input nameemail placeholderEmail * classform-control typeemail required value/>/div>/div>div classcol-12>div classform-group>input namesubject placeholderSubject * classform-control typetext required value/>/div>/div>div classcol-md-12>div classform-group>textarea namemessage placeholderYour message * rows5 classform-control required>/textarea>/div>/div>div classcol-md-12>div classsend>button classpx-btn px-btn-theme typesubmit>Send Message/button>/div>/div>/div>/form>/div>/div>/div>/div>/section>/main>div classday-night s-icon>div classmoon>i classti-moon>/i>/div>/div>/div>script id__NEXT_DATA__ typeapplication/json>{props:{pageProps:{}},page:/,query:{},buildId:w1g27VTNj8-2UAM8q3SHT,nextExport:true,autoExport:true,isFallback:false,scriptLoader:}/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]