AmazonS3
tcp/443
CloudFront
tcp/80
Open service 2600:9000:266e:b600:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:37 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 af3799c72ed879abb7633a4c3e57502e.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: ZgtuivIDArxmwWFY6dked0qyVx2A5sFQes52BxjXB0u0pOYYUakwVQ== 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:266e:b600:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 2146d75cb402f16f98928cb19acf5ff6.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: u3ZkmzTW4pgZmUvHk1nX1TJSEY_oEz-kMxhP-Sq6yk0U58dU33xCrg==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 2600:9000:266e:6600:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 f36453eb82bc9ab0c6e360ac52cc5972.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: 5zwC7Y2uuskBjpVktEcquV_3B_mU5Zry_cresQSJ9e5b_pWiwFg-Wg==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 18.245.31.114:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 f996db233b87d6765cc5ad56701268d8.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: koOdmrbUcaGE4YngHWWn8UmeYpuSYW0igQx0CTInqeRLZuSdvhDk8g== 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 18.245.31.47:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:37 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 e030504e72fa75d92c1856a58b964932.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: mqR_V6u23wXgkKzQ1FQFLVvrdsaP23fSoC99Ru6110Cjpo62o459Hg== 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 18.245.31.114:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 fbd2b51fce9ee4f3aa7b93dbbda3d698.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: bnn2BxrAocwLbs_p3QxqsMpsSaG5O6OArLUGL5j8rSP6mWVRc-lupQ==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 18.245.31.47:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 851fdca2e1873274a995295ecd94732e.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: GPd3DaazO54D9MCkHGJxz43aSMrigw2Oc01eiXSiic-KuMn5s7kAsA==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 2600:9000:266e:4400:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 f36453eb82bc9ab0c6e360ac52cc5972.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: yCcfnFf5uZAZhV9l2-krKRY2XFZi3HE4Ks0Wvkhl2KvQ2mE9ufI3gA== 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:266e:0:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 7b85fc567b776c0d31c5ac07cc6c2ae6.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: naQp-OYlmb-z5hwjyIlCf8V5uBFU_6EqLWfUYtC6AyIXXZfzGxShkA== 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:266e:fa00:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 a4079c0a5989b4b7af98433fdd07f680.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: RPsMdTdJK1XgCWkfsYm-r-zCpdzWR8UgfDRSEc1hOJU67HYVg8Nd0g==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 2600:9000:266e:6600:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 2146d75cb402f16f98928cb19acf5ff6.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: lwTpOIl3-hsi-JCvj7tvlJBduUo9bEV3vJp_z0PgQdcX5-7PY7AGVw== 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:266e:e600:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 b8455bc5c5405f573b6e4da5524ee9e2.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: 4OFcTy3FNlD-yBzaINLVJg1I8J_lZQYDKJpQI-gE9kUW_fRKHPfLPg== 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:266e:4000:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 74cd4e6bd806cc7209ac94e0173f5ac8.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: 4wt4mk1BtlmCqqkDrV2UqKFm7aH1XCRndPll3mMgZdkZV9S9wHnvcA== 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:266e:3200:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 d8ec42efeb409ac816e90eb0236c1f4a.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: WyIkD0EiZZE9DR3-jIUJrG1YETJMcv7B_QnF2WdpKu98e7wkZzgnJg==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 2600:9000:266e:4000:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 2146d75cb402f16f98928cb19acf5ff6.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: 2bY9XzLRXktd0zGFISRw8glrVwhK7SJasRH85LYSIeVA_y_fz7q3JQ==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 2600:9000:266e:fa00:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 a4079c0a5989b4b7af98433fdd07f680.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: sI8fOMwYMRnqy5FIfazs98gsFkLVXlpImdGWgGO71lbDYrBA0S4B2Q== 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:266e:4400:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 a4079c0a5989b4b7af98433fdd07f680.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: TXmlbAOFkH0ulC1E1Z8eWw9W-fU-k888qZmsTQw2yOutW6whOzISog==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 2600:9000:266e:3200:18:98:7200:93a1:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 b0723c68cc136f4e89ad2f6a85c82e12.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: z0Er56Xy0XtxZLv0ww73fVcDDX96Q4bWun3b_AOwPV2h4xXpshCVPA== 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:266e:0:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 9eb1733bea847c3a8f4910adebcc8146.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: DuWlRtSfSK-cJ4qZYvX0QAE6JoWhuldpI2Z2v5HQFRje4daBidChDw==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 2600:9000:266e:e600:18:98:7200:93a1:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 74cd4e6bd806cc7209ac94e0173f5ac8.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: pBHljfhFpTP5mSIv4kMbEgdsGg-_sio9rvbUqcFvAqyIfyRF5VVirg==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 18.245.31.128:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 04d30d89cfeb7f513dc1f5b2d3c605d2.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: o1BYBkzwIZv_4-yKqvzL8qgXTvKUF1Qa-Mvgpoiwtx2ZpHEM0ClRDQ==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
Open service 18.245.31.91:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 f99e0a5708c6297d4aa91b3e4794707e.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: Tgvt3GUnO7IXux3Tib57flKC-0xsLurpMBku_wpW3tvhbnSMpMolzg== 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 18.245.31.128:80 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 22:46:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://edwardboaden.com/ X-Cache: Redirect from cloudfront Via: 1.1 f36453eb82bc9ab0c6e360ac52cc5972.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA56-P8 X-Amz-Cf-Id: QNtW5_Tn3UUYJVFF3O_IvPGaU7MwP7CfgWuhNc1SUbrTlwGVFsYerw== 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 18.245.31.91:443 · edwardboaden.com
2026-01-10 22:46
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11741
Connection: close
Last-Modified: Sat, 08 Nov 2025 17:58:46 GMT
x-amz-server-side-encryption: AES256
Accept-Ranges: bytes
Server: AmazonS3
Date: Sat, 10 Jan 2026 22:46:37 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "3013b02b337d805e9075625bfb49a119"
X-Cache: Error from cloudfront
Via: 1.1 1feab8d6a8e5cc920c359b62fd33d3de.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA56-P8
X-Amz-Cf-Id: eEMB4IYUW7w7Pe4-uc9sZQYCNIUquesnWbuc6FbmVFU00jFQQ9HJbA==
Page title: Edward Boaden - Software Engineer
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Edward Boaden - Software Engineer</title>
<base href="/" />
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-X7K8RELCL3"></script>
<script>
const GA_MEASUREMENT_ID = 'G-X7K8RELCL3';
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', GA_MEASUREMENT_ID, {
// Enhanced measurement features
send_page_view: true,
page_path: window.location.pathname,
// Link tracking
link_attribution: true,
// Enhanced conversions (improves conversion measurement accuracy)
allow_enhanced_conversions: true,
// Session tracking - Lax is more compatible and respects user privacy
cookie_flags: 'SameSite=Lax',
// Debug mode (remove in production if desired)
debug_mode: false
});
// Track scroll depth and time on page (initialized)
let scrollDepthTracked = {};
let scrollTimeout;
let totalVisibleTime = 0;
let lastVisibleTime = Date.now();
// Setup all event listeners after DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
// Track outbound links and file downloads in a single listener
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href) return;
// Track outbound links (only external domains)
if (link.hostname !== window.location.hostname) {
gtag('event', 'click', {
event_category: 'outbound',
event_label: link.href,
transport_type: 'beacon'
});
}
// Track file downloads
if (/\.(pdf|doc|docx|zip|rar|txt|csv)$/i.test(link.href)) {
gtag('event', 'file_download', {
file_name: link.href.split('/').pop(),
link_url: link.href
});
}
});
// Track scroll depth with throttling
window.addEventListener('scroll', function() {
if (scrollTimeout) return;
scrollTimeout = setTimeout(function() {
scrollTimeout = null;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
// Skip scroll tracking if page content fits in viewport
if (maxScroll <= 0) return;
const scrollPercent = Math.round((window.scrollY / maxScroll) * 100);
[25, 50, 75, 90].forEach(function(depth) {
if (scrollPercent >= depth && !scrollDepthTracked[depth]) {
scrollDepthTracked[depth] = true;
gtag('event', 'scroll', {
event_category: 'engagement',
event_label: depth + '%',
value: depth
});
}
});
}, 100);
});
// Track visibility changes to accumulate visible time
document.addEventListener('visibilitychange', function() {
if (document.hidden) {
// Page is hidden - add visible time to total
totalVisibleTime += Date.now() - lastVisibleTime;
} else {
// Page is visible again - reset visible time tracker
lastVisibleTime = Date.now();
}
});
// Send time_on_page event once per session on pagehide
window.addEventListener('pagehide', function() {
// Add any remaining visible time if page is currently visible
if (!document.hidden) {
totalVisibleTime += Date.now() - lastVisibleTime;
}
const timeOnPage = Math.round(totalVisibleTime / 1000);
gtag('event', 'time_on_page', {
2600:9000:266e:b600:18:98:7200:93a1 2 2600:9000:266e:6600:18:98:7200:93a1 1 18.245.31.114 1 18.245.31.47 1 2600:9000:266e:4400:18:98:7200:93a1 1 2600:9000:266e:0:18:98:7200:93a1 1 2600:9000:266e:fa00:18:98:7200:93a1 1 2600:9000:266e:e600:18:98:7200:93a1 1 2600:9000:266e:4000:18:98:7200:93a1 1 2600:9000:266e:3200:18:98:7200:93a1 1 18.245.31.128 1 18.245.31.91 1