Release Notes
Version 1.6.0
Mobile Invoice Improvements
- Pinch-to-zoom enabled while an invoice modal is open; zoom is restored on close.
- Invoice scales correctly to fit the screen without horizontal overflow — padding is now accounted for in the zoom calculation.
- Invoice modal no longer forces full-screen height — it shrinks to content, eliminating empty space below short invoices.
- Invoice detail footer stacks into two rows on narrow screens; Update Status moved alongside Delete and Reprint PDF; redundant Close button removed.
Fixed
- Account deletion fixed on all platforms — was silently failing on iOS and web because ipcRenderer was null; now calls the Supabase Edge Function directly. CORS headers added to the Edge Function so browser and WebView clients can reach it.
- Payment method no longer silently dropped — the method field was being destructured but never saved to the database.
- Invoice PDF footer now handles empty fields — previously rendered dangling separators and trailing commas when address or website were blank.
- CapacitorAdapter implemented — was throwing on all methods; now works correctly. Storage routing fixed to use Capacitor.getPlatform() === 'ios' instead of the unreliable isCapacitor().
- Subscription panel showed "false" on iOS — a short-circuit evaluation bug was rendering the boolean as a literal string in the HTML template.
- Terms gate and paywall no longer shown multiple times on new account sign-in — initApp() was being called simultaneously on iOS; a guard flag now prevents this.
- Dead code removed from createNewProject.
Version 1.5.2–1.5.9
Mobile / iOS
- iOS-safe login screen layout with safe area padding for notched and Dynamic Island devices.
- iOS invoice PDF export via Web Share API — share directly to AirPrint or Save to Files.
- Kanban drag-and-drop rebuilt with SortableJS; iOS users can tap any card to open the detail view.
- Settings navigates as a push stack on mobile instead of opening a modal.
- Mobile add buttons, drag handles, and card tap targets fixed throughout.
- Timer pill updated to use SVG icons; login screen logo respects safe area insets.
- RevenueCat iOS subscription integration — in-app purchase, restore, and management from Settings → Subscription.
- New subscribers on iOS are presented with a subscription screen on launch.
- iOS subscribers can manage or cancel their subscription and restore previous purchases directly from Settings → Subscription.
- Full-screen modal layouts apply safe area insets on all edges.
- Login screen vertically centered on all mobile screen sizes.
Changed
- "Unbilled This Month" banner renamed to "Ready to Invoice" for clarity.
Fixed
- Deadline date input no longer overflows its container on iOS.
- Clients with overdue invoices now correctly show the overdue indicator in the sidebar.
- + Log Time button within the task detail window now works correctly.
Version 1.5.1
Added
- Settings → Help — new section with embedded how-to content from aeto.app and a contact link to [email protected]
- Trial onboarding — 30-day free trial now starts automatically the moment a new user accepts the Terms of Service, with no separate activation step required. A one-time welcome banner on the Tasks screen confirms the trial is running.
- Login screen — two-column layout with intent-aware copy: "Welcome back" for returning users, "Start your free trial" when arriving via the signup CTA. Includes a reassurance line, footer links (Privacy Policy, Terms of Service), and a brand panel with display typography.
Changed
- Task card urgency is now expressed as a background gradient and box-shadow rather than a colored left-border stripe. Each urgency level (overdue, due today, tomorrow, 2 days, 3 days, in review) has its own color treatment, applied consistently across Kanban, List, and Calendar views.
- Version number restored to Settings → Account panel.
Fixed
- Help iframe now loads correctly in the app. aeto.app's X-Frame-Options header is stripped locally so the embedded page renders as intended.
Version 1.5.0
Added
- New Settings view with Account, Subscription, Timer, and Danger Zone sections
- Gear icon in sidebar replaces profile navigation
- Kanban To Do column supports drag-to-reorder with visual drop indicator
- Chrome extension session handoff sends auth tokens after sign-in
- Invoice line items group all slips per task with single rounding
- Invoice line items display task names instead of generic "Task work"
- Auto-starting timer from kanban card uses task title for slip name
- Done column cards no longer show due date/overdue badge
- Favicon auto-fetch no longer crashes web app
- Web app login correctly detects platform
Changed
- Upgrade toast and activation banner link to Settings → Billing
- Auth token refresh retries 3× with backoff on wake-from-sleep
- System-resume network wait increased from 2s to 5s
Version 1.4.2
Fixed
- Web timer resume: play button after pause now resumes instead of navigating
- Subscription access enforced based on current_period_end field
- Profile page shows Inactive when subscription period lapses
- Readonly mode blocks all timer entry points and inline task creation
- Upgrade toast covers both trial-ended and lapsed-subscription scenarios
Version 1.4.1
Fixed
- Session no longer lost on wake from sleep (token refresh conflict between main/renderer processes)
- Invoice line items now group all slips per task, rounding hours once — fixes inflated unbilled totals and duplicate line items
- Invoice line items now show the task name instead of "Task work"
- Auto-starting a timer from a kanban card now uses the task title for the slip name
- Done column kanban cards no longer show the due date / overdue badge
- Favicon auto-fetch no longer crashes on the web app
- Web app login now correctly detects the platform (was erroneously running Electron-only code on web)
Changed
- Client empty state (no projects yet) shows a curved arrow pointing to the New Project button
- Favicon images in client list have slightly rounded corners
- Login screen app icon is now white with a purple/pink glow
Version 1.4.0
Bug Fixes
- Project icon updated from folder emoji to SVG folder icon throughout the app
- Timer no longer resets to zero after pausing and resuming from the menu bar
- Timer correctly accumulates across multiple pause/resume cycles
- Timer indicator play button now resumes a paused timer
- Updated favicon to magenta theme color
- Updated menu bar timer pill to magenta theme color
Improvements
- Fixed Project Profitability Report — Lists all flat-fee projects with logged hours, effective hourly rate, and color-coded delta vs. your target rate
- Profitability card strip on project detail (Details tab) for flat-fee projects: shows fixed fee, hours logged, effective rate, and target comparison
Version 1.3.0
Bug Fixes
- Fixed blank screen after waking from sleep — the app now silently refreshes your session when the Mac wakes up. If the session has fully expired, it shows the login screen cleanly instead of a blank screen
- Fixed auto-timer defaulting to off — the automatic timer-on-drag feature is now enabled by default for new users; existing preferences are preserved
- Fixed deep link handling on cold launch — the aeto:// protocol is now registered earlier, so opening a magic link when the app isn't running works reliably
Design
- New magenta accent color throughout the app, replacing the previous purple
- Calendar day columns are now equal width — long task names no longer push individual columns wider
- Logged time on Kanban cards is now brighter and easier to read
Version 1.2.6–1.2.8
Security
- Remove .env bundling from app
- Hardcode Supabase/PostHog keys in main process
Auto-Update
- Add ZIP target for macOS electron-updater delivery
- Fix quitAndInstall not relaunching after update
- Cap PostHog shutdown at 2s so it doesn't block relaunch
Analytics
- Add PostHog Node SDK in main process
- Add PostHog JS snippet in renderer
- Capture events: timer, client, project, invoice, auth, account
Bug Fixes
- Fix wake-from-sleep blank screen
- Fix window.resolveFaviconForClient not a function
- Fix toggle slider thumb overflow on profile page
- Fix tray menu task switch resetting timer to 0
- Fix PostHog main process crash on launch
- Revert "Unbilled This Month" to done-only tasks
Version 1.2.2–1.2.5
1.2.5 — Wake from sleep & staged releases
- Added 2-second delay on system resume before re-fetching data (gives network time to reconnect)
- Removed sample data fallback on load error — keeps existing data displayed instead of replacing with placeholder content
- Re-renders current view (dashboard, workload, client detail) after data reload, not just kanban
- Staged release pipeline: npm run release:staging creates a draft, npm run release:promote makes it live
1.2.4 — Login & system wake fix
- Fixed isElectron() returning false in production: VITE_APP_PLATFORM=electron was accidentally removed from .env during cleanup, causing login button to do nothing and system-resume handler to not register
1.2.3 — Auto-update format fix
- Added ZIP as a build target alongside DMG — electron-updater on macOS requires a ZIP file for updates, not a DMG
Auto-update & security fixes
- Fixed auto-update hash mismatch: removed manual codesign step that was invalidating latest-mac.yml after electron-builder generated it
- Removed GH_TOKEN from .env; stored in ~/.aeto-secrets (never bundled in the app)
- Removed .env from the distributed app bundle entirely
- Hardcoded Supabase credentials in main process instead of reading from bundled .env
Profile Screen
- Added in-app content panel (420×420) on the right side, loading from aeto.app/in-app
- Panel is right-aligned, borderless, sticky while the profile scrolls
- On mobile, panel stacks below the profile form
- Profile form fields capped at 520px so they don't stretch too wide
Version 1.2.1
Kanban
- Add Task buttons appear in every column
- Buttons stay pinned below the last card during drag operations
- Fixed buttons disappearing after task creation
Profile Screen
- Added in-app content panel (420×420) on right side, loading from aeto.app/in-app
- Panel is right-aligned, borderless, and sticky while the profile form scrolls
- On mobile, panel stacks below the profile form
- Profile form fields capped at 520px so they don't stretch too wide
Version 1.2.0
Improvements
- Add Task buttons in each Kanban column, sitting directly below the last card
- Sync overlay with animated logo shown on wake from sleep
- Fixed screen flash on app load
- Removed stale placeholder content
- Improved drag-over column highlight and spacing
- Full release build pipeline with code signing and notarization
- XSS security fixes across all views
Version 1.1.2
Security
- Hardened against XSS injection across all views
Web App
- Fixed favicon not turning red during an active timer
- Version number displays correctly
Mobile
- Full responsive layout for sidebar, dashboard, kanban, and client views
- Sidebar opens as an off-canvas drawer on small screens
- Kanban scrolls horizontally with snap-to-column behavior
- Safe area insets for notched devices
- 44px minimum touch targets throughout
Terms of Service
- New acceptance gate on first login
- Records acceptance with timestamp and version
Stripe & Billing
- Checkout tracks Mac app vs. web origin
- Webhook records trial end date and plan name
- Automatic profile creation with 30-day trial on signup