Highlights
- The phone app stays put - the header no longer scrolls away with the page. On an installed app it also sits clear of the status bar and the home indicator, and the page no longer bounces when you pull past the top.
- One menu button on the phone - the section links, notifications, your profile and sign-out are now behind a single button in the header, available on every page instead of only the dashboard. Unread notifications show their count on the button itself.
- More room for what matters - the company name and the row of section buttons were taking up a third of the first screen on a phone. The title now fits without being cut off, and the duplicated section row is gone.
- Costs grouped by category - filter the costs and income list to the categories you care about, see a total per category, and page through long lists. The CSV export follows the filter you have applied, not just the page you are looking at.
- Staff see when a shift is settled - once a manager approves the timesheet, the shift shows "Approved" instead of a stale "Published" or "Updated" badge.
- Reach us on WhatsApp - a WhatsApp button on the marketing site, in the footer and next to the sign-up call to action.
Changes
Features
- feat(mobile): sticky header with safe-area insets on notched devices, contained overscroll in the installed app, and denser page headings on small screens.
- feat(mobile): single header menu grouping section navigation, notifications, profile and sign-out, with the unread count on the trigger.
- feat(company-costs): filter and total the entries by category, paginate the list, and carry the active filter into the CSV export.
- feat(shifts): show "Approved" on a staff shift once its timesheet has been approved.
- feat(marketing): WhatsApp contact channel as a floating bubble, a footer link and a secondary call to action.
Fixes
- fix(my): the week range is now a plain label rather than a link that jumped elsewhere, and the time-off button reads "Request time off".
Refactors
- refactor(auth): extract the shared sign-out sequence so the account menu and the new header menu cannot drift apart.
Chores
- chore(lint): ignore local agent worktrees so they stop being linted as duplicate sources.