Huble

role
Full-stack engineer
client
Huble (DevnTech)
stack
Ruby on Rails, React, TypeScript, Sidekiq
when
A few months
outcome
Built the QuickBooks and Xero export in Huble's integrations layer, so tracked hours turn into an invoice without a CSV
demo
live
Screenshot of the Huble homepage
Huble's homepage — "100+ integrations, no CSVs" is the line the billing export work sits under

The product

Huble is a time tracking and project management tool for distributed teams: a desktop tracker for macOS, Windows and Linux with offline-first sync, timesheets with manager approvals, project budgets and margin reporting. It positions itself against screenshot-surveillance trackers, with the argument that monitoring tools get abandoned and the data becomes useless.

The problem

Huble turns tracked hours into project margin teams can defend in a client meeting, but getting from a timesheet to an actual invoice still meant exporting a CSV and reshaping it by hand for whatever billing tool the client used.

What I built

The QuickBooks and Xero connectors in Huble’s integrations layer: approved timesheets map to line items in the target billing tool automatically, so the export step goes away. Sync runs as a background job against each provider’s API, with per-account credentials and rate limits handled per integration rather than shared across all of them.

Decisions and tradeoffs

  • Background sync (Sidekiq) rather than sync-on-approval in the request cycle, since a billing provider being slow or briefly down shouldn’t block someone approving a timesheet.
  • Per-account provider credentials and their own rate-limit budget, so one account hitting QuickBooks’ API limit doesn’t degrade sync for anyone else on the platform.

Outcome

Approved time reaches QuickBooks or Xero without a CSV in between — one entry in the “100+ integrations” Huble’s homepage advertises.