CloudFront
tcp/80
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-25 21:18
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Sun, 25 Jan 2026 21:18:32 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Miss from cloudfront
Via: 1.1 29ce39fa038445a29d70bb2ffb4566d0.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: igIZuyOJif4h8LaPcpxxi6C_2ZJFp1lqjurHKgQ7WBUVO_7ZlnMR_Q==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-23 21:27
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Mon, 19 Jan 2026 07:15:04 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 57b67cb347485d11ae4db855d290d676.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: jXmM4GFQTeqG80qmcSCY7Zu9W1bl3wX_61POjvmRBDAhnIBmlKNiug==
Age: 396741
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-22 21:26
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 21:26:35 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 069f5453cff566814bcfc86b77e93900.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: 8itTcBu0AO8gbOuhh9rzsOJy0MUeYp3bgMc_N0ql1E8Yl_svQ58JIg==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:9600:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:07 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 5c79308f72e53cdf81a950b478a7e144.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: IwpoN-kMSk8B-3kMwN5VZKED6060Qt9rXlztJ8UKRGWVFfnIF_1omg== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:3800:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:07 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 82514a5a8cf35fb3132b0b5ab9cb724c.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: -GVRNJBEmNVcVpbVUZFUrBuDexlgLEP7L2aw8Ie3c8Ad4upxq6L14w== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:3800:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:07 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 77ba839b79ec0a8b2031c8a828e7fdfa.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: GEOHTiPzlQqxKlFVDSGQGkc9NCL0lsuUFJeucS1DJKrvtw1cuHbQFA==
Age: 1
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:6600:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 5626bf35345f32d3e58fb8d33ec4d966.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: 1Rj62iT_oGnGQC3uKgqTGI587salZCiTzmf7A5dgyyIi7nUKkh50YQ== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:6600:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:07 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 4c692717a0e85914a993c3aa5c8a2ef6.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: FIZJTNg_BLYquPeGs8jmHyatWKxzMTSj3LPX-DzyH_PjYWx6DjnYWQ==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:9800:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Fri, 26 Dec 2025 22:27:03 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 d9523e44e96d2539081596bb1d268d44.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: iqOhepikTwdURbFX3m3-XpHjqJXlP0FMlOTKQEKsKzowaGvGuoBURg==
Age: 2297523
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:9600:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Fri, 26 Dec 2025 22:27:03 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 29f7132906866b79866659848b3a3b68.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: i08NsjBIOfecysyv_I8d0krQHy-e8oWjIu4jFv8WVQQyjFGl1MdNTQ==
Age: 2297523
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:4200:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Fri, 26 Dec 2025 22:27:03 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 69cc5dd318e02cb1a7e8cb9951f553d8.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: MdKzxsaJitaNbGz1amGV3GMvr8hUEIYYilL6ON9AOTPnBaRu0drCOg==
Age: 2297523
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:8000:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 d9523e44e96d2539081596bb1d268d44.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: jfnhTd5lfsPjESXNdtSQYour4cK_rA8Wbfjwfn5uCXqgUteLKNZDiw== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:9800:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 54fc556adf6e8c787574c6f132d70178.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: pkPQ6ttOl36imBNWidR8JijB6WAO3sikaLSCp1PtkYMkvZmCEHRuoA== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:8000:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:07 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 5c79308f72e53cdf81a950b478a7e144.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: 9tzjhihXwbPE9WGlATV-PXxZa5lclK-IhK3HHs4LEyncG6fWZIcyxw==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:4200:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 5626bf35345f32d3e58fb8d33ec4d966.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: -ber3nAs_pZ845JliT2vn_D9OYnGRUCMeLXIch6v7PFC19ah224qpA== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:400:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:07 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 626c544a24a86c6cd608360f520b6d8c.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: WKItLvsPTB49KoYlpQUkCAlAd901OuSzqal19oSUcC4jwlGcxX6a7A==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 2600:9000:223d:4000:15:66f9:ea40:93a1:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:07 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 e41703af87be84ac95b3cadf9d8dd470.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: bUnbDJjmsONsxofHFNpvTKVFgnfGUUcy3M9paputWTZKf6_dY1QdqQ==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 52.222.214.82:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 5c79308f72e53cdf81a950b478a7e144.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: QEVYIigNAcnxcNSAQsuzs6HrH11Ne5SSW3wLpvf1m7hTKiYk3IrSHA== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 52.222.214.63:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:07 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 8af5231b014ab5e8c35000dd4cf4b68c.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: WhPJ-PP3JqN4G2BjaL12QKA3ZTQPyXPL8MsZL8Al9JqjexUe6S9gTA==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 52.222.214.63:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 29f7132906866b79866659848b3a3b68.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: navA_QVFGmJaHLWozzNz4HHsRgsWc1OfGUB9OJipcuS9doCaRQU-QA== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:4000:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 122731c1a09cfba14dfeeff504946134.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: OLKgoAioQDYJzq4ygqPZCF8qbOp6imryXXqoZ2aDz1wPr5CnocCPKA== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:223d:400:15:66f9:ea40:93a1:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:06 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 456733511c088f8435091e663b2c5430.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: 9jIysVmFbkP7HdL4DkHArU8Y6ED4JJqkv-XccE_iQ1S4F69_tlseMw== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 52.222.214.82:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Fri, 26 Dec 2025 22:27:03 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 7abd55cee48606340f570b45718202b6.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: s-AJWTrvlmA_MZmauIbklYh0OrgxDRy4tyYaqpi6XhueSde6nvh_7w==
Age: 2297523
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 52.222.214.36:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:07 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 54fc556adf6e8c787574c6f132d70178.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: CTa0RToFG2Z1GJDZUhUowf7hkekHSohPKOSRqh2pe4GjiZeeNso2hw==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 52.222.214.102:443 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 22 Jan 2026 12:39:06 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 51bcd21e941ceaec99864557d86202ae.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P3
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: sK2NMChwsbcR57no1SwZw0UKJre0_jBVxaakNGwBM5TpUsuH7azlcw==
Age: 1
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 52.222.214.36:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:05 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 bfad099b4e1fa2ec7d21876e0293dc20.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: nZRJvD7tks311QckUt5t_rCzM_ofT1Jph7UkSvRePsfF2h-FDC1Jng== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 52.222.214.102:80 · gavinkirwan.com
2026-01-22 12:39
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 22 Jan 2026 12:39:05 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://gavinkirwan.com/ X-Cache: Redirect from cloudfront Via: 1.1 626c544a24a86c6cd608360f520b6d8c.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P3 Alt-Svc: h3=":443"; ma=86400 X-Amz-Cf-Id: 4e0BiOFA72jn4Qn89Y1WnMz6SQzXHIm4irrgpQKY_OO5uyCkvaF0FQ== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-21 21:21
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Mon, 19 Jan 2026 07:15:04 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 c1d0277494606aee35b4b0e97193b9de.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: N1yEc_CIvubXCIv5PUxF_zbhV_Lxhf1SahVygjogA5NwDrq4Zoeoeg==
Age: 223581
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-12 21:16
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Sat, 10 Jan 2026 13:13:59 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 08cc311c58f07b3d148825438fd216f0.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: K0D6xgf0NKXRqxuKO_mcsAmbT8caPtWcfaTpyaWOV9HXJVGCm9orpw==
Age: 201774
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-11 21:18
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Sun, 11 Jan 2026 21:18:58 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 7998e8ed4e1116e9a8c45297629e4b1e.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: GWu3H8SUudUdGEcePIQbOkX3HEBof_F5Z5a0EIt5t_qOuG3qeJlxYw==
Age: 1
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-10 21:19
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Sat, 10 Jan 2026 13:13:59 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 7998e8ed4e1116e9a8c45297629e4b1e.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: NEEzX-gvpA3xT_Yxkk9CMaI0BkVhpu8FOUGxaG-w15Ae7ltSTT6CFA==
Age: 29108
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-09 21:09
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Fri, 09 Jan 2026 21:09:11 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 56cdd31774e37e7bcfeb00436119c788.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: qTodDt1sSEp6jXP13KhbIERg-JJoXezlxMjXLV3_88vvA0Hv89VcwQ==
Age: 1
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-08 21:36
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 08 Jan 2026 21:36:11 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 d8fd0991695c88f66863341843c7d2c8.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: Ks5S6u0n5vWg-gZPDZbB5ZNg9-muBDiX25eKP_PMC2EeqPwgiHVIrA==
Age: 1
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-07 21:20
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Wed, 07 Jan 2026 21:20:06 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 39fec84b1572a459dc64d17fa6b9ede8.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: ObcT4aBd-GFcEtxWZ4ZS4E53oIQAWXc_6EwceFMlEc3iBxUFpG0UqQ==
Age: 2
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-06 21:11
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Tue, 06 Jan 2026 21:11:56 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 8ca7e085bf4730e015c740bd71916324.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: iczUIuUiZNR4GL04uHFfTVjZujYbPrsvyUIq3llA3glLfX3TpmoJ-w==
Age: 1
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-03 21:15
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Sat, 03 Jan 2026 21:15:03 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 2ab3fee9093e2695ace80b87d81229f8.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: FUGXqO7MDrDh1yoVc5iu3PAe_dTzUIIwHbwCrzmQQfo5ZclL--FrFg==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-02 21:19
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Tue, 30 Dec 2025 04:02:23 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 3ef02fad57f56a78118d2d19d41ee246.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: 7Mdtot4BWICJrwywj_QNGmjLlb0XnO_iCyehyLZ5IxEiOqvNB8R1ig==
Age: 321431
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2026-01-01 21:22
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Thu, 01 Jan 2026 21:22:08 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 08d429f60db00306b97babcd18d71312.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: 4Q1EGcgYnYwEj0DJVBnwvs0fkDA3lLwbQG-lL9ScxpjVDdTG3k5yEQ==
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2025-12-31 21:25
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Wed, 31 Dec 2025 21:25:44 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 a6cd0287acc8743160076296d97c1496.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: Mr23oRQhn70l9WCKhsXYrEcS_f6h8wCDf3wjw7f5DHCrmlVgLLMgiQ==
Age: 1
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
Open service 13.225.239.116:443 · gavinkirwan.com
2025-12-22 12:46
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 28957
Connection: close
Date: Fri, 12 Dec 2025 02:30:03 GMT
x-nextjs-cache: HIT
x-nextjs-prerender: 1
x-nextjs-stale-time: 4294967294
x-powered-by: Next.js
Cache-Control: s-maxage=31536000
ETag: "iiqj2dsfvtmcb"
Vary: Accept-Encoding
X-Cache: Hit from cloudfront
Via: 1.1 42909d9efcc869783c7374d4a7dc36dc.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: BRU50-P2
Alt-Svc: h3=":443"; ma=86400
X-Amz-Cf-Id: CBQpFGlR2HrJzqzReq7MdCzHXQxv6bA0zCudnPPgPMpUay9OuRD8Sg==
Age: 900970
Page title: Gavin Kirwan
<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a5f9c288d692a17c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-68f22649503f8e75.js"/><script src="/_next/static/chunks/4bd1b696-1962bfe149af46cd.js" async=""></script><script src="/_next/static/chunks/684-eb234170fdbe031a.js" async=""></script><script src="/_next/static/chunks/main-app-7a751ad1e5ab848b.js" async=""></script><script src="/_next/static/chunks/870fdd6f-0d662ef27d675716.js" async=""></script><script src="/_next/static/chunks/69b09407-79a465d0e1a65ae8.js" async=""></script><script src="/_next/static/chunks/874-6052627df6fde20c.js" async=""></script><script src="/_next/static/chunks/489-5a081beb78575f2b.js" async=""></script><script src="/_next/static/chunks/app/layout-5339c5565bb6cb38.js" async=""></script><script src="/_next/static/chunks/63-dbbcf927ed57a93d.js" async=""></script><script src="/_next/static/chunks/578-38640fb79fd0532f.js" async=""></script><script src="/_next/static/chunks/app/page-7966952231ba4c9c.js" async=""></script><title>Gavin Kirwan</title><meta name="description" content="Gavin Kirwan's personal website"/><link rel="icon" href="/icon.ico?129ef6c34082875d" type="image/x-icon" sizes="16x16"/><script>document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="bg-black"><header class="fixed top-0 left-0 right-0 false z-10 transition duration-100"><div class="flex justify-between items-center container h-16 z-30"><a class="link m-2 text-2xl font-medium z-30" href="#introduction">GK</a><div class="hidden md:flex z-30"><a class="link m-2 text-xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-xl font-normal" href="/#projects">Projects</a></div><div class="md:hidden z-30"><button><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars fa-xl icon" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div></div><div class="hidden top-0 w-full h-full flex flex-col justify-center items-center z-20"><a class="link m-2 text-5xl font-normal" href="/#introduction">Introduction</a><a class="link m-2 text-5xl font-normal" href="/#bio">Bio</a><a class="link m-2 text-5xl font-normal" href="/#projects">Projects</a></div><div class="absolute top-0 bottom-0 left-0 right-0 bg-black false transition duration-100"></div></header><main class="bg-white"><section class="h-screen bg-gradient-to-b from-primary via-secondary to-darkblue" id="introduction"><div class="absolute h-full w-[100%]" id="tsparticles"><canvas style="width:100%;height:100%"></canvas></div><div class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] sm:whitespace-nowrap"><div style="opacity:0;transform:translateY(50px) translateZ(0)"><h1 class="text-subtitle text-white text-4xl md:text-5xl tracking-wide">Hello,<br/><span class="text-title text-white text-5xl md:text-7xl tracking-wide">I'm Gavin Kirwan</span></h1></div><div class="flex justify-center my-10" style="opacity:0;transform:translateY(50px) translateZ(0)"><div class="flex"><a href="https://www.instagram.com/gkirwan43/" target="_blank" class="mx-2"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" class="svg-inline--fa fa-instagram fa-3x icon hover:text-darkblue" role="img" xmlns="http://www
13.225.239.116 2 2600:9000:223d:9600:15:66f9:ea40:93a1 1 2600:9000:223d:3800:15:66f9:ea40:93a1 1 2600:9000:223d:6600:15:66f9:ea40:93a1 1 2600:9000:223d:9800:15:66f9:ea40:93a1 1 2600:9000:223d:4200:15:66f9:ea40:93a1 1 2600:9000:223d:8000:15:66f9:ea40:93a1 1 2600:9000:223d:400:15:66f9:ea40:93a1 1 2600:9000:223d:4000:15:66f9:ea40:93a1 1 52.222.214.82 1 52.222.214.63 1 52.222.214.36 1 52.222.214.102 1