web: state the no-server/in-browser privacy clearly + self-host fonts
- Make the privacy promise true: bundle the fonts (Poppins/Inter/JetBrains Mono latin subsets + the text-security mask font) under helwasm/assets/fonts/ and drop the Google Fonts + jsDelivr links. The page now makes zero external requests once loaded — it talks to no third party. - Say it plainly throughout the UI: a "Private by design" callout in the About panel, the meta description, the quick-gen and console hints, and the footer — nothing you type leaves the browser, no server, no account, no tracking.
This commit is contained in:
+18
-12
@@ -5,17 +5,13 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||
<meta name="theme-color" content="#0a2540" />
|
||||
<title>LesS/KEY — password generator</title>
|
||||
<meta name="description" content="A password manager that stores nothing and never talks to a server. Passwords are generated entirely in your browser with WebAssembly; your master password and your data never leave your device." />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="./assets/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="./assets/favicon-16x16.png" />
|
||||
<link rel="icon" href="./assets/favicon.ico" sizes="any" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="./assets/apple-touch-icon.png" />
|
||||
<link rel="manifest" href="./assets/site.webmanifest" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<!-- Fonts are self-hosted in style.css (./assets/fonts/) — no external requests. -->
|
||||
<link rel="stylesheet" href="./style.css" />
|
||||
</head>
|
||||
<body>
|
||||
@@ -49,6 +45,13 @@
|
||||
master always produce the same password — so there is nothing secret to leak,
|
||||
sync, or back up, and you only ever remember one phrase.
|
||||
</p>
|
||||
<p class="about-privacy">
|
||||
<strong>Private by design.</strong> Everything happens on your device. Your master
|
||||
password and the passwords it generates are never sent anywhere, never stored on a
|
||||
server, and never logged — there is no account, no sync, and no tracking. The app is a
|
||||
single page plus a WebAssembly module, with its fonts bundled in; once it has loaded,
|
||||
it makes no network requests at all.
|
||||
</p>
|
||||
<div class="about-grid">
|
||||
<div>
|
||||
<h4>Quick password</h4>
|
||||
@@ -62,8 +65,9 @@
|
||||
<h4>Console</h4>
|
||||
<p>
|
||||
The full command line — type <code>help</code> for every command. Your list of
|
||||
names lives only in this browser (localStorage); use <strong>Export</strong> /
|
||||
<strong>Import</strong> to move it (e.g. to and from a Notion page).
|
||||
names lives only in this browser (localStorage), never on a server; use
|
||||
<strong>Export</strong> / <strong>Import</strong> to move it yourself (e.g. to and
|
||||
from a Notion page).
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
@@ -77,7 +81,7 @@
|
||||
</div>
|
||||
<p class="about-note">
|
||||
Runs the real hel engine compiled to WebAssembly — the exact same generator as the
|
||||
command-line tool. Nothing is ever sent to a server.
|
||||
command-line tool. No server, no account, no tracking — nothing to leak.
|
||||
</p>
|
||||
</div>
|
||||
</details>
|
||||
@@ -88,8 +92,9 @@
|
||||
<h2>Quick password</h2>
|
||||
<p class="hint">
|
||||
Deterministic — the same name + master always regenerate the same
|
||||
password. The result updates live as you type. Nothing is stored unless
|
||||
you press <strong>Store</strong>.
|
||||
password. The result updates live as you type, entirely in your browser —
|
||||
your master and the generated password never leave this device. Nothing is
|
||||
stored unless you press <strong>Store</strong>.
|
||||
</p>
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
@@ -132,6 +137,7 @@
|
||||
|
||||
<footer class="foot wrap">
|
||||
Runs the real hel core compiled to WebAssembly — same generator as the CLI.
|
||||
Everything runs in your browser; nothing you type is ever sent to a server.
|
||||
</footer>
|
||||
|
||||
<div class="toast" id="toast"></div>
|
||||
@@ -470,7 +476,7 @@
|
||||
bg.addEventListener("click", (e) => e.target === bg && bg.classList.remove("show"))
|
||||
);
|
||||
|
||||
appendLine('<span class="muted"># LesS/KEY ready — runs the real hel core via WASM. Try: help</span>');
|
||||
appendLine('<span class="muted"># LesS/KEY ready — runs entirely in your browser (WASM); nothing is sent to a server. Try: help</span>');
|
||||
}
|
||||
boot();
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user