Files
the-nexus/index.html
Alexander Whitestone fea13910a8
Some checks failed
CI / validate (pull_request) Failing after 22s
feat: add guestbook with localStorage persistence
Visitors can leave a short message (up to 140 chars) via a panel
toggled from the bottom-left corner. Entries are stored in
localStorage (capped at 20), displayed newest-first, and
HTML-escaped before rendering.

Fixes #135
2026-03-24 00:06:11 -04:00

67 lines
3.0 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Timmy's Nexus</title>
<meta name="description" content="A sovereign 3D world">
<meta property="og:title" content="Timmy's Nexus">
<meta property="og:description" content="A sovereign 3D world">
<meta property="og:image" content="https://example.com/og-image.png">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Timmy's Nexus">
<meta name="twitter:description" content="A sovereign 3D world">
<meta name="twitter:image" content="https://example.com/og-image.png">
<link rel="manifest" href="/manifest.json">
<link rel="stylesheet" href="style.css">
<script type="importmap">
{
"imports": {
"three": "https://unpkg.com/three@0.183.0/build/three.module.js",
"three/addons/": "https://unpkg.com/three@0.183.0/examples/jsm/"
}
}
</script>
</head>
<body>
<!-- Top Right: Audio Toggle -->
<div id="audio-control" class="hud-controls" style="position: absolute; top: 8px; right: 8px;">
<button id="audio-toggle" class="chat-toggle-btn" aria-label="Toggle ambient sound" style="background-color: var(--color-primary); color: var(--color-bg); padding: 4px 8px; border-radius: 4px; font-size: 12px; cursor: pointer;">
🔊
</button>
<button id="debug-toggle" class="chat-toggle-btn" aria-label="Toggle debug mode" style="background-color: var(--color-secondary); color: var(--color-bg); padding: 4px 8px; border-radius: 4px; font-size: 12px; cursor: pointer;">
🔍
</button>
<audio id="ambient-sound" src="ambient.mp3" loop></audio>
</div>
<div id="overview-indicator">
<span>MAP VIEW</span>
<span class="overview-hint">[Tab] to exit</span>
</div>
<!-- Guestbook -->
<div id="guestbook-toggle" class="hud-controls" style="position: absolute; bottom: 16px; left: 16px;">
<button id="guestbook-btn" class="chat-toggle-btn" aria-label="Open guestbook" style="background-color: var(--color-secondary); color: var(--color-text); padding: 4px 10px; border-radius: 4px; font-size: 12px; cursor: pointer; border: 1px solid var(--color-primary);">
Guestbook
</button>
</div>
<div id="guestbook-panel" role="dialog" aria-modal="true" aria-label="Guestbook">
<div id="guestbook-header">
<span>&#10022; Guestbook</span>
<button id="guestbook-close" aria-label="Close guestbook">&#10005;</button>
</div>
<div id="guestbook-messages"></div>
<form id="guestbook-form" autocomplete="off">
<input id="guestbook-name" type="text" maxlength="32" placeholder="Your name (optional)" aria-label="Your name" />
<textarea id="guestbook-msg" maxlength="140" placeholder="Leave a message&#x2026;" required aria-label="Your message"></textarea>
<button type="submit">Sign</button>
</form>
</div>
<script type="module" src="app.js"></script>
</body>
</html>