# OTP Watcher — Backlog

## Authentication
- **OAuth 2.0 login** — replace App Passwords with a browser-based "Sign in with Google" flow. One-time Google Cloud project setup, then any Gmail account is added with a single click. Also unblocks proper `.app` packaging and custom URL schemes.

## Packaging & Distribution
- **py2app bundle** — package into a proper `OTP Watcher.app` so it launches from Finder/Spotlight with no terminal. Drag-to-Applications install, real Dock icon, no Python environment needed.
- **Code signing** — sign the `.app` with an Apple Developer certificate so macOS doesn't show "unidentified developer" warnings.
- **DMG installer** — wrap the signed `.app` in a `.dmg` with a drag-to-Applications shortcut for easy sharing/reinstall.
- **Auto-update** — "Check for Updates" menu item that fetches the latest release from GitHub and prompts to install.

## Settings UI
- **Edit account** — currently you have to Remove + re-Add to change an email or password. Add an Edit button/double-click to update in place.
- **Per-account status indicator** — show a green/red dot next to each email in the accounts list (connected vs. error).
- **Connection error surfacing** — when an account fails to connect (e.g. wrong App Password), show a clear error in the menu instead of only logging to terminal.

## Detection & Reliability
- **Broader OTP patterns** — some services send codes in unusual formats (e.g. hyphenated `123-456`, lowercase `a1b2c3`). Tune the regex to catch more edge cases.
- **Allowlist / blocklist** — let the user ignore specific senders or domains so noisy emails don't trigger false positives.
- **History persistence** — the Recent OTPs list resets on restart. Persist it to disk (last N codes) so it survives relaunches.

## Notifications & UX
- **Notification action button** — add a "Copy Again" action button directly on the macOS notification banner (requires `UNUserNotificationCenter`, available via PyObjC).
- **Sound customisation** — let the user pick from a list of system sounds in Settings instead of hardcoding "Glass".
- **Menu bar badge** — show a count badge on the icon when new OTPs arrive while the menu is closed.
