nginx
tcp/80
Open service 46.23.81.157:80 · matthewlang.dev
2026-01-11 21:27
HTTP/1.1 302 Moved Temporarily Server: nginx Date: Sun, 11 Jan 2026 21:27:12 GMT Content-Type: text/html Content-Length: 138 Connection: close Location: https://matthewlang.dev/ Page title: 302 Found <html> <head><title>302 Found</title></head> <body> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html>
Open service 46.23.81.157:443 · matthewlang.dev
2026-01-11 21:27
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Request-Methods: GET, HEAD, OPTIONS
Content-Length: 7621
Content-Security-Policy: default-src 'self' data: blob:; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; worker-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob:; frame-src https:; img-src data: https:; media-src https:; object-src 'none'; sandbox allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts;
Content-Type: text/html; charset=utf-8
Last-Modified: Sun, 11 Jan 2026 21:24:47 GMT
Vary: Accept-Encoding
Date: Sun, 11 Jan 2026 21:27:12 GMT
Connection: close
Page title: Matthew Lang - Web Developer: Building modern web experiences
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Matthew Lang - Web Developer: Building modern web experiences</title>
<meta name="description" content="Portfolio of Matthew Lang, a web developer specializing in modern web technologies and clean design." />
<link rel="stylesheet" href="/_bridgetown/static/index.JYDZLHLG.css" />
<script src="/_bridgetown/static/index.P6KJZRZR.js" defer></script>
<script type="module">let lastmod = 0
let reconnectAttempts = 0
function startLiveReload() {
const connection = new EventSource("/_bridgetown/live_reload")
connection.addEventListener("message", event => {
reconnectAttempts = 0
if (document.querySelector("#bridgetown-build-error")) document.querySelector("#bridgetown-build-error").close()
if (event.data == "reloaded!") {
location.reload()
} else {
const newmod = Number(event.data)
if (lastmod > 0 && newmod > 0 && lastmod < newmod) {
location.reload()
} else {
lastmod = newmod
}
}
})
connection.addEventListener("builderror", event => {
let dialog = document.querySelector("#bridgetown-build-error")
if (!dialog) {
dialog = document.createElement("dialog")
dialog.id = "bridgetown-build-error"
dialog.style.borderColor = "red"
dialog.style.fontSize = "110%"
dialog.innerHTML = `
<p style="color:red">There was an error when building the site:</p>
<output><pre></pre></output>
<p><small>Check your Bridgetown logs for further details.</small></p>
`
document.body.appendChild(dialog)
dialog.showModal()
}
dialog.querySelector("pre").textContent = JSON.parse(event.data)
})
connection.addEventListener("error", () => {
if (connection.readyState === 2) {
// reconnect with new object
connection.close()
reconnectAttempts++
if (reconnectAttempts < 25) {
console.warn("Live reload: attempting to reconnect in 3 seconds...")
setTimeout(() => startLiveReload(), 3000)
} else {
console.error("Too many live reload connections failed. Refresh the page to try again.")
}
}
})
}
startLiveReload()
</script>
</head>
<body class="default ">
<main>
<section class="hero">
<div class="hero-content">
<h1 class="hero-title">
<span class="syntax-bracket"><</span><span class="name-text">Matthew Lang</span><span class="syntax-bracket">/></span>
</h1>
<p class="hero-subtitle">Building modern web experiences</p>
<div class="hero-social">
<a href="https://sr.ht/~matthewlang/" target="_blank" rel="noopener noreferrer" aria-label="SourceHut">
<svg width="24" height="24" viewBox="0 0 512 512" fill="currentColor">
<path d="M256 56c-110.3 0-200 89.7-200 200s89.7 200 200 200 200-89.7 200-200S366.3 56 256 56zm0 368c-92.6 0-168-75.4-168-168S163.4 88 256 88s168 75.4 168 168-75.4 168-168 168zm0-304c-75.1 0-136 60.9-136 136s60.9 136 136 136 136-60.9 136-136-60.9-136-136-136zm0 240c-57.3 0-104-46.7-104-104s46.7-104 104-104 104 46.7 104 104-46.7 104-104 104z"/>
</svg>
</a>
<a href="https://micro.blog/matthewlang" target="_blank" rel="noopener noreferrer" aria-label="Micro.blog">
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2C6.48 2 2 6.48 2 12c0 4.41 2.87 8.15 6.84 9.49.5.09.68-.22.68-.48 0-.24-.01-.87-.01-1.71-2.78.6-3.37-1.34-3.37-1.34-.45-1.15-1.11-1.46-1.11-1.46-.91-.62.07-.61.07-.61 1 .07 1.53 1.03 1.53 1.03.89 1.53 2.34 1.09 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.94 0-1.09.39-1.98 1.03-2.68-.1-.25-.45-1.27.1-2.64 0 0 .84-.27 2.75 1.02.8-.22 1.65-.33 2.5-.33.85 0 1.7.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.37.2 2.39.1 2.64.64.7 1.03 1.59 1.03 2.68 0 3.84-2.34 4.68-4.57 4.93.36.31.68.92.68 1.85 0 1.34-.01 2.42-.01 2.75 0 .27.18.58.69.48C19.14 20.15 22 16.41 22 12c0-5.52-4.48-10-10-10z"/>
</svg>
</a>
Open service 2a03:6000:1813:1337::157:80 · matthewlang.dev
2026-01-11 21:27
HTTP/1.1 302 Moved Temporarily Server: nginx Date: Sun, 11 Jan 2026 21:27:12 GMT Content-Type: text/html Content-Length: 138 Connection: close Location: https://matthewlang.dev/ Page title: 302 Found <html> <head><title>302 Found</title></head> <body> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html>
Open service 2a03:6000:1813:1337::157:443 · matthewlang.dev
2026-01-11 21:27
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Request-Methods: GET, HEAD, OPTIONS
Content-Length: 7621
Content-Security-Policy: default-src 'self' data: blob:; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; worker-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob:; frame-src https:; img-src data: https:; media-src https:; object-src 'none'; sandbox allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts;
Content-Type: text/html; charset=utf-8
Last-Modified: Sun, 11 Jan 2026 21:24:47 GMT
Vary: Accept-Encoding
Date: Sun, 11 Jan 2026 21:27:12 GMT
Connection: close
Page title: Matthew Lang - Web Developer: Building modern web experiences
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Matthew Lang - Web Developer: Building modern web experiences</title>
<meta name="description" content="Portfolio of Matthew Lang, a web developer specializing in modern web technologies and clean design." />
<link rel="stylesheet" href="/_bridgetown/static/index.JYDZLHLG.css" />
<script src="/_bridgetown/static/index.P6KJZRZR.js" defer></script>
<script type="module">let lastmod = 0
let reconnectAttempts = 0
function startLiveReload() {
const connection = new EventSource("/_bridgetown/live_reload")
connection.addEventListener("message", event => {
reconnectAttempts = 0
if (document.querySelector("#bridgetown-build-error")) document.querySelector("#bridgetown-build-error").close()
if (event.data == "reloaded!") {
location.reload()
} else {
const newmod = Number(event.data)
if (lastmod > 0 && newmod > 0 && lastmod < newmod) {
location.reload()
} else {
lastmod = newmod
}
}
})
connection.addEventListener("builderror", event => {
let dialog = document.querySelector("#bridgetown-build-error")
if (!dialog) {
dialog = document.createElement("dialog")
dialog.id = "bridgetown-build-error"
dialog.style.borderColor = "red"
dialog.style.fontSize = "110%"
dialog.innerHTML = `
<p style="color:red">There was an error when building the site:</p>
<output><pre></pre></output>
<p><small>Check your Bridgetown logs for further details.</small></p>
`
document.body.appendChild(dialog)
dialog.showModal()
}
dialog.querySelector("pre").textContent = JSON.parse(event.data)
})
connection.addEventListener("error", () => {
if (connection.readyState === 2) {
// reconnect with new object
connection.close()
reconnectAttempts++
if (reconnectAttempts < 25) {
console.warn("Live reload: attempting to reconnect in 3 seconds...")
setTimeout(() => startLiveReload(), 3000)
} else {
console.error("Too many live reload connections failed. Refresh the page to try again.")
}
}
})
}
startLiveReload()
</script>
</head>
<body class="default ">
<main>
<section class="hero">
<div class="hero-content">
<h1 class="hero-title">
<span class="syntax-bracket"><</span><span class="name-text">Matthew Lang</span><span class="syntax-bracket">/></span>
</h1>
<p class="hero-subtitle">Building modern web experiences</p>
<div class="hero-social">
<a href="https://sr.ht/~matthewlang/" target="_blank" rel="noopener noreferrer" aria-label="SourceHut">
<svg width="24" height="24" viewBox="0 0 512 512" fill="currentColor">
<path d="M256 56c-110.3 0-200 89.7-200 200s89.7 200 200 200 200-89.7 200-200S366.3 56 256 56zm0 368c-92.6 0-168-75.4-168-168S163.4 88 256 88s168 75.4 168 168-75.4 168-168 168zm0-304c-75.1 0-136 60.9-136 136s60.9 136 136 136 136-60.9 136-136-60.9-136-136-136zm0 240c-57.3 0-104-46.7-104-104s46.7-104 104-104 104 46.7 104 104-46.7 104-104 104z"/>
</svg>
</a>
<a href="https://micro.blog/matthewlang" target="_blank" rel="noopener noreferrer" aria-label="Micro.blog">
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2C6.48 2 2 6.48 2 12c0 4.41 2.87 8.15 6.84 9.49.5.09.68-.22.68-.48 0-.24-.01-.87-.01-1.71-2.78.6-3.37-1.34-3.37-1.34-.45-1.15-1.11-1.46-1.11-1.46-.91-.62.07-.61.07-.61 1 .07 1.53 1.03 1.53 1.03.89 1.53 2.34 1.09 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.94 0-1.09.39-1.98 1.03-2.68-.1-.25-.45-1.27.1-2.64 0 0 .84-.27 2.75 1.02.8-.22 1.65-.33 2.5-.33.85 0 1.7.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.37.2 2.39.1 2.64.64.7 1.03 1.59 1.03 2.68 0 3.84-2.34 4.68-4.57 4.93.36.31.68.92.68 1.85 0 1.34-.01 2.42-.01 2.75 0 .27.18.58.69.48C19.14 20.15 22 16.41 22 12c0-5.52-4.48-10-10-10z"/>
</svg>
</a>