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

Your work is done.
Make sure you're paid for all of it.

Download Aeto free. Your first 30 days are on us. No card, no commitment — just the end of the unbilled hour.