Heroku
tcp/443 tcp/80
Open service 35.71.145.101:443 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:14:52 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187692"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187692"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content:
Open service 75.2.97.79:80 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:15:52 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=IuNuADHkmrnXQh4GG%2BKyWcFBOgB8tH0%2Bh9iY52SIuhQ%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187752"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=IuNuADHkmrnXQh4GG%2BKyWcFBOgB8tH0%2Bh9iY52SIuhQ%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187752"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content:
Open service 75.2.97.79:443 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:14:52 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187692"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187692"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content:
Open service 35.71.145.101:80 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:15:52 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=IuNuADHkmrnXQh4GG%2BKyWcFBOgB8tH0%2Bh9iY52SIuhQ%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187752"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=IuNuADHkmrnXQh4GG%2BKyWcFBOgB8tH0%2Bh9iY52SIuhQ%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187752"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content:
Open service 13.248.132.87:443 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:14:52 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187692"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187692"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content:
Open service 99.83.151.71:443 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:14:52 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187692"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=ueH0Ey9wNboSGxVTdt5ded7zfBQGXoJ3JtcYbzlEZVg%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187692"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content:
Open service 13.248.132.87:80 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:15:53 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=1DgA1b0hA21x2ZpNalohSybzeb%2Ffqp%2BiW22%2Bm4ZSM8E%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187753"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=1DgA1b0hA21x2ZpNalohSybzeb%2Ffqp%2BiW22%2Bm4ZSM8E%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187753"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content:
Open service 99.83.151.71:80 · andylu.ca
2026-01-12 03:14
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Content-Length: 321722
Content-Type: text/html; charset=UTF-8
Date: Mon, 12 Jan 2026 03:15:52 GMT
Etag: W/"4e8ba-199e666f090"
Last-Modified: Wed, 15 Oct 2025 05:45:30 GMT
Nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
Report-To: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=IuNuADHkmrnXQh4GG%2BKyWcFBOgB8tH0%2Bh9iY52SIuhQ%3D\u0026sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add\u0026ts=1768187752"}],"max_age":3600}
Reporting-Endpoints: heroku-nel="https://nel.heroku.com/reports?s=IuNuADHkmrnXQh4GG%2BKyWcFBOgB8tH0%2Bh9iY52SIuhQ%3D&sid=c46efe9b-d3d2-4a0c-8c76-bfafa16c5add&ts=1768187752"
Server: Heroku
Via: 1.1 heroku-router
X-Powered-By: Express
Connection: close
Page title: Andy Lu - Portfolio
<!DOCTYPE html><html lang="en"><head><script src="https://www.googletagmanager.com/gtag/js?id=G-XG1NQYT3DC" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-XG1NQYT3DC")</script><meta charset="utf-8"><link href="/favicon.ico" rel="icon"><link href="https://www.andylu.ca/" rel="canonical"><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport"><link href="https://fonts.googleapis.com" rel="preconnect"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Barlow:wght@300;500&family=Lato:wght@300;400&family=Inspiration&display=swap" rel="stylesheet"><link href="/logo192.png" rel="apple-touch-icon"><link href="/manifest.json" rel="manifest"><script src="/static/js/main.6d2c8178.js" defer></script><link href="/static/css/main.48178586.css" rel="stylesheet"><style data-styled="active" data-styled-version="5.3.3">.geVWOZ{width:100%;height:fit-content;background-color:#20212a;transition:background-color .1s ease-in-out 0s;display:flex;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;position:relative;padding:25px 50px}@media only screen and (max-width:1200px){.geVWOZ{padding:60px 10px}}.kqCKkd{position:absolute;font-size:100px;transform:rotate(180deg);-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;text-orientation:mixed;text-transform:uppercase;color:#f5f5f5;font-family:lato,cursive;opacity:.1;user-select:none;font-weight:300;left:0}@media only screen and (max-width:1000px){.kqCKkd{display:none}}.jCIjnl{width:100%;height:fit-content;min-height:100%;max-width:1600px;content:"";padding:120px;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;position:relative}@media only screen and (max-width:1600px){.jCIjnl{flex-direction:column}}@media only screen and (max-width:1000px){.jCIjnl{padding:60px}}@media only screen and (max-width:768px){.jCIjnl{padding:20px}}.cpamAf{min-height:100vh;position:relative}.jrrHwe{position:absolute;top:-6px;left:-14px;z-index:-10;opacity:.8}@media only screen and (max-width:768px){.jrrHwe{opacity:0}}.ifdiD{width:100%;height:100%;flex:1 1 0%;content:"";display:flex;flex-direction:column;-webkit-box-pack:center;justify-content:center;color:#f5f5f5;padding:0 20px 0 0}@media only screen and (max-width:1600px){.ifdiD{padding:0}}.eehqFj{padding:0 0 0 20px;flex:.8 1 0%}@media only screen and (max-width:1600px){.eehqFj{display:none}}.hSxsYR{font-size:48px;position:relative;z-index:11}@media only screen and (max-width:1000px){.hSxsYR{font-size:calc(38px)}}@media only screen and (max-width:480px){.hSxsYR{font-size:calc(28px)}}.gSRoPl{font-size:inherit;background-image:linear-gradient(to right,#1cffc8,#6892ff);background-clip:text;-webkit-text-fill-color:transparent}.gWpTFE{font-size:inherit}@media only screen and (max-width:768px){.gWpTFE{display:none}}.lnwvey{font-size:20px;line-height:150%;font-weight:300;margin-top:10px;max-width:900px}@media only screen and (max-width:480px){.lnwvey{font-size:calc(16px)}}.dREzWF{margin-top:25px;width:150px;height:50px;border-radius:50px;border:none;color:#fff;background-color:#0697ab;font-size:18px;transition:transform .2s ease-in-out 0s,box-shadow 150ms ease-in-out 0s;cursor:pointer;box-shadow:rgba(0,0,0,.3) 0 5px 5px}.dREzWF:hover{transform:scale(1.05);box-shadow:rgba(0,0,0,.3) 0 5px 10px}.jprwk{display:flex;-webkit-box-align:center;align-items:center;border-left:1px solid rgba(0,0,0,.15);padding-left:20px;position:relative;min-width:100px}@media only screen and (max-width:1000px){.jprwk{border:none;padding:0}}.kqimuU{display:flex;-webkit-box-align:center;align-items:center}.heyuPV{width:36px;height:18px;content:"";border:1px solid rgba(0,0,0,.15);border-radius:10px;position:relative;background-color:#4287f5;box-shadow:rgba(0,0,0,.5) 0 0 4px inset;transition:background-color 150ms ease-in-out 0s;cursor:pointer;margin:0 4px}.fZTtwf{height:14px;width:14px;content: