chore: initial commit — chat-saiden web chat baseline

This commit is contained in:
marauder-actual
2026-05-29 13:47:34 +02:00
commit 96ba8f4b6e
28 changed files with 4852 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>chat.saiden.dev</title>
<meta name="description" content="A quiet channel.">
<meta name="robots" content="noindex, nofollow">
<link rel="icon" href="https://saiden.dev/favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Caveat:wght@400;500&family=Inter:wght@300;400;500;600&family=Source+Serif+Pro:ital,wght@0,400;0,600;1,400&family=JetBrains+Mono:wght@400;500&display=swap">
<link rel="stylesheet" href="/static/chat.css">
</head>
<body
data-palette="{{ ui_palette }}"
data-typography="{{ ui_typography }}"
data-density="{{ ui_density }}"
data-labels="{{ ui_labels }}">
<script>
window.__pilotName = {{ pilot_name | tojson }};
window.__personaName = {{ persona_name | tojson }};
</script>
<nav class="topnav" aria-label="channel controls">
<button type="button" class="topnav__link" id="recalibrate-btn" title="reset calibration">recalibrate</button>
<span class="topnav__sep">·</span>
<a class="topnav__link" href="/auth/logout">sign out</a>
<a class="sigil" href="https://saiden.dev/" target="_blank" rel="noopener" title="Saiden">
<img src="https://saiden.dev/logo.png" alt="Saiden">
</a>
</nav>
<main class="page">
<section class="conversation" id="conversation" aria-live="polite">
</section>
<form class="prompt" id="prompt-form" autocomplete="off">
<hr class="prompt__line">
<div class="prompt__row">
<input
class="prompt__input"
id="prompt-input"
type="text"
placeholder="{% if cart %}speak to {{ persona_name }}{% else %}…{% endif %}"
autofocus
autocomplete="off"
spellcheck="true"
aria-label="message">
<button type="button" class="prompt__mic" id="mic-button" aria-label="speak"
title="hold space to speak · click to toggle">
<svg viewBox="0 0 24 24" width="20" height="20" fill="none"
stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round">
<rect x="9" y="3" width="6" height="12" rx="3"></rect>
<path d="M5 11a7 7 0 0 0 14 0"></path>
<line x1="12" y1="18" x2="12" y2="22"></line>
</svg>
</button>
</div>
</form>
</main>
<script src="/static/chat.js"></script>
</body>
</html>
+25
View File
@@ -0,0 +1,25 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>chat.saiden.dev — not authorised</title>
<meta name="robots" content="noindex, nofollow">
<link rel="icon" href="https://saiden.dev/favicon.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;1,400&family=Caveat:wght@400&family=Inter:wght@300&display=swap">
<link rel="stylesheet" href="/static/chat.css">
</head>
<body>
<main class="denied">
<h1 class="denied__title">not on the channel</h1>
<p class="denied__body">{{ reason }}</p>
<div class="denied__hand">— Saiden</div>
<a class="denied__link" href="/auth/login">try again</a>
</main>
</body>
</html>