
A Chrome Packaged App for time tracking
TSheets needed a product in the desktop app space and wanted outside feedback on building a web app against its public API. We created an offline-capable Chrome Packaged App.
“Their attention to detail and thorough weekly updates go above and beyond anything we have ever received… We wouldn't use anyone else.”
About TSheets
TSheets was an innovative SaaS company and one of the best places to work in Idaho. There was actually a vote, and they won. They built industry-shifting time-tracking technology on the strength of the many smart, talented people who worked there.
A desktop app, and a test of the public API
TSheets needed to create a product offering in the desktop app space and was evaluating the Chrome Web Store as a new marketing channel. They also wanted feedback from an outside developer about using their public API to build a web application, which faces similar design challenges to their mobile apps.
With those goals in mind, we created a Chrome Packaged App for TSheets.
Web technology, desktop-app behavior
Full time-card management
View the current clocked-in time card and add, edit, or delete existing timesheets.
Offline by design
Work offline with IndexedDB and sync with the TSheets API when back online.
Background sync
Separate background and foreground processes communicate by message-passing, like a native mobile app.
Feedback built in
Users submit feedback directly, with debug data attached to help fix issues.



Software architecture and design.
Coding all HTML, CSS, and JavaScript.
Implementing a design spec provided by the TSheets UX design team.
Day-to-day project management in Pivotal Tracker with weekly sprints and biweekly progress reports.
We chose Angular as the front-end framework. The Chrome App developer docs had Angular examples, and Angular can run in Content Security Policy (CSP) mode, which is required for a Chrome Packaged App. With our experience building Angular front-ends, this was a straightforward path.
Chrome Apps bring unique challenges. To run offline, every file has to be available at all times, which means bundling everything with your code: fonts, images, icons, and third-party libraries included.
A Chrome App also needs both a background and a foreground process. All API communication and sync work lives in the background so it keeps running even when the app is minimized or idle; the two halves coordinate by passing messages, since they share no memory.
Have an idea on a deadline?
We turn ambitious ideas into shipped products, and leave your team able to run them.
Start a project