portfolio /

Gulf Directory



A business-directory company wanted to transition from physical books to computers. As a first step, they required a standalone desktop application with the following requirements,

  • Portable - Writeable into a CD/DVD for bundling with their physical books.
  • Offline - Does not connect to the internet to fetch results.
  • Secure -¬†Stores all data locally in an encrypted format.
  • Fast - Can search more than a hundred thousand records by company name or company category within 3 seconds.
  • Platform - Will work flawlessly in Windows XP and Mac OS operating systems.

Our solution

We built a cross-platform desktop application using Node-Webkit with an SQLite database. We chose Node-Webkit for two reasons,

  1. We could implement the solution using HTML, CSS and JavaScript (NodeJS) - a stack we use daily.
  2. We could use the same codebase for both windows and mac versions. Speed up development and reduce testing time.

The Process

We started with simple hand-drawn wireframes of the user interface. After finalising the user-interface, we grouped ourselves into two teams - front-end and back-end.


The front-end team's responsibility was,

  • App skeleton - create the look & feel of the app page-by-page based on wireframes and high-fidelity mockups.
  • Interaction - React to user actions, use the back-end service functions to fetch data and render results.


The back-end team's responsibility was,

  • Data preparation - extract, transform, encrypt and load data from CSV files into the SQLite database.
  • Business logic - implement the actual business logic (search, retrieve and decrypt) and provide service functions to the front-end.
  • Performance - Run load tests and make necessary tweaks for the application to be performant.


We developed the application using two thousand test records provided by the client. We had to do load testing with less than ten thousand test records which were far less in comparison with the production data - close to a hundred and fifty thousand records.

Besides, the production data had many inconsistencies compared to the test data. Implementing a robust ETL script to handle such cases without breaking/corrupting the database was a challenge.

The major challenge came when we ran the application directly from CD/DVD instead of installing it on the hard disk. During tests, we found drives with slower throughput caused performance issues. App loading times and search results took longer than expected.

To tackle this, we cached the application on the user's hard disk. The application generated the cache on startup and cleared it upon exit. This tweak, however, caused the application loading time to increase (when run from CD/DVD) but decreased the search times to be well within limits.


We delivered the project on-time, on-budget fulfilling all the business objectives. The client was so happy that they hired us again to build the subsequent year's version.