Frameworks and tools

We build this software on the shoulders of giants - amazing open source projects that provide us with the technologies to create an amazing tool to make the job of timekeeping easier and more enjoyable.

electron


electron is an application framework built by github and based on node.js and chromium powered by the V8 Javascript engine.

With that we are able to create a platform independent application in technologies that are well known to every web developer.

aurelia


Aurelia is a JavaScript client framework for mobile, desktop and web leveraging simple conventions and empowering creativity.

Rather than taking the monolithic framework approach, Aurelia is composed of smaller, focused modules.

pouchdb


PouchDB is an open-source JavaScript database inspired by Apache CouchDB that is designed to run well within the browser.

It enables applications to store data locally while offline, then synchronize it with CouchDB and compatible servers when the application is back online, keeping the user's data in sync no matter where they next login.

These are just the biggest building blocks, but we use many other great open source tools and frameworks that we will give credit here soon.

Concepts and patterns

We use modern concepts and patterns of software design to create a solid and maintainable base for the functional components required. The choices we made were based upon years of experience and research.

Domain Driven Design

Domain Driven Design (DDD) is a methodology to put the knowledge domain at the core of the software design.

An ubiquitous language that is based on the language of the domain experts helps to communicate between business and developers.

Event Sourcing

With Event Sourcing the application stores data changes rather than overwriting a latest snapshot.

It therefore prevents losing valuable information of change history. Also, it allows for very efficient and precise conflict resolution when working colaboratively on data.

CQRS

Command Query Responsibility Segregation is a natural consequence of using EventSourcing and a pattern that clearly separates write and read concerns on an architectural level.

It thereby allows for specifically optimized write and read storages (databases) and in combination with EventSourcing enables to produce multiple optimized representations of the same application changes.

MVVM

Model-View-ViewModel is one of the various MV* patterns and widely used in web frontend frameworks.

It has a clear separation of the UI (View) and the data model (ViewModel) that is displayed within the View. That way it is much easier to test user interfaces automatically and optimize the user experience independently of the representation logic.