cloudflare
tcp/443 tcp/80 tcp/8443
Open service 2606:4700:3034::6815:13bd:8443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: US-California
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=18,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=rhnqidsItgYSIRC0tCFh4JSJd%2BsBFDpWcM627ad%2F7v1m6IJYQ37gM9zVBOHbLPAZ14Y3u4fz3LMBL8A35kGHEkjOx2du%2F0G9LUfZkhYv9BOoObtI9pgHoXXBhwaYSsY%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: US
Server: cloudflare
CF-RAY: 9bb48b9a4d9cebf3-SJC
alt-svc: h3=":8443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3034::6815:13bd:80 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:12 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: SG-
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=136,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=j2MJwLE%2F61cw30j9SDAJN1ZvKOWOvtDsxVPohMVNeedNYQCfF0PGh5QCjAnoGRJAEwUUZBFVGsaCEDnFTTEoeQHXtid76GaFZV0S5sU3IFRL%2FdUdLrLqoOsAhZA4JNo%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: SG
Server: cloudflare
CF-RAY: 9bb48ba009699b96-SIN
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3034::6815:13bd:443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: CA-Ontario
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=27,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=I6kjQ6B8wnMT1aWYEvybr9Yg1t6KvXqtyKjfCCMLC7xlFFR5MQzexQpyA6f%2B2c3FADrnOtJymv9zk3yK6MK0de1hGrIY1RNw1Rcnwzm1stlGqpjl3d%2BVXQ1UZ7z75L8%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: CA
Server: cloudflare
CF-RAY: 9bb48b9a1b068631-YYZ
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 104.21.19.189:8443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 522 <none> Date: Fri, 09 Jan 2026 14:15:32 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin Server-Timing: cfEdge;dur=19427,cfOrigin;dur=0 X-Frame-Options: SAMEORIGIN X-Client-Country: SG X-Client-Region: SG- Server: cloudflare CF-RAY: 9bb48ba008b2b6bd-SIN alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 104.21.19.189:8443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: CA-Ontario
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=18,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=wX5T002LVoGuTLD22oNutm1rd3LgD5Wt9u1Mz%2BZr1NW9z6kj5QsB0Bh9XtGa8g4g4TiCuuZJBWXdGYDTqv%2B8CsW0m8f4axIEjuYuBkDiWKu%2FCM8%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: CA
Server: cloudflare
CF-RAY: 9bb48b9a0b0936eb-YYZ
alt-svc: h3=":8443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 172.67.188.143:80 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: US-New Jersey
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=25,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=QIctU4wzTA2QtfgLkEbkeAe1Zf28Mr%2BPNoX2xJc1iTA8Tw9YmFKSGFRBVZ4KulNOJaeXB%2FKa65uCoIcV8NOtRFPO8PC6WsvH8gJqpkpav5BmWFY%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: US
Server: cloudflare
CF-RAY: 9bb48b99ef37be82-EWR
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3034::6815:13bd:8443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 522 <none> Date: Fri, 09 Jan 2026 14:15:32 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin Server-Timing: cfEdge;dur=19425,cfOrigin;dur=0 X-Frame-Options: SAMEORIGIN X-Client-Country: CA X-Client-Region: CA-Ontario Server: cloudflare CF-RAY: 9bb48b9fce692388-YYZ alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 2606:4700:3037::ac43:bc8f:8443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Content-Length: 5773
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "a481f707d51f3c2a1af9c0aacc8227cc"
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=rJur9IlJ%2F2dBWFpJ1%2BhAe6xHa11PGwhbpgMPVnUK1RdNebdXY7RpMJVrwsjhVil4QrLZNs0xPKQUYHX%2Bm4gR4eaq9idO4trwTz5FS%2BnVT7Fx6Fo4PmpLQiJ2D8zHlls%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: DE
X-Client-Region: DE-Hesse
Server: cloudflare
CF-RAY: 9bb48b9a2f7a7e1c-FRA
alt-svc: h3=":8443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3034::6815:13bd:80 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
X-Client-Region: US-California
Location: https://leafyrx.org/
cf-cache-status: DYNAMIC
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=14,cfOrigin;dur=115
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=d1fvzHuW%2FeiVpeX8bN%2Bp0Vt9PVo8fugiXK%2BedNTeqE4%2B6uyDdo%2BlYNew%2FmyCLEey7ENmDchoG8df01kBTfDSz%2Bk9o3C9Hmyb1AdrRZOLpv4EhA1LjW5G"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: US
CF-RAY: 9bb48b9a6df636e8-SJC
alt-svc: h3=":443"; ma=86400
Page title: 301 Moved Permanently
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"c08394ff0d2f4614933ae77ae989b4aa","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>
Open service 2606:4700:3037::ac43:bc8f:8443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 522 <none> Date: Fri, 09 Jan 2026 14:15:31 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin X-Frame-Options: SAMEORIGIN X-Client-Country: DE X-Client-Region: DE-Hesse Server: cloudflare CF-RAY: 9bb48b9f6a629b86-FRA alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 104.21.19.189:80 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Content-Length: 5773
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "a481f707d51f3c2a1af9c0aacc8227cc"
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=061zCFlKlmggiITYeYfAeTpy5GOsY%2BRVQsCT2oN7kEEXGzXH7sdLVIeoOZ68ITewXoKOceteguO3tt0c%2FMSX2rsfQT%2FAYqGzg8PDx2aI9EHtQjs%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: DE
X-Client-Region: DE-Hesse
Server: cloudflare
CF-RAY: 9bb48b994d1a1907-FRA
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3037::ac43:bc8f:443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Content-Length: 5773
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "a481f707d51f3c2a1af9c0aacc8227cc"
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=gX7vwRuHF%2BF6c8dDdrv%2FPW9fbxvT4lCiWxI5g9DR%2FpzYgOMTJZ%2F9CFjhCQjH1BMtQMIhk83MIcZkFMrd5oiKs5BYs1oe0%2B712yeB%2BVLJU%2BcbExFl6k2WE55DsTpYsEQ%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: NL
X-Client-Region: NL-North Holland
Server: cloudflare
CF-RAY: 9bb48b997d34dac7-AMS
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3037::ac43:bc8f:80 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 14:15:12 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
X-Client-Region: DE-Hesse
Location: https://leafyrx.org/
cf-cache-status: DYNAMIC
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=3OXCSJvDTrqw5sfECE1hXkaOFgA3j9bkphN0iuAL8FDJ0p3IadmlgRd38n86qbZUpQ15Qr%2BJiWWfc3qYX9I68%2Bu8w2iIsCYyS01un%2FNSiUAFPEnYJ%2FzZ"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: DE
CF-RAY: 9bb48b9aea751b48-FRA
alt-svc: h3=":443"; ma=86400
Page title: 301 Moved Permanently
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
Open service 172.67.188.143:8443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 522 <none> Date: Fri, 09 Jan 2026 14:15:31 GMT Content-Type: text/plain; charset=UTF-8 Content-Length: 15 Connection: close Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Expires: Thu, 01 Jan 1970 00:00:01 GMT Referrer-Policy: same-origin X-Frame-Options: SAMEORIGIN X-Client-Country: NL X-Client-Region: NL-North Holland Server: cloudflare CF-RAY: 9bb48b9f3a590bcc-AMS alt-svc: h3=":8443"; ma=86400 error code: 522
Open service 172.67.188.143:8443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: US-New Jersey
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=16,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=bN2P6St0yPJmIR%2BggK2EFU5oaqz91RNXBUcc47O5ZiPqXerPvKEdMiqxhEk7yud%2FvBjg3eES71bBcgt5J3jRjs2Qb7037PFrz5yAIMrkr7DJECo%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: US
Server: cloudflare
CF-RAY: 9bb48b992f9658c1-EWR
alt-svc: h3=":8443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3037::ac43:bc8f:443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
vary: Accept-Encoding
last-modified: Mon, 05 Jan 2026 18:12:47 GMT
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
referrer-policy: no-referrer-when-downgrade
strict-transport-security: max-age=31536000; includeSubDomains; preload
X-Client-Country: US
cf-cache-status: DYNAMIC
X-Client-Region: US-New Jersey
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=13,cfOrigin;dur=123
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=WSM5ggaVWLrhJvj4aIYpzlTVnmuJtNb0QGnBVSL2iRE5lrqNj8Qqit1%2Bch9%2FnusvUbt7CQub2JUcFCI8J%2Ft%2F5N5ybIJ0INwOE0EiJhMA9%2Fv67eVWVUf1"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
CF-RAY: 9bb48b99ded2c475-EWR
alt-svc: h3=":443"; ma=86400
Open service 104.21.19.189:80 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
X-Client-Region: US-New Jersey
Location: https://leafyrx.org/
cf-cache-status: DYNAMIC
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=19,cfOrigin;dur=30
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=qZLzKhRtjTaZJqj%2FfohZsI1CP8WuHiKR1GLjVXo93IFOL58A8Zjf%2B8%2F5GvN2SCQhy4oaiQO2TRMwi3vBEerLQwT8OM0HzR26%2Bc7M"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: US
CF-RAY: 9bb48b997d5e43fb-EWR
alt-svc: h3=":443"; ma=86400
Page title: 301 Moved Permanently
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"c08394ff0d2f4614933ae77ae989b4aa","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>
Open service 172.67.188.143:80 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
X-Client-Region: GB-England
Location: https://leafyrx.org/
cf-cache-status: DYNAMIC
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=HSFcxDla%2B4V4QGkfXB63i0D5Ewweu3TtxGgmxfOkoHEUwmaaCCFeG6y6ATBZP3ikHxDDS9lSNrg4VS3MuCPCVuehfLmfnTez0NSd"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: GB
CF-RAY: 9bb48b9a3f601217-LHR
alt-svc: h3=":443"; ma=86400
Page title: 301 Moved Permanently
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
Open service 104.21.19.189:443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:13 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: MISS
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: IN-Karnataka
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="MISS"
Server-Timing: cfEdge;dur=771,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=E1fwHm5EI5AMJV2YVTNdegQwZLTYJqN98pQJZii0PClPlqdI2TWuAgV3Fq8zGLwwjoUtBv3E5cJswTnAQs1wKvzDGuBVwplwguCUBjvYuY7tnLg%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: IN
Server: cloudflare
CF-RAY: 9bb48b9f3d3d26cb-BOM
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 172.67.188.143:443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:13 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
vary: Accept-Encoding
last-modified: Mon, 05 Jan 2026 18:12:47 GMT
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
referrer-policy: no-referrer-when-downgrade
strict-transport-security: max-age=31536000; includeSubDomains; preload
X-Client-Country: IN
cf-cache-status: DYNAMIC
X-Client-Region: IN-Karnataka
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=9,cfOrigin;dur=1234
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=UU4AJFLPPAq5cBkjFttHgMxWjEenjwcOoZ6Et7i4kjeNBHkgy6DamHJxymXzMbq7N2v3Mgvf719yUZ8J3taD8WNZ6R9A%2BD4kppEM"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
CF-RAY: 9bb48b9f0d2cdab3-BOM
alt-svc: h3=":443"; ma=86400
Open service 104.21.19.189:443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
vary: Accept-Encoding
last-modified: Mon, 05 Jan 2026 18:12:47 GMT
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
referrer-policy: no-referrer-when-downgrade
strict-transport-security: max-age=31536000; includeSubDomains; preload
X-Client-Country: CA
cf-cache-status: DYNAMIC
X-Client-Region: CA-Ontario
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=9,cfOrigin;dur=93
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=T7enuvtvozsIzcFKju218Lf6HviBm54EkwXHbu79SHrvf6wJ3ljjGyLYRNUMuIXj3jP6dHkA%2FHyt%2FfM85p8yxc7FUT6dzXy8QSN3"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
CF-RAY: 9bb48b992a957aa8-YYZ
alt-svc: h3=":443"; ma=86400
Open service 172.67.188.143:443 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
X-Client-Region: US-New Jersey
Vary: accept-encoding
Server-Timing: cfCacheStatus;desc="HIT"
Server-Timing: cfEdge;dur=23,cfOrigin;dur=0
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=oz73dO6DKbmTvRS7GMVnYASKGRg9jLBHh2Iw%2BUtRLJC1HkuD0meMv6u%2FTHU9OZktT%2FetM79ahjfjkspqr4mpgbH97AL1YziKsAQ6nG1Skhc0yQg%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: US
Server: cloudflare
CF-RAY: 9bb48b988ea74406-EWR
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3037::ac43:bc8f:80 ยท members.leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:11 GMT
Content-Type: text/html
Content-Length: 5773
Connection: close
CF-Cache-Status: HIT
Cache-Control: public, max-age=0, must-revalidate
ETag: "a481f707d51f3c2a1af9c0aacc8227cc"
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=O2Oeq9pykWvQCCKGuSWkln3Bxes0uUESIKurwp2e8OPPaiDntV8TpTE1sAgDGsDBQvUw5kVwos9aOKnTVaucpY43iBYIJSc5U9nduYsnAWY5R9WbyiqMqtsbdVLg7FE%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
X-Client-Country: DE
X-Client-Region: DE-Hesse
Server: cloudflare
CF-RAY: 9bb48b994fc4925b-FRA
alt-svc: h3=":443"; ma=86400
Page title: URL Shortener
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URL Shortener</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center p-4">
<div class="max-w-md w-full bg-white rounded-lg shadow-md p-6">
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">URL Shortener</h1>
<div class="mb-4">
<label for="apiUrl" class="block text-sm font-medium text-gray-700 mb-1">API Base URL</label>
<input type="url" id="apiUrl" class="w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 shadow-sm"
placeholder="https://your-api-url.com" disabled>
<p class="mt-1 text-xs text-gray-500">Auto-detected from current page. This is the base API URL.</p>
</div>
<form id="urlForm" class="space-y-4">
<div>
<label for="longUrl" class="block text-sm font-medium text-gray-700 mb-1">URL to Shorten</label>
<input type="url" id="longUrl" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="https://example.com/your/long/url">
<p class="mt-1 text-xs text-gray-500">๐ Paste any long URL you want to make tiny!</p>
</div>
<div>
<label for="apiToken" class="block text-sm font-medium text-gray-700 mb-1">API Token</label>
<input type="password" id="apiToken" required class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"
placeholder="Enter your API token">
<p class="mt-1 text-xs text-gray-500">๐ Required for authentication</p>
</div>
<button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Shorten URL
</button>
</form>
<div id="result" class="mt-6 hidden">
<div class="border-t border-gray-200 pt-4">
<h2 class="text-lg font-medium text-gray-800 mb-2">Your Shortened URL</h2>
<div class="flex items-center">
<input type="text" id="shortUrl" class="flex-1 px-3 py-2 border border-gray-300 rounded-l-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500" readonly>
<button id="copyBtn" class="bg-gray-200 px-3 py-2 border border-l-0 border-gray-300 rounded-r-md hover:bg-gray-300 focus:outline-none">
Copy
</button>
</div>
<p id="statusMsg" class="mt-2 text-sm text-green-600"></p>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200 text-center text-sm text-gray-600">
<p>โจ Made with Cloudflare Workers + KV โก๏ธ</p>
<p class="mt-1">๐ Open source & free to use! Check out code on <a href="https://github.com/ThisIsntMyId/link-shortener-service" target="_blank" class="text-indigo-600 hover:text-indigo-800">GitHub</a> ๐ ๏ธ</p>
</div>
</div>
<script>
// Auto-fill API base URL from current location
document.addEventListener('DOMContentLoaded', function() {
const apiUrlInput = document.getElementById('apiUrl');
// Get base URL (protocol + hostname)
const baseUrl = window.location.protocol + "//" + window.location.host;
apiUrlInput.value = baseUrl;
});
document.getElementById('urlForm').addEventListener('submit', async function(e) {
e.preventDefault();
const longUrl = document.getElementById('longUrl').value;
const apiUrl = document.getElementById('apiUrl').value;
const apiToken = document.getElementById('apiToken').value;
const resultDiv = document.getElementById('result');
const statusMsg = document.getElementById('statusMsg');
if (!apiToken) {
statusMsg.textContent = 'API Token is required';
statusMsg.className = 'mt-2 text-sm te
Open service 2606:4700:3034::6815:13bd:443 ยท leafyrx.org
2026-01-09 14:15
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 14:15:12 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Server: cloudflare
vary: Accept-Encoding
last-modified: Mon, 05 Jan 2026 18:12:47 GMT
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
referrer-policy: no-referrer-when-downgrade
strict-transport-security: max-age=31536000; includeSubDomains; preload
X-Client-Country: DE
cf-cache-status: DYNAMIC
X-Client-Region: DE-Hesse
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=X7rl6P4z1FghKuMArOT0kQnlVC3zgVcDmtSDwGkx1nR3AWjZngBuTrV0qbQvanARf37W0ESJgSIISzSspwpY3fAGD9JYthWWXmTbCwNvJ6nXzSe66kNu"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
CF-RAY: 9bb48b9ba82f30c6-FRA
alt-svc: h3=":443"; ma=86400