Caddy
tcp/443 tcp/80
Python 3.13.5
tcp/443
Werkzeug 3.1.3
tcp/443
.DS_Store” is an abbreviation for “Desktop Services Store”. These files are created automatically by Apples “Finder” software (which is part of their OS).
They store information about the files within a folder, including display options of folders, such as icon positions and view settings.
It may happen that .DS_Store files inadvertently leak filenames such as database backups or private administration panels.
Severity: low
Fingerprint: 5f32cf5d6962f09c63442d9d63442d9d247938b3247938b3247938b3247938b3
Found 1 files trough .DS_Store spidering: /public
.DS_Store” is an abbreviation for “Desktop Services Store”. These files are created automatically by Apples “Finder” software (which is part of their OS).
They store information about the files within a folder, including display options of folders, such as icon positions and view settings.
It may happen that .DS_Store files inadvertently leak filenames such as database backups or private administration panels.
Severity: low
Fingerprint: 5f32cf5d6962f09c39aac35b39aac35bf639e88d42c9c8a6891957f1294adb24
Found 14 files trough .DS_Store spidering: /assets /assets/flag-orpheus-left-bw.png /assets/flag-orpheus-left.png /assets/flag-orpheus-top-bw.png /assets/flag-orpheus-top.png /assets/flag-standalone-bw.png /assets/flag-standalone.png /assets/generation.js /assets/hack_club_theme.css /assets/icon-progress-rounded.png /assets/icon-rounded.png /assets/nest.png /assets/style.css /index.html
.DS_Store” is an abbreviation for “Desktop Services Store”. These files are created automatically by Apples “Finder” software (which is part of their OS).
They store information about the files within a folder, including display options of folders, such as icon positions and view settings.
It may happen that .DS_Store files inadvertently leak filenames such as database backups or private administration panels.
Severity: low
Fingerprint: 5f32cf5d6962f09c39aac35b39aac35bf639e88d42c9c8a6891957f1294adb24
Found 14 files trough .DS_Store spidering: /assets /assets/flag-orpheus-left-bw.png /assets/flag-orpheus-left.png /assets/flag-orpheus-top-bw.png /assets/flag-orpheus-top.png /assets/flag-standalone-bw.png /assets/flag-standalone.png /assets/generation.js /assets/hack_club_theme.css /assets/icon-progress-rounded.png /assets/icon-rounded.png /assets/nest.png /assets/style.css /index.html
.DS_Store” is an abbreviation for “Desktop Services Store”. These files are created automatically by Apples “Finder” software (which is part of their OS).
They store information about the files within a folder, including display options of folders, such as icon positions and view settings.
It may happen that .DS_Store files inadvertently leak filenames such as database backups or private administration panels.
Severity: low
Fingerprint: 5f32cf5d6962f09c63442d9d63442d9d247938b3247938b3247938b3247938b3
Found 1 files trough .DS_Store spidering: /public
Open service 37.27.51.34:80 · qr.felixgao.dev
2026-01-02 23:45
HTTP/1.1 308 Permanent Redirect Connection: close Location: https://qr.felixgao.dev/ Server: Caddy Date: Fri, 02 Jan 2026 23:45:55 GMT Content-Length: 0
Open service 37.27.51.34:443 · qr.felixgao.dev
2026-01-02 23:45
HTTP/1.0 400 Bad Request Client sent an HTTP request to an HTTPS server.
Open service 37.27.51.34:443 · felixgao.dev
2026-01-02 12:23
HTTP/1.1 200 OK
Accept-Ranges: bytes
Alt-Svc: h3=":443"; ma=2592000
Content-Length: 410
Content-Type: text/html; charset=utf-8
Date: Fri, 02 Jan 2026 12:23:21 GMT
Etag: "d9k4jeoazlorbe"
Last-Modified: Wed, 30 Apr 2025 16:46:20 GMT
Server: Caddy
Vary: Accept-Encoding
Via: 1.1 Caddy
Connection: close
Page title: Coming Soon *tm
<!DOCTYPE html>
<head>
<title>Coming Soon *tm</title>
</head>
<body>
<h1>Hello!</h1>
<p>Welcome! My name is Felix. There isn't anything here yet but expect something here (hopefully) soon!</p>
<p>Find me around!</p>
<ul>
<li><b>Email:</b> me@this_domain or my_first_name@hackclub.com</li>
<li><b>Hack Club's Slack:</b>@Felix Gao</li>
</ul>
<p>P.S. Abhay please stop gaming</p>
</body>
Open service 37.27.51.34:80 · felixgao.dev
2026-01-02 05:21
HTTP/1.1 308 Permanent Redirect Connection: close Location: https://felixgao.dev/ Server: Caddy Date: Fri, 02 Jan 2026 05:21:42 GMT Content-Length: 0
Open service 2a01:4f9:3081:399c::4:80 · qr.felixgao.dev
2026-01-01 07:18
HTTP/1.1 200 OK
Accept-Ranges: bytes
Alt-Svc: h3=":443"; ma=2592000
Content-Length: 6484
Content-Type: text/html; charset=utf-8
Date: Thu, 01 Jan 2026 07:18:54 GMT
Etag: "d724r56bmusg504"
Last-Modified: Tue, 14 Jan 2025 21:56:30 GMT
Server: Caddy
Vary: Accept-Encoding
Via: 1.1 Caddy
Connection: close
Page title: QR Code Generator
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>QR Code Generator</title>
<!-- Framework for QR code generation // https://github.com/davidshimjs/qrcodejs -->
<script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
<script src="assets/generation.js"></script>
<link rel="stylesheet" href="assets/hack_club_theme.css"> <!-- Hackclub theme :yay: -->
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<h1>QR Code Generator</h1>
<p>Need a shortened URL with analytics? Check out <a href="https://url.felixgao.dev">url.felixgao.dev</a>!</p>
<div class="card sunken">
<label for="url-field">URL or text to convert</label>
<input type="text" id="url-field">
<p><b>Tip: </b>Start your URL with https:// so devices will recognize it as a link!</p>
<label for="error-correction">Error correction level</label>
<select id="error-correction">
<option value="L">Low</option>
<option value="M" selected="selected">Medium (Default)</option>
<option value="Q">Quartile</option>
<option value="H">High</option>
</select>
<p><b>Tip: </b>Set a higher level (Quartile/High) if you want to print this outside, where the QR code will take
damage from the outdoors. Set a lower level if you need the QR code to be small for some reason (Low). Keep
it normal otherwise (Medium) :).</p>
<div class="colour-picker">
<div>
<label for="dots-color">QR Code Color</label>
<input type="color" id="dots-color" value="#000000">
</div>
</div>
<label class="margin-10-top">Choose an (optional) image to add! Maybe make it Hack Club themed?</label>
<div class="gallery">
<div class="align-side">
<input type="radio" name="image" id="image-none" value="image-none" checked>
<label class="gallery-item" for="image-none" aria-label="Don't add an image to the QR code">
No Image
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image1" value="image1">
<label class="gallery-item" for="image1" aria-label="Add a red flag with the Hack Club logo">
<img src="assets/flag-standalone.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image2" value="image2">
<label class="gallery-item" for="image2"
aria-label="Add a hand from the left holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-left.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image3" value="image3">
<label class="gallery-item" for="image3"
aria-label="Add a hand from the top holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-top.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image4" value="image4">
<label class="gallery-item" for="image4" aria-label="Add a black flag with the Hack Club logo">
<img src="assets/flag-standalone-bw.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image5" value="image5">
<label class="gallery-item" for="image5"
aria-label="Add a hand from the left holding a black flag with the Hack Club logo">
<img src="assets/flag-orpheus-left-bw.png" alt="">
</label>
</div>
<div class="align-side">
<
Open service 2a01:4f9:3081:399c::4:443 · qr.felixgao.dev
2026-01-01 07:18
HTTP/1.1 200 OK
Accept-Ranges: bytes
Alt-Svc: h3=":443"; ma=2592000
Content-Length: 6484
Content-Type: text/html; charset=utf-8
Date: Thu, 01 Jan 2026 07:18:51 GMT
Etag: "d724r56bmusg504"
Last-Modified: Tue, 14 Jan 2025 21:56:30 GMT
Server: Caddy
Vary: Accept-Encoding
Via: 1.1 Caddy
Connection: close
Page title: QR Code Generator
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>QR Code Generator</title>
<!-- Framework for QR code generation // https://github.com/davidshimjs/qrcodejs -->
<script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
<script src="assets/generation.js"></script>
<link rel="stylesheet" href="assets/hack_club_theme.css"> <!-- Hackclub theme :yay: -->
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<h1>QR Code Generator</h1>
<p>Need a shortened URL with analytics? Check out <a href="https://url.felixgao.dev">url.felixgao.dev</a>!</p>
<div class="card sunken">
<label for="url-field">URL or text to convert</label>
<input type="text" id="url-field">
<p><b>Tip: </b>Start your URL with https:// so devices will recognize it as a link!</p>
<label for="error-correction">Error correction level</label>
<select id="error-correction">
<option value="L">Low</option>
<option value="M" selected="selected">Medium (Default)</option>
<option value="Q">Quartile</option>
<option value="H">High</option>
</select>
<p><b>Tip: </b>Set a higher level (Quartile/High) if you want to print this outside, where the QR code will take
damage from the outdoors. Set a lower level if you need the QR code to be small for some reason (Low). Keep
it normal otherwise (Medium) :).</p>
<div class="colour-picker">
<div>
<label for="dots-color">QR Code Color</label>
<input type="color" id="dots-color" value="#000000">
</div>
</div>
<label class="margin-10-top">Choose an (optional) image to add! Maybe make it Hack Club themed?</label>
<div class="gallery">
<div class="align-side">
<input type="radio" name="image" id="image-none" value="image-none" checked>
<label class="gallery-item" for="image-none" aria-label="Don't add an image to the QR code">
No Image
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image1" value="image1">
<label class="gallery-item" for="image1" aria-label="Add a red flag with the Hack Club logo">
<img src="assets/flag-standalone.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image2" value="image2">
<label class="gallery-item" for="image2"
aria-label="Add a hand from the left holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-left.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image3" value="image3">
<label class="gallery-item" for="image3"
aria-label="Add a hand from the top holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-top.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image4" value="image4">
<label class="gallery-item" for="image4" aria-label="Add a black flag with the Hack Club logo">
<img src="assets/flag-standalone-bw.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image5" value="image5">
<label class="gallery-item" for="image5"
aria-label="Add a hand from the left holding a black flag with the Hack Club logo">
<img src="assets/flag-orpheus-left-bw.png" alt="">
</label>
</div>
<div class="align-side">
<
Open service 37.27.51.34:80 · qr.felixgao.dev
2026-01-01 07:18
HTTP/1.1 200 OK
Accept-Ranges: bytes
Alt-Svc: h3=":443"; ma=2592000
Content-Length: 6484
Content-Type: text/html; charset=utf-8
Date: Thu, 01 Jan 2026 07:18:51 GMT
Etag: "d724r56bmusg504"
Last-Modified: Tue, 14 Jan 2025 21:56:30 GMT
Server: Caddy
Vary: Accept-Encoding
Via: 1.1 Caddy
Connection: close
Page title: QR Code Generator
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>QR Code Generator</title>
<!-- Framework for QR code generation // https://github.com/davidshimjs/qrcodejs -->
<script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
<script src="assets/generation.js"></script>
<link rel="stylesheet" href="assets/hack_club_theme.css"> <!-- Hackclub theme :yay: -->
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<h1>QR Code Generator</h1>
<p>Need a shortened URL with analytics? Check out <a href="https://url.felixgao.dev">url.felixgao.dev</a>!</p>
<div class="card sunken">
<label for="url-field">URL or text to convert</label>
<input type="text" id="url-field">
<p><b>Tip: </b>Start your URL with https:// so devices will recognize it as a link!</p>
<label for="error-correction">Error correction level</label>
<select id="error-correction">
<option value="L">Low</option>
<option value="M" selected="selected">Medium (Default)</option>
<option value="Q">Quartile</option>
<option value="H">High</option>
</select>
<p><b>Tip: </b>Set a higher level (Quartile/High) if you want to print this outside, where the QR code will take
damage from the outdoors. Set a lower level if you need the QR code to be small for some reason (Low). Keep
it normal otherwise (Medium) :).</p>
<div class="colour-picker">
<div>
<label for="dots-color">QR Code Color</label>
<input type="color" id="dots-color" value="#000000">
</div>
</div>
<label class="margin-10-top">Choose an (optional) image to add! Maybe make it Hack Club themed?</label>
<div class="gallery">
<div class="align-side">
<input type="radio" name="image" id="image-none" value="image-none" checked>
<label class="gallery-item" for="image-none" aria-label="Don't add an image to the QR code">
No Image
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image1" value="image1">
<label class="gallery-item" for="image1" aria-label="Add a red flag with the Hack Club logo">
<img src="assets/flag-standalone.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image2" value="image2">
<label class="gallery-item" for="image2"
aria-label="Add a hand from the left holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-left.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image3" value="image3">
<label class="gallery-item" for="image3"
aria-label="Add a hand from the top holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-top.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image4" value="image4">
<label class="gallery-item" for="image4" aria-label="Add a black flag with the Hack Club logo">
<img src="assets/flag-standalone-bw.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image5" value="image5">
<label class="gallery-item" for="image5"
aria-label="Add a hand from the left holding a black flag with the Hack Club logo">
<img src="assets/flag-orpheus-left-bw.png" alt="">
</label>
</div>
<div class="align-side">
<
Open service 37.27.51.34:443 · qr.felixgao.dev
2026-01-01 07:18
HTTP/1.1 200 OK
Accept-Ranges: bytes
Alt-Svc: h3=":443"; ma=2592000
Content-Length: 6484
Content-Type: text/html; charset=utf-8
Date: Thu, 01 Jan 2026 07:18:51 GMT
Etag: "d724r56bmusg504"
Last-Modified: Tue, 14 Jan 2025 21:56:30 GMT
Server: Caddy
Vary: Accept-Encoding
Via: 1.1 Caddy
Connection: close
Page title: QR Code Generator
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>QR Code Generator</title>
<!-- Framework for QR code generation // https://github.com/davidshimjs/qrcodejs -->
<script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
<script src="assets/generation.js"></script>
<link rel="stylesheet" href="assets/hack_club_theme.css"> <!-- Hackclub theme :yay: -->
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<h1>QR Code Generator</h1>
<p>Need a shortened URL with analytics? Check out <a href="https://url.felixgao.dev">url.felixgao.dev</a>!</p>
<div class="card sunken">
<label for="url-field">URL or text to convert</label>
<input type="text" id="url-field">
<p><b>Tip: </b>Start your URL with https:// so devices will recognize it as a link!</p>
<label for="error-correction">Error correction level</label>
<select id="error-correction">
<option value="L">Low</option>
<option value="M" selected="selected">Medium (Default)</option>
<option value="Q">Quartile</option>
<option value="H">High</option>
</select>
<p><b>Tip: </b>Set a higher level (Quartile/High) if you want to print this outside, where the QR code will take
damage from the outdoors. Set a lower level if you need the QR code to be small for some reason (Low). Keep
it normal otherwise (Medium) :).</p>
<div class="colour-picker">
<div>
<label for="dots-color">QR Code Color</label>
<input type="color" id="dots-color" value="#000000">
</div>
</div>
<label class="margin-10-top">Choose an (optional) image to add! Maybe make it Hack Club themed?</label>
<div class="gallery">
<div class="align-side">
<input type="radio" name="image" id="image-none" value="image-none" checked>
<label class="gallery-item" for="image-none" aria-label="Don't add an image to the QR code">
No Image
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image1" value="image1">
<label class="gallery-item" for="image1" aria-label="Add a red flag with the Hack Club logo">
<img src="assets/flag-standalone.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image2" value="image2">
<label class="gallery-item" for="image2"
aria-label="Add a hand from the left holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-left.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image3" value="image3">
<label class="gallery-item" for="image3"
aria-label="Add a hand from the top holding a red flag with the Hack Club logo">
<img src="assets/flag-orpheus-top.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image4" value="image4">
<label class="gallery-item" for="image4" aria-label="Add a black flag with the Hack Club logo">
<img src="assets/flag-standalone-bw.png" alt="">
</label>
</div>
<div class="align-side">
<input type="radio" name="image" id="image5" value="image5">
<label class="gallery-item" for="image5"
aria-label="Add a hand from the left holding a black flag with the Hack Club logo">
<img src="assets/flag-orpheus-left-bw.png" alt="">
</label>
</div>
<div class="align-side">
<
Open service 37.27.51.34:80 · url.felixgao.dev
2025-12-31 23:48
HTTP/1.1 308 Permanent Redirect Connection: close Location: https://url.felixgao.dev/ Server: Caddy Date: Wed, 31 Dec 2025 23:48:18 GMT Content-Length: 0
Open service 37.27.51.34:443 · url.felixgao.dev
2025-12-31 23:48
HTTP/1.1 502 Bad Gateway Alt-Svc: h3=":443"; ma=2592000 Content-Length: 0 Date: Wed, 31 Dec 2025 23:48:18 GMT Server: Caddy Via: 1.1 Caddy Connection: close
Open service 2a01:4f9:3081:399c::4:80 · url.felixgao.dev
2025-12-31 23:48
HTTP/1.1 308 Permanent Redirect Connection: close Location: https://url.felixgao.dev/ Server: Caddy Date: Wed, 31 Dec 2025 23:48:19 GMT Content-Length: 0
Open service 2a01:4f9:3081:399c::4:443 · url.felixgao.dev
2025-12-31 23:48
HTTP/1.1 502 Bad Gateway Alt-Svc: h3=":443"; ma=2592000 Content-Length: 0 Date: Wed, 31 Dec 2025 23:48:17 GMT Server: Caddy Via: 1.1 Caddy Connection: close
Open service 2a01:4f9:3081:399c::4:80 · monitor.felixgao.dev
2025-12-31 23:47
HTTP/1.1 308 Permanent Redirect Connection: close Location: https://monitor.felixgao.dev/ Server: Caddy Date: Wed, 31 Dec 2025 23:47:01 GMT Content-Length: 0
Open service 2a01:4f9:3081:399c::4:443 · monitor.felixgao.dev
2025-12-31 23:47
HTTP/1.1 200 OK
Alt-Svc: h3=":443"; ma=2592000
Content-Length: 3939
Content-Type: text/html; charset=utf-8
Date: Wed, 31 Dec 2025 23:47:02 GMT
Server: Werkzeug/3.1.3 Python/3.13.5
Via: 1.1 Caddy
Via: 1.1 Caddy
Connection: close
Page title: Resource Monitor & Vitals
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Resource Monitor & Vitals</title>
<!-- Websocket connection for data
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script> -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-annotation@1.0.0"></script>
<script src="/static/monitor.js"></script>
<link rel="stylesheet" href="/static/monitor.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
</head>
<body>
<h1>Resource & Vital Monitor</h1>
<div id="warning-prompt" style="display: none;">
<p><b>Woah There!</b> The server isn't responding, data went bye bye D:</p>
</div>
<div>
<h2>CPU Usage</h2>
<div class="container">
<p id="cpu-usage"></p>
<div class="graph-selector" data-group="cpu-options">
<button class="toggle-button selected" onclick="selectButton(this, 'cpu-options')" name="global-usage">Global Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'cpu-options')" name="core-usage">Per-Core Usage</button>
</div>
</div>
<div style="position: relative; height:80vh; width:100%">
<canvas id="cpu-graph" class="line-graph"></canvas>
</div>
</div>
<div>
<h2>Memory Usage</h2>
<div class="container">
<p id="memory-usage"></p>
<div class="graph-selector" data-group="memory-options">
<button class="toggle-button selected" onclick="selectButton(this, 'memory-options')" name="global-usage">Global Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'memory-options')" name="my-usage">My Usage</button>
</div>
</div>
<div style="position: relative; height:80vh; width:100%;">
<canvas id="memory-graph" class="line-graph"></canvas>
</div>
</div>
<div id="bottom-bar">
<div style="width:50%;">
<h2>Storage Usage</h2>
<div class="container">
<p id="storage-usage"></p>
<div class="graph-selector" data-group="storage-options">
<button class="toggle-button selected" onclick="selectButton(this, 'storage-options')" name="global-usage">Global Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'storage-options')" name="my-usage">My Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'storage-options')" name="directory-usage">By Directory</button>
</div>
</div>
<div style="aspect-ratio: 1/1; width: 80%; margin: 0 auto; margin-top: 1rem;">
<canvas id="storage-graph"></canvas>
</div>
</div>
<div style="width:50%;">
<h2>Usages by PID</h2>
<table class="pid-data" id="pid-chart">
<tr>
<th style="width:10%;">PID</th>
<th style="width:50%;">Process Name</th>
<th style="width:10%;">CPU (%)</th>
<th style="width:10%;">Memory (GB)</th>
<th style="width:20%;">Status</th>
</tr>
</table>
</div>
</div>
</body>
</html>
Open service 37.27.51.34:443 · monitor.felixgao.dev
2025-12-31 23:47
HTTP/1.1 200 OK
Alt-Svc: h3=":443"; ma=2592000
Content-Length: 3939
Content-Type: text/html; charset=utf-8
Date: Wed, 31 Dec 2025 23:47:01 GMT
Server: Werkzeug/3.1.3 Python/3.13.5
Via: 1.1 Caddy
Via: 1.1 Caddy
Connection: close
Page title: Resource Monitor & Vitals
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Resource Monitor & Vitals</title>
<!-- Websocket connection for data
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script> -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-annotation@1.0.0"></script>
<script src="/static/monitor.js"></script>
<link rel="stylesheet" href="/static/monitor.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
</head>
<body>
<h1>Resource & Vital Monitor</h1>
<div id="warning-prompt" style="display: none;">
<p><b>Woah There!</b> The server isn't responding, data went bye bye D:</p>
</div>
<div>
<h2>CPU Usage</h2>
<div class="container">
<p id="cpu-usage"></p>
<div class="graph-selector" data-group="cpu-options">
<button class="toggle-button selected" onclick="selectButton(this, 'cpu-options')" name="global-usage">Global Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'cpu-options')" name="core-usage">Per-Core Usage</button>
</div>
</div>
<div style="position: relative; height:80vh; width:100%">
<canvas id="cpu-graph" class="line-graph"></canvas>
</div>
</div>
<div>
<h2>Memory Usage</h2>
<div class="container">
<p id="memory-usage"></p>
<div class="graph-selector" data-group="memory-options">
<button class="toggle-button selected" onclick="selectButton(this, 'memory-options')" name="global-usage">Global Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'memory-options')" name="my-usage">My Usage</button>
</div>
</div>
<div style="position: relative; height:80vh; width:100%;">
<canvas id="memory-graph" class="line-graph"></canvas>
</div>
</div>
<div id="bottom-bar">
<div style="width:50%;">
<h2>Storage Usage</h2>
<div class="container">
<p id="storage-usage"></p>
<div class="graph-selector" data-group="storage-options">
<button class="toggle-button selected" onclick="selectButton(this, 'storage-options')" name="global-usage">Global Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'storage-options')" name="my-usage">My Usage</button>
<button class="toggle-button" onclick="selectButton(this, 'storage-options')" name="directory-usage">By Directory</button>
</div>
</div>
<div style="aspect-ratio: 1/1; width: 80%; margin: 0 auto; margin-top: 1rem;">
<canvas id="storage-graph"></canvas>
</div>
</div>
<div style="width:50%;">
<h2>Usages by PID</h2>
<table class="pid-data" id="pid-chart">
<tr>
<th style="width:10%;">PID</th>
<th style="width:50%;">Process Name</th>
<th style="width:10%;">CPU (%)</th>
<th style="width:10%;">Memory (GB)</th>
<th style="width:20%;">Status</th>
</tr>
</table>
</div>
</div>
</body>
</html>
Open service 37.27.51.34:80 · monitor.felixgao.dev
2025-12-31 23:47
HTTP/1.1 308 Permanent Redirect Connection: close Location: https://monitor.felixgao.dev/ Server: Caddy Date: Wed, 31 Dec 2025 23:47:01 GMT Content-Length: 0
Open service 2a01:4f9:3081:399c::4:443 · felixgao.dev
2025-12-31 08:38
HTTP/1.1 502 Bad Gateway
Alt-Svc: h3=":443"; ma=2592000
Connection: close
Content-Type: text/plain; charset=utf-8
Server: Caddy
Date: Wed, 31 Dec 2025 08:38:43 GMT
Content-Length: 631
Something went wrong on the project owner's end. You may want to contact felixgao [at] hackclub [dot] app to resolve this issue.
.MM.
;MM.
KKc.lONMMWXk; ckXWMMWXk: 'xXWMMWXxoKKNMMXKKKK
MMXNo'. .lWM0.oWNo'. .,dWWldMW:. .:XMN'dMM:....
MMW. :MMWMN. 'MMMMWc. .. cMM.
MMO .MMMMWXXXXXXXXXXWWO,dKNMNKOd:. cMM.
MMO .MMMMX .':OMMccMM.
MMO .MMKNMO. .kK0KKl .MMk:MM;
MMO .MMd.oXMKxoox0MXl ,OMNkdodkWWk. kWMKOOo
dd: .dd; ,xKNNKx, .o0XNX0l. .:oddc
- hackclub.app
Open service 2a01:4f9:3081:399c::4:80 · felixgao.dev
2025-12-31 08:38
HTTP/1.1 502 Bad Gateway
Alt-Svc: h3=":443"; ma=2592000
Connection: close
Content-Type: text/plain; charset=utf-8
Server: Caddy
Date: Wed, 31 Dec 2025 08:38:42 GMT
Content-Length: 631
Something went wrong on the project owner's end. You may want to contact felixgao [at] hackclub [dot] app to resolve this issue.
.MM.
;MM.
KKc.lONMMWXk; ckXWMMWXk: 'xXWMMWXxoKKNMMXKKKK
MMXNo'. .lWM0.oWNo'. .,dWWldMW:. .:XMN'dMM:....
MMW. :MMWMN. 'MMMMWc. .. cMM.
MMO .MMMMWXXXXXXXXXXWWO,dKNMNKOd:. cMM.
MMO .MMMMX .':OMMccMM.
MMO .MMKNMO. .kK0KKl .MMk:MM;
MMO .MMd.oXMKxoox0MXl ,OMNkdodkWWk. kWMKOOo
dd: .dd; ,xKNNKx, .o0XNX0l. .:oddc
- hackclub.app