← back to Robet Site

public/admin.html

40 lines

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>ROBET · Admin — API Keys</title>
  <link rel="stylesheet" href="/styles.css" />
</head>
<body>
  <header class="topbar">
    <a class="logo" href="/">ROBET</a>
    <span class="mono" style="text-transform:uppercase">Admin · API Keys</span>
  </header>

  <div class="admin-shell">
    <span class="kicker">/ credentials</span>
    <h1 class="sec-h" style="font-size:clamp(30px,6vw,56px)">Enter API keys.</h1>
    <p class="mono" style="font-weight:600;margin-bottom:24px">
      Stored server-side in <code>data/keys.json</code> (gitignored). Values are never shown back —
      only a <code>…last4</code> mask. This page is basic-auth gated.
    </p>

    <!-- add / update -->
    <div class="keyrow" style="grid-template-columns:1fr 1fr auto auto">
      <input id="kName" placeholder="KEY NAME (e.g. OPENAI_API_KEY)" autocomplete="off" spellcheck="false" />
      <input id="kVal" placeholder="value" type="password" autocomplete="off" spellcheck="false" />
      <button type="button" class="btn" id="toggleVal" aria-pressed="false" aria-label="Show value" title="Show / hide value">show</button>
      <button class="btn" id="saveBtn" disabled>Save</button>
    </div>
    <div class="formmsg" id="hint" style="margin:8px 0 0; opacity:.8">Name: letters, digits, underscores only. Value required.</div>
    <div class="formmsg" id="msg" role="status" aria-live="polite" aria-atomic="true" style="margin:8px 0 28px"></div>

    <!-- stored keys -->
    <div class="keytable" id="table"></div>
  </div>

  <script src="/admin.js"></script>
</body>
</html>