Release Notes
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 now appear in every column on both the client kanban and the global Tasks board
- Add Task buttons stay pinned below the last card — dragging a task to a new column no longer drops it below the button
- Fixed Add Task buttons disappearing after creating a new task
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.0
Improvements
- Add Task buttons now appear in each kanban column on both client and global task boards
- Add Task buttons sit directly below each column’s cards, not at the bottom of the tallest column
- Fixed Add Task buttons disappearing after creating a new task
- Sync overlay with animated logo when the app wakes from sleep
- Fixed screen flash on app load — goes straight to last-used view
- Removed stale placeholder content that appeared briefly on refresh
- Drag-over column highlight now has proper spacing from text
- Full release build pipeline: sign, notarize, staple, verify, and publish in one command (npm run release)
- XSS security fixes across all views
Version 1.2.1
Security
- Hardened the app against XSS injection across all views — client names, task titles, project names, invoice numbers, business info, and error messages are now safely escaped before rendering into the UI
Web App
- Fixed the favicon not turning red during an active timer session on the web version
- Version number now displays correctly on the web version (previously only showed in the Mac app)
Mobile
- Full mobile-responsive layout matching the sidebar, dashboard, kanban, and client views
- Sidebar opens as an off-canvas drawer with a hamburger menu; closes automatically when a client is selected
- Kanban board scrolls horizontally with snap-to-column behavior and a tab strip for navigating between columns
- Client view is responsive on mobile
- Task detail panel shows a shadow overlay when open
- Safe area insets added for notched devices (iPhone home indicator, Dynamic Island)
- Touch targets meet minimum 44px sizing
Terms of Service
- New Terms of Service acceptance gate shown on first login — users must scroll through and accept before using the app
- Acceptance is recorded in the database with timestamp and version; gate re-appears if terms are updated
Stripe & Billing
- Checkout flow now tracks whether the user subscribed from the Mac app or web, enabling correct post-checkout redirect
- Webhook handler records trial end date and plan name from Stripe price lookup key
- New user profiles are automatically created on signup with a 30-day trial
