feat: multiple identity profiles

Identity tab now supports multiple named profiles:
- Dropdown selector to switch between profiles
- "+" button to add a new profile (prompts for name)
- Pencil button to rename
- X button to delete (can't delete the last one)
- Toggle to enable/disable each profile independently

Default profile is "Personal". All active profiles are merged
and substituted simultaneously — so "Personal" (your name) and
"Work" (your work email, company domain) both get caught.

Storage model: profiles are stored as an array under ss_identity.
getIdentity() merges all active profiles into a single identity
object for the substitution engine.

https://claude.ai/code/session_01Dvgwe7XMoSxnWXkih8p1Cw
This commit is contained in:
Claude
2026-03-26 02:56:00 +00:00
parent 6303ecb86b
commit c4356c3c6a
4 changed files with 235 additions and 44 deletions
+12 -1
View File
@@ -46,7 +46,18 @@
<!-- Identity Tab (Smart Patterns) -->
<section class="tab-content active" id="tab-identity">
<p class="help-text">Tell Silent Send who you are. It auto-catches all variations.</p>
<!-- Profile selector -->
<div class="profile-bar">
<select id="profileSelect" class="select" style="flex:1"></select>
<button class="btn-icon" id="btnAddProfile" title="Add profile">+</button>
<button class="btn-icon" id="btnRenameProfile" title="Rename profile">&#x270E;</button>
<button class="btn-icon" id="btnDeleteProfile" title="Delete profile">&times;</button>
<label class="toggle" title="Enable/disable this profile" style="margin-left:4px">
<input type="checkbox" id="profileActive" checked>
<span class="toggle-slider"></span>
</label>
</div>
<p class="help-text">Each profile is a person/identity. All active profiles are protected simultaneously.</p>
<div class="id-section">
<div class="id-label">Names</div>