From 334011f4b4bd6e125e290c21e59d057e4852af0a Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 29 Jul 2026 19:41:45 +0000 Subject: [PATCH] Add Password Generator tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A single-file, offline productivity/security tool that generates strong random passwords locally using crypto.getRandomValues (rejection-sampled to avoid modulo bias). Length slider (4–64), toggles for uppercase, lowercase, numbers, symbols, and an "avoid ambiguous characters" option, with a live entropy-based strength meter and one-tap copy. Follows the Hillnote design system (azure primary, mist canvas, Manrope display, 24px card radius). Settings persist in localStorage. Registered in tools.json and bumped catalogVersion to 19. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01FvC7h6adG42ydYXb6ZuHV5 --- password-generator/index.html | 592 ++++++++++++++++++++++++++++ screenshots/password-generator.webp | Bin 0 -> 30370 bytes tools.json | 10 +- 3 files changed, 601 insertions(+), 1 deletion(-) create mode 100644 password-generator/index.html create mode 100644 screenshots/password-generator.webp diff --git a/password-generator/index.html b/password-generator/index.html new file mode 100644 index 0000000..a8fbab5 --- /dev/null +++ b/password-generator/index.html @@ -0,0 +1,592 @@ + + + + + + + Password Generator + + + + +
+
Productive · Security
+

Password Generator

+

Create strong, random passwords right in your workspace. Nothing leaves your device — every password is generated locally.

+
+ +
+
+ click generate +
+ + +
+
+ +
+ +
+ Strength: + +
+
+ +
+
+
+ + 16 +
+ +
+ +
+ + + + + +
+ + + + +
+
+ +
Copied to clipboard
+ + + + + diff --git a/screenshots/password-generator.webp b/screenshots/password-generator.webp new file mode 100644 index 0000000000000000000000000000000000000000..8c359d9f4fcaa65996a9c66e3c8b1ddbc82a0b26 GIT binary patch literal 30370 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 literal 0 HcmV?d00001 diff --git a/tools.json b/tools.json index b0e7462..9484590 100644 --- a/tools.json +++ b/tools.json @@ -1,5 +1,5 @@ { - "catalogVersion": 18, + "catalogVersion": 19, "tools": [ { "dir": "color-capture", @@ -192,6 +192,14 @@ "glyph": "🌍", "color": "#4d63ff", "version": 1 + }, + { + "dir": "password-generator", + "name": "Password Generator", + "description": "Create strong, random passwords locally — pick the length and character types, and see the strength as you go.", + "glyph": "🔑", + "color": "#4d63ff", + "version": 1 } ] }