Initial backup of root workspace files

Glue files not covered by subproject repos: top-level docs, logo,
keysat-design-system, and crosscheck tests. Subproject folders are
gitignored (each has its own Gitea remote).
This commit is contained in:
Keysat
2026-06-12 17:51:40 -05:00
commit 843ff0e5d7
55 changed files with 6887 additions and 0 deletions
@@ -0,0 +1,123 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Keysat — New product</title>
<link rel="stylesheet" href="../../colors_and_type.css">
<link rel="stylesheet" href="dash.css">
<style>
.form-grid { display: grid; grid-template-columns: 1fr 380px; gap: 24px; align-items: start; }
.panel-stack > * + * { margin-top: 14px; }
.row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.preview-cert { background: var(--cream-50); border: 1px solid var(--border-1); border-radius: 12px; box-shadow: 0 0 0 1px var(--gold-500) inset, var(--shadow-sm); padding: 22px; }
.preview-cert .stamp { font-size: 10px; font-weight: 700; letter-spacing: 0.22em; text-transform: uppercase; color: var(--gold-700); text-align: center; }
.preview-cert .h { text-align: center; font-family: var(--font-display); font-weight: 500; font-size: 18px; color: var(--navy-950); margin: 8px 0 4px; }
.preview-cert .sub { text-align: center; font-size: 12px; color: var(--ink-500); margin-bottom: 14px; }
.preview-cert .field { font-size: 10.5px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-500); margin-bottom: 3px; }
.preview-cert .value { font-family: var(--font-mono); font-size: 13px; color: var(--navy-900); margin-bottom: 10px; }
.seg { display: flex; gap: 0; border: 1px solid var(--border-2); border-radius: 7px; overflow: hidden; }
.seg button { flex: 1; background: transparent; border: 0; padding: 9px 12px; font-size: 13px; color: var(--ink-700); cursor: pointer; font-family: var(--font-body); border-right: 1px solid var(--border-1); }
.seg button:last-child { border-right: 0; }
.seg button.on { background: var(--navy-800); color: var(--cream-50); font-weight: 600; }
</style>
</head>
<body>
<div class="app">
<aside class="sidebar">
<div class="brand"><img src="../../assets/keysat-mark.svg" alt=""><span>Keysat</span></div>
<a class="nav" href="index.html"><i data-lucide="layout-dashboard"></i>Overview</a>
<a class="nav active" href="#"><i data-lucide="package"></i>Products<span class="count">3</span></a>
<a class="nav" href="licenses.html"><i data-lucide="key-round"></i>Licenses<span class="count">42</span></a>
<a class="nav" href="#"><i data-lucide="users"></i>Customers<span class="count">38</span></a>
<a class="nav" href="#"><i data-lucide="tag"></i>Discount codes</a>
<div class="group-label">System</div>
<a class="nav" href="#"><i data-lucide="scroll-text"></i>Audit log</a>
<a class="nav" href="#"><i data-lucide="webhook"></i>Webhooks</a>
<a class="nav" href="#"><i data-lucide="settings-2"></i>Settings</a>
<div class="footer"><span class="dot"></span><div><div style="color: var(--cream-50); font-weight: 600">BTCPay connected</div></div></div>
</aside>
<main class="main">
<header class="topbar">
<div><div class="crumb"><a href="#">Products</a> · New</div><h1>New product</h1></div>
<div class="topbar-actions">
<button class="btn ghost">Cancel</button>
<button class="btn secondary">Save as draft</button>
<button class="btn primary"><i data-lucide="check"></i>Create product</button>
</div>
</header>
<div class="content">
<div class="form-grid">
<div class="panel-stack">
<div class="card">
<div class="card-head"><h3>Product</h3></div>
<div style="padding: 18px;">
<div class="row-2">
<div class="field"><label class="lbl">Product name</label><input class="input" value="Sundial 2.0"><div class="hint">Shown on receipts and the public purchase page.</div></div>
<div class="field"><label class="lbl">Slug</label><input class="input mono" value="sundial-2"><div class="hint">Used in your purchase URL.</div></div>
</div>
<div class="field"><label class="lbl">Tagline</label><input class="input" value="A focused timer for deep work."></div>
<div class="field"><label class="lbl">Description</label><textarea class="input" rows="3" style="resize: vertical; font-family: var(--font-body)">Sundial is a calm, single-window timer for deep work sessions. Sound design by Hauschka. macOS, Windows, Linux.</textarea></div>
</div>
</div>
<div class="card">
<div class="card-head"><h3>Default policy</h3><span class="eyebrow">Drives the public purchase URL</span></div>
<div style="padding: 18px;">
<div class="row-2">
<div class="field"><label class="lbl">Duration</label>
<div class="seg">
<button>30 days</button><button class="on">1 year</button><button>3 years</button><button>Lifetime</button>
</div>
</div>
<div class="field"><label class="lbl">Seats</label><input class="input" value="1"><div class="hint">Maximum machines per key.</div></div>
</div>
<div class="row-2">
<div class="field"><label class="lbl">Trial available</label>
<div class="seg"><button class="on">14 days</button><button>None</button></div>
</div>
<div class="field"><label class="lbl">Entitlements</label><input class="input mono" value="core, sync, export"><div class="hint">Comma-separated. Embedded in the signed key.</div></div>
</div>
</div>
</div>
<div class="card">
<div class="card-head"><h3>Price</h3></div>
<div style="padding: 18px;">
<div class="row-2">
<div class="field"><label class="lbl">Amount</label><input class="input mono" value="50,000"></div>
<div class="field"><label class="lbl">Unit</label>
<div class="seg"><button class="on">sats</button><button>BTC</button></div>
</div>
</div>
<div class="hint">≈ $30.00 USD at current rate. Updated every 30s from your BTCPay store.</div>
</div>
</div>
</div>
<div class="panel-stack" style="position: sticky; top: 90px;">
<div class="eyebrow">Preview</div>
<div class="preview-cert">
<div class="stamp">— Certificate of License —</div>
<div class="h">Sundial 2.0</div>
<div class="sub">default · 1 year · single seat</div>
<div class="field">License key</div>
<div class="value">KS-XXXX-XXXX-XXXX-XXXX</div>
<div class="row-2">
<div><div class="field">Price</div><div class="value">50,000 sats</div></div>
<div><div class="field">Trial</div><div class="value">14 days</div></div>
</div>
</div>
<div class="card" style="background: var(--cream-100); padding: 14px 16px; font-size: 12.5px; color: var(--ink-700);">
<div style="display: flex; gap: 8px; align-items: start"><i data-lucide="info" style="width: 14px; height: 14px; color: var(--navy-700); flex-shrink: 0; margin-top: 2px;"></i>
<span>Your public purchase URL will be<br><code style="font-family: var(--font-mono); color: var(--navy-900); font-size: 12px">aurora.keysat.local/buy/sundial-2</code></span>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<script src="https://unpkg.com/lucide@latest"></script>
<script>lucide.createIcons();</script>
</body>
</html>