This Week in Miru: QuickBooks in Review, Configurable Timesheets, and Mobile Polish
May 20-June 2: configurable timesheet edit windows, mobile responsive cleanup, analytics alert fixes, dependency patches, and QuickBooks Online sync moving through review.
This cycle was about two things: make the everyday app less brittle, and move accounting sync from idea to reviewable code.
May 20-June 2: miru-web merged 13 non-merge commits on develop. In parallel, QuickBooks Online sync moved into active review in PR #2332 with four focused commits on top of develop.
The distinction matters. Configurable timesheet edit windows, mobile polish, analytics scope fixes, and dependency patches are merged. QuickBooks is not being described as shipped yet; it is in review with a real implementation, specs, and manual smoke evidence.
1) QuickBooks Online Sync Is In Review
The big forward-looking work this cycle is QuickBooks Online.
The open branch adds the foundation for connecting a Miru workspace to QuickBooks, exporting billing records, and keeping enough reference data to make future syncs auditable instead of guesswork.
What is in review:
- encrypted QuickBooks OAuth token handling
- connection, reference, sync-run, and sync-event tables
- owner/admin status, connect, callback, disconnect, and settings APIs
- QuickBooks connection state surfaced in payment settings
- customer, invoice, and payment export services
- stored QuickBooks references and
SyncTokenhandling - payload digests so repeat exports can tell whether data changed
- background export jobs
- manual sync endpoints for workspace, invoice, and payment export
- sanitized OAuth failure logging
The product rule is the same one we use for CLI and MCP: money-facing automation needs traceable state. Exporting an invoice is not just an API call. Miru has to know what it sent, when it sent it, what QuickBooks returned, and whether a later export is a retry, an update, or a new record.
Related work:
- QuickBooks connection foundation:
042cc77d - Export Miru records to QuickBooks:
43db0868 - Export base simplification:
58a2f6dd - QuickBooks review coverage:
202810a6
2) Timesheet Edit Windows Are Now Configurable
The old default was blunt: standard users could not edit older timesheet entries past the hardcoded window.
That is too rigid for real teams. Some teams close time weekly. Some need a month. Some want a tighter policy once billing is active.
Miru now has a company-level timesheet_edit_days setting with a default of 30 days and a validated range of 1-365.
What changed:
- organization settings can save the edit window
/api/v1/users/meincludes the configured company value- entry cards and time entry displays read the real company setting
- backend policies enforce the same configured window
- bulk update and bulk destroy use the same lock rules
- billed entries stay locked
- admins and owners retain privileged access
- locked messages preserve
%{days}interpolation across locales - old entries show a clearer “Edit closed” state
This is the kind of change that needs both UI and policy work. A setting that only changes the screen is worse than no setting at all. The backend now enforces the same rule the user sees.
Related work:
- Configurable timesheet edit window:
cf1fee9e
3) Mobile Web Got A Real Responsiveness Pass
The mobile app is one surface. The web app still has to work on a narrow browser.
This pass fixed several places where the product was technically usable but visually fragile on 360px screens:
- time tracking month and week views no longer overflow
- dashboard header layout avoids hamburger and locale-switcher collisions
- DataTable pagination is contained on narrow screens
- floating timer no longer overlaps the entry form on mobile
- leave calendar cells and padding scale down cleanly
- settings, preferences, leaves, and profile pages behave better on mobile
- expenses date picker state no longer leaks between add and edit dialogs
- mobile payment transaction type dropdown has stronger keyboard and ARIA behavior
- duplicate success toasts were removed
- toast notifications now have a close button

None of this is headline-glamorous. It is the difference between “Miru supports mobile” and “I can fix this invoice/time entry from my phone without fighting the layout.”
Related work:
- Mobile responsive UI fixes:
d5af1eed
4) Payment And Profile Polish Removed Small Daily Frictions
Two smaller UI fixes landed after the responsive pass:
- profile page alignment and dropdown highlight issues were cleaned up
- the payment modal invoice field label now matches the floating-label pattern
Small form inconsistencies compound. Billing screens should feel predictable because people use them when they are already doing careful work.
Related work:
5) Analytics Alerts Got The Right Scope
Utilization threshold alerts got a scope correction.
The fix is small in code and important in behavior: alerts should evaluate the right workspace/team context, not drift because the schedule or analytics query is looking at the wrong shape of data.
We also added specs around the schedule, team productivity analytics, and threshold evaluator.
Related work:
- Utilization alert scope fix:
0d170ff3
6) Dependencies And Repo Hygiene Moved Forward
Four dependency updates landed:
faradayfrom 2.14.1 to 2.14.2brace-expansionfrom 5.0.5 to 5.0.6 inapps/mobilejs-cookiefrom 3.0.5 to 3.0.7jwtfrom 2.7.0 to 3.2.0
We also removed repo-local Codex and vendored modern-web guidance files from miru-web. That is not product UI, but it keeps the application repo cleaner and reduces instructions that do not belong in the product codebase.
7) E2E Coverage Needs A Smaller Permanent Shape
A large Playwright E2E suite was added and then reverted the same day.
That is worth saying plainly. The direction is right; broad user-flow coverage matters. The implementation was too large to accept as a permanent baseline in that form.
The useful lesson: keep the high-value regressions, but land them in smaller slices with stable fixtures and clear ownership. A 340-test drop is easy to admire and hard to maintain.
By The Numbers (May 20 To June 2)
- 13 merged non-merge commits on
miru-webdevelop - 4 QuickBooks PR commits in active review
- 52 files touched by configurable timesheet edit windows
- 37 files touched by the mobile responsive pass
- 22 non-English locales updated for edit-window lock messages
- 4 dependency updates
- 1 large E2E suite intentionally reverted before becoming baseline
What This Means
Miru is getting stricter where billing needs strictness and more flexible where teams need policy control.
Configurable timesheet windows let companies choose their close policy without lying to the backend. Mobile web fixes make routine capture and cleanup less painful. Analytics alerts are less likely to fire from the wrong scope. QuickBooks sync is moving through review with the right primitives: encrypted tokens, references, sync runs, events, digests, jobs, and explicit endpoints.
The direction is boring in the right way: fewer silent assumptions, more auditable workflows.
Watchlist
- QuickBooks review. Acceptance: sandbox-tested exports, clear failure states, no token leakage, and user-visible sync history before calling it shipped.
- Timesheet edit policy. Acceptance: no mismatch between UI lock state, single-entry API policy, and bulk action policy.
- Mobile web. Acceptance: keep testing at 360px width for time tracking, dashboard, payments, expenses, leaves, and settings.
- Analytics alerts. Acceptance: production alerts reflect the intended workspace/team scope.
- E2E rebuild. Acceptance: smaller permanent specs around the highest-risk billing and time-tracking flows.
Start with Miru at app.miru.so/signup, or follow the source at github.com/saeloun/miru-web.
Vipul A M
Co-founder at Saeloun. Building Miru. Rails contributor. Shipping from Pune, India.
Read next
This Week in Miru: Mobile Beta, Signed Desktop, CLI Invoices, and Safer Billing
Apr 29-May 19: 199 non-merge commits across Miru web, mobile, desktop, and marketing. Mobile beta work, signed desktop builds, CLI invoice creation, invoice taxes, signatures, payment downloads, search highlighting, and auth hardening.
This Week in Miru: MCP, Safer Billing, Agent-Ready
Apr 20-28: MCP production use, cleaner CLI setup, invoice fixes, client forms, Level 5 agent readiness, and SEO schema cleanup.
This Week in Miru: Safer Team Offboarding, Smarter Reminders, and Invoice Workflow Cleanup
From April 13 to April 22, we shipped 116 non-merge commits across reminders, invoicing, team management, calendars, i18n, and auth hardening.
Put it to work
Run one cleaner billing cycle in Miru.
If this article is about tracking time, billing clients, comparing tools, or automating work, Miru is the product version of that idea. Start free, invite the team, and send the next invoice from tracked work.
What you get
- Time tracking, invoices, expenses, and payments in one place.
- Free for up to 5 users. Pro is $1/member/month.
- Open source, with CLI, API, MCP, and self-hosting paths.
The article is the argument. Miru is the workflow.
Track the work, approve the hours, send the invoice, and get paid without bolting together three separate tools.