8d9796d9bb74

Pro upsell — add Peach Codex, rename 'Android & iOS' to 'Mobile apps · Android, iOS soon', tighten grid to 3x2 uniform layout, smaller headline + subtitle to fit popup viewport. Bump 3.6.16

time
2026-05-18 23:03 UTC · 5 months ago
machine
koh2
parent
27f87865ee6a
5 files manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/styles/popup.css+7 −7src/popup/views/Settings.tsx+7 −16
manifest.firefox.json+1 −1
@@ -2,7 +2,7 @@22   "_comment_audio_capture": "Firefox does not honor the Chrome 'audioCapture' optional_permission — getUserMedia in WebExtensions is gated solely by the runtime permission prompt. Microphone access for chirp pairing works from the popup under the existing '<all_urls>' host permission; no manifest entry is required or accepted here.",33   "manifest_version": 3,44   "name": "Peach",5-  "version": "3.6.15",5+  "version": "3.6.16",66   "description": "Zero-knowledge password manager",77   "browser_specific_settings": {88     "gecko": {

view file

manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach",4-  "version": "3.6.15",4+  "version": "3.6.16",55   "description": "Zero-knowledge password manager",66   "action": {77     "default_popup": "src/popup/index.html",

view file

package.json+1 −1
@@ -1,6 +1,6 @@11 {22   "name": "peach",3-  "version": "3.6.15",3+  "version": "3.6.16",44   "description": "Zero-knowledge password manager",55   "type": "module",66   "scripts": {

view file

src/popup/styles/popup.css+7 −7
@@ -5952,8 +5952,8 @@59525952   display: flex;59535953   flex-direction: column;59545954   align-items: stretch;5955-  gap: 14px;5956-  padding: 4px 2px 16px;5955+  gap: 10px;5956+  padding: 2px 2px 12px;59575957 }59585958 59595959 .peach-pro-eyebrow {@@ -5968,7 +5968,7 @@59685968 .peach-pro-headline {59695969   margin: 0;59705970   font-family: var(--font-display, "Cormorant Garamond", serif);5971-  font-size: 36px;5971+  font-size: 30px;59725972   font-weight: 700;59735973   font-style: normal;59745974   line-height: 1.05;@@ -5983,8 +5983,8 @@59835983 59845984 .peach-pro-subtitle {59855985   margin: 0;5986-  font-size: 0.75rem;5987-  line-height: 1.55;5986+  font-size: 0.6875rem;5987+  line-height: 1.5;59885988   color: var(--peach-t1);59895989 }59905990 @@ -5999,8 +5999,8 @@59995999 .peach-pro-grid-item {60006000   display: flex;60016001   flex-direction: column;6002-  gap: 3px;6003-  padding: 10px 10px 10px 10px;6002+  gap: 2px;6003+  padding: 8px 9px;60046004   border-right: 1px solid var(--peach-border);60056005   border-bottom: 1px solid var(--peach-border);60066006 }

view file

src/popup/views/Settings.tsx+7 −16
@@ -1394,11 +1394,12 @@13941394     name: string;13951395     desc: string;13961396   }> = [1397-    { feature: "sync", name: "Peach Sync", desc: "Encrypted · peer-to-peer · local" },1398-    { feature: "ios_app", name: "Android & iOS", desc: "Your vault everywhere" },1397+    { feature: "sync", name: "Peach Sync", desc: "Encrypted · peer-to-peer" },1398+    { feature: "codex", name: "Peach Codex", desc: "Restore from paper" },13991399     { feature: "passkeys", name: "Passkeys", desc: "Zero-knowledge WebAuthn" },1400-    { feature: "advanced_health", name: "Advanced Vault Health", desc: "Reuse · age · exposure scoring" },1401-    { feature: "smart_password_change", name: "Smart Password Change", desc: "Guided reset · pre-filled · vault updated" },1400+    { feature: "ios_app", name: "Mobile apps", desc: "Android · iOS soon" },1401+    { feature: "advanced_health", name: "Vault health", desc: "Reuse · age · exposure" },1402+    { feature: "smart_password_change", name: "Smart reset", desc: "Guided password change" },14021403   ];14031404 14041405   const [licenseKey, setLicenseKey] = createSignal<string | null>(null);@@ -1448,11 +1449,11 @@14481449                   </h2>14491450 14501451                   <p class="peach-pro-subtitle">1451-                    A single key unlocks sync, mobile, passkeys and our most thorough vault health tooling — for the lifetime of the app.1452+                    One key unlocks every Pro feature — for the lifetime of the app.14521453                   </p>14531454 14541455                   <div class="peach-pro-grid">1455-                    <For each={PRO_FEATURES.slice(0, 4)}>1456+                    <For each={PRO_FEATURES}>14561457                       {(item, i) => (14571458                         <div14581459                           class="peach-pro-grid-item"@@ -1464,16 +1465,6 @@14641465                         </div>14651466                       )}14661467                     </For>1467-                    <Show when={PRO_FEATURES[4]}>1468-                      <div1469-                        class="peach-pro-grid-item peach-pro-grid-item--wide"1470-                        classList={{ "is-highlighted": props.upgradeHighlight === PRO_FEATURES[4].feature }}1471-                      >1472-                        <span class="peach-pro-grid-num">05</span>1473-                        <span class="peach-pro-grid-name">{PRO_FEATURES[4].name}</span>1474-                        <span class="peach-pro-grid-desc">{PRO_FEATURES[4].desc}</span>1475-                      </div>1476-                    </Show>14771468                   </div>14781469 14791470                   <div class="peach-pro-upgrade-actions">

view file