Universal binary & installer polish
The macOS menu-bar app now ships as a universal binary that runs natively on both Apple Silicon and Intel Macs. The DMG installer has been redesigned with a clear drag-to-install layout and a Gatekeeper warning notice.
- Universal binary — one DMG for both ARM (M1/M2/M3/M4) and Intel Macs
- Redesigned DMG background with drag-to-Applications arrow
- Added Gatekeeper first-launch notice: "right-click → Open" instruction baked into the installer
- DMG layout now persists reliably across builds via stored .DS_Store template
Extension logout now frees the device slot
When you signed out from the extension popup, the session was only cleared locally — the server-side record remained, consuming one of your 5 device slots. After enough logout/login cycles this would fill all slots and prevent a new portal session from being created.
- Extension popup now calls the API on logout to revoke the refresh token immediately
- Device slot is freed in real time — visible on the Devices page straight away
Devices page, instant revocation & Google OAuth fix
A new Devices page lets you see and manage every active session. Revocation is now instant — the extension detects it the moment you open its popup. A critical bug that broke Google sign-in for the extension was also fixed.
- New Devices page at app.tonero.app/devices — lists all active sessions with sign-in date, expiry, and device type
- Per-session Sign out button and a Sign out all button
- Refresh button to reload the device list without navigating away
- Portal logout now revokes all sessions (not just the current portal session)
- Extension popup verifies session validity against the server on every open — shows sign-in screen immediately if the session was revoked remotely
- Session ID embedded in access tokens so
/me can detect revocation within the 15-minute token window
- Fixed Google OAuth crash for extension logins (variable declaration order bug)
- Fixed base64url decode in JWT expiry check inside the extension
- Network errors during token refresh no longer force-logout the extension
Extension session recovery on popup open
If the access token had expired, the extension popup would show the login screen with no explanation. It now silently attempts a token refresh first, and only shows the login screen if the refresh is rejected by the server.
- Silent token refresh on popup open when access token is expired
- 4xx from server clears storage and shows login; 5xx / network errors preserve storage
Public beta launch
The waitlist opens. Early-access users get 3 months of Pro free and a permanent early-bird discount.
- Slack browser extension (Chrome & Firefox)
- Microsoft Teams browser extension
- 4 tones: Professional, Casual, Direct, Friendly
- Typo & grammar correction baked in
- Keyboard shortcut ⌘ Shift P
- Free tier: 30 rewrites / month
Regenerate & copy actions
Didn't love the first suggestion? Hit Regenerate to get a different rewrite of the same tone. Added a one-click Copy button so you can paste the result anywhere.
- Regenerate always shows a different variant — never the same one twice in a row
- Copy button flashes "Copied!" confirmation
- 3 distinct variants stored per tone for variety
Friendly tone + platform mockups
Added a fourth tone — Friendly — for messages where warm and approachable matters more than formal or efficient. Redesigned the integrations section with live platform mockups.
- Friendly tone with emoji-aware suggestions
- Slack chat mockup showing Tonero toolbar in context
- Microsoft Teams chat mockup
- Platform roadmap: Gmail, LinkedIn, Outlook, Discord listed as coming soon
Initial landing page & waitlist
First public version of the Tonero landing page. Launched the waitlist to validate demand before writing a single line of extension code.
- Landing page with hero, pricing, and how-it-works sections
- Waitlist form with email capture
- Tone showcase: Professional, Casual, Direct
- Three testimonials from beta testers