A Chrome extension that validates, encrypts, and stores your frequently used URLs client-side — so you can copy them in one click without ever mistyping them again.
When applying for jobs, you repeatedly share the same handful of URLs — your LinkedIn profile,
GitHub, portfolio, resume. Copy-pasting from memory is error-prone: a missing /in/, a typo in your
username, or an outdated link can quietly undermine an otherwise strong application. This extension
puts the right URL on your clipboard in a single click, every time.
Encrypted URL Manager is a Chrome extension built with React, TypeScript, and Tailwind CSS v4. It stores your URLs locally in IndexedDB, encrypted with AES-GCM 256-bit encryption via the Web Crypto API. No cloud. No accounts. No external dependencies at runtime.
- One-click copy — click any label to instantly copy its URL to your clipboard
- AES-GCM 256-bit encryption — URLs are encrypted at rest using the Web Crypto API; the key is auto-generated and stored locally
- Input validation & sanitization — labels are stripped of HTML special characters; URLs are
validated to
http/httpsonly, blockingjavascript:anddata:schemes - Inline editing — update a label or URL at any time without deleting and re-adding
- Drag and drop reordering — arrange your links in whatever order makes sense to you
- Fully local — everything lives in your browser's IndexedDB; nothing leaves your machine
Labels and URLs are validated before saving. Invalid or unsafe input is rejected with inline feedback.
Click the pencil icon on any row to edit its label or URL inline.
Hover a row to reveal the delete button.
Drag the handle on the left of any row to reorder your links.
URLs are stored as AES-GCM 256-bit encrypted ciphertext in IndexedDB. You can verify this yourself in Chrome DevTools under Application → IndexedDB → ProfileLinksDB → links.
| Layer | Choice | Reason |
|---|---|---|
| Framework | React + TypeScript | Component isolation, type safety |
| Build tool | Vite | Fast builds, clean output for extensions |
| Styling | Tailwind CSS v4 | Utility-first, no runtime overhead |
| Storage | IndexedDB | Client-side, persistent, no size limits |
| Encryption | Web Crypto API (AES-GCM 256) | Native browser crypto, no dependencies |
Why IndexedDB over a cloud database? Firebase and Supabase were considered. Although the URLs stored here are publicly accessible links, there was no compelling reason to send them to a cloud database. IndexedDB keeps everything local, requires no authentication, and has no network dependency. The data is also low-stakes — if it's ever lost, re-adding a handful of URLs takes under a minute.
Why encrypt at all? The URLs stored here are public by nature, so this isn't about protecting secrets. Encryption is implemented because it reflects real-world best practices for client-side storage and demonstrates the correct pattern for when the stakes are higher.
Why sanitize inputs? Input sanitization and URL protocol validation guard against malformed data
and potentially harmful schemes like javascript: being stored or executed. It's considered
standard practice and costs nothing to implement correctly.
A packaged release will be available on GitHub. Until then, follow the steps below to load it manually.
- Node.js (v18 or higher)
- npm
- Brave, Google Chrome, or any Chromium-based browser
1. Clone the repository
git clone https://github.com/Daegybyte/encrypted-url-manager.git
cd encrypted-url-manager2. Install dependencies
npm install3. Build the extension
npm run build4. Load in Chrome
- Open Chrome and navigate to
chrome://extensions - Enable Developer mode using the toggle in the top right
- Click Load unpacked
- Select the
dist/folder inside the project directory
The extension will appear in your toolbar. Pin it for easy access.
npm run dev # start local dev server at localhost:5173 for UI development
npm run build # rebuild dist/ for the extensionAfter any npm run build, click the reload button (↺) on the extension card in
chrome://extensions to pick up the changes.
To confirm your URLs are encrypted at rest:
- Right-click the popup → Inspect
- Go to the Application tab
- Navigate to Storage → IndexedDB → ProfileLinksDB → links
- The
encUrlfield will show base64-encoded ciphertext, not your URL - Check keys to see the stored AES key — it never leaves your browser







