Category Archives: Demo

SleepScore Labs Data Dashboard in Angular 2

In April of 2017, I was tasked with design and development of a data visualization dashboard for new customers of SleepScore Max, a non-contact sleep improvement system. Designed for both iOS and Android users, my role was to build a web application which would compliment this sleep solution experience by connecting the dots between sleep data and pragmatic advice in a more robust fashion.

I took it upon myself to go head first into Angular (granted my previous experience with AngularJS) but I got a first-hand view of how different both JavaScript frameworks were.

SleepScore Max login page written in Angular.

SleepScore Max login page written in Angular.

I kickstarted this project prior to the full standardization of Angular CLI so I was pretty much left to my own devices on how to properly build and deploy this application into a cloud instance.

I credit PluralSight author Deborah Kurata as the initial key to making this project work. Specifically, her course in Angular: Getting Started was a jaw-dropping course on Angular’s moving parts. Needless to say, now that I have both AngularJS and Angular perspectives, my best assessment on distinguishing between AngularJS and Angular is that while AngularJS thinks of drafting features from controllers and scope, with Angular you need to abstract those things via components.

To dumb it down for me, I’ve come to think of a component as simply a web page (the overall object), while the super powers you write inside of that web page act as the methods and properties of that web page. Coming to that conclusion wasn’t linear. I needed to dive into TypeScript since it is the driving force in authoring modern Angular apps.

I’m still tinkering with TypeScript and have a long way to go to understand its full value but I definitely became a fan simply because it makes a JavaScript author a bit less error prone. Let’s face it, web browsers are still running JavaScript in ES5 and not ES6. Having that superset above JavaScript to reinforce little things like the data-type of an object is awesome and learning how to write a component in TypeScript helped reinforce how I’ve dumbed down the difference between AngularJS and Angular.

A splash of jQuery animation for the sleep score petals, CSS styling to chart out the breakdown all inside of an Angular dashboard.

A splash of jQuery animation for the sleep score petals, CSS styling to chart out the breakdown all inside of an Angular dashboard.

Yes, this dashboard is also responsive.

Yes, this dashboard is also responsive.

What’s next? I’m already thinking about the upgrade path into Angular version 5, smoothening out continuous integration and making Angular CLI the gold standard for facilitating all portions of this project.


Responsive Web Design for

3 years ago, Thermo Fisher Scientific (previously Life Technologies) was tasked with enhancing its original mobile experience integration which leveraged Moovweb’s cloud platform. It was a good solution in getting the domain introduced into browsers outside of desktop, specifically mobile and tablet devices but it certainly came with its own set of constraints.

While Moovweb was an excellent platform for enhancing on mobile conversion rates it came at the cost of scalability and ease of maintenance. The overall platform required you to maintain two separate codebases—your desktop HTML and Moovweb’s SDK, which effectively transformed your HTML into mobile-friendly elements. It was also a page-by-page type deal. Every page would require its own transformation. Every transformation was its own subset of code. The first two waves for those previous projects had the strictest of intentions on mobile-optimizing eCommerce related workflows for all regions but in English only (e.g. checkout flows). It was not enough. The domain needed more flexibility in a web property that could display well to a majority of legacy and evergreen browsers as well being agnostic of device type.

Because of these limitations the Responsive Project for was designed to effectively address the following constraints:

  • Reduce dependency on additional vendor code.
  • Generate mobile, tablet and desktop experiences from one codebase.
  • Scale solutions which would be available globally and not just page-by-page.
  • Responsive interfaces for all regions, all languages.
  • Extend the experience beyond eCommerce: content authored areas and channels outside of B2C.

The domain is huge and its attached ecosystem is a collection of multiple applications owned by multiple teams with their own standard of implementation. Adding to that loophole, not every application in the domain was a candidate for this new responsive experience. From June 2016 and forward, our team had to break features down into chunks.

It was agreed that the header, navigation and footer would be the first to address as this was considered the foundation for everything else to work. Each app would rope this subset of components based under their back-end constructs (e.g. Java, ColdFusion, etc.). This took 3+ months. Not an easy feat if you consider the amount of tooling currently being offered from these areas. You have a series of controls for search tools, commerce and deep links into areas such as login and Order Support.

Real estate doesn’t come cheap with smaller screen sizes. The basics needed to be in order first. In essence, an organized CSS media query strategy for an agreed set of breakpoints and a baseline approach for DOM manipulation in the event this choice ever needed to be made.

Listed below were some saving grace plugins, libraries and frameworks from the open source world which allowed us to get our job done:

  • Bootstrap 2.3.2 – the overall HTML, CSS and JS framework for delivering responsive enabled user interfaces. Keep in mind that support for legacy browsers in IE8+ was priority. Also, since the domain is driven from a desktop-first approach this framework was still considered standard.
  • jQuery 1.8.1 – a minor upgrade path for better DOM selector performance. Originally, 1.8.0 was elected to be the global jQuery library available but that caused problems for older Internet Explorer browsers with .ready() firing prematurely. See jQuery defect 12282.
  • Responsive HTML Tables – a CSS technique which turns table elements into div blocks with labels being controlled through data attributes.
  • TableHeadFixer – a jQuery plugin which was modified in-house to give content authors more flexibility in drafting HTML tables with features such as locked table headers or columns.


Mobile Optimization Project:

In the summer of 2014, I was contracted and assigned to develop the mobile experience for Life Technologies.

Life Technologies Homepage in Mobile

Life Technologies Homepage in Mobile

Partnered with Moovweb, we were able to generate mobile optimized workflows from high-traffic areas like Homepage, Cart/Checkout and PDP. Several mobile optimized workflows were developed fairly quickly and we successfully launched in all regions (English only) in January of this year.

Client and vendor teams were geographically split, yet worked in unison to accomplish this project at the expected go-live date. The desktop experience is transformed with Moovweb’s SDK and deployed to their cloud infrastructure. This allowed front-end development teams to start the project fairly quickly without too much reliance on back-end development support.

The next challenge relies heavily on building and maintaining the experience while integrating their tech stack w/in Thermo Fisher Scientific standards.

Visit on iOS or Android mobile browser.

The Friendship Algorithm in JavaScript

I’m a big fan of The Big Bang Theory and I couldn’t resist playing around with Sheldon’s friendship algorithm. It’s pretty much one object represented as Sheldon guided by the module pattern (thanks to Addy Osmani).

I encourage you to fork this code and get some zen coding in. Since the logic is “safely” protected by Sheldon, you should be able to integrate any boilerplate of your choice for some fun interfaces. Also, feel free to refactor the logic when needed. It could always be better. That said, kudos to Wolowitz for plotting out the loop counter and escape.

The Friendship Algorithm

You can also view the demo here, here.

Apache Solr + University of Rockies

Search Engine Apache Solr added to

Search Engine Apache Solr added to

In the Fall of 2013, my team was tasked with R&D on integrating a search solution within the University of Rockies. Starting from the ground up, we pursued the idea of open-source search server, Apache Solr. After hours vetting out a workflow and experimenting, we were able to create a search product that not only touches base with Rockies, but can be extended to other web properties owned by the Marketing Group.

Some keypoints we put into consideration were the following:

  1. Search results….what type of results should we expose?
  2. Crawling and indexing…how do we crawl our domain and index our results?
  3. Web security…what standards do we need to put in place granted our search server is open-source?
  4. Third party dependencies…can we bring application ownership in-house?
  5. Future maintenance…what is our SOP and response time as the domain’s content changes?
  6. Technology Services protocols…what moving pieces are pertinent to change management guidelines, etc.?

The official release of UoR search went live in December 2013 and continuous improvements are slated throughout the year, so stay tuned. For now, feel free to explore this feature at,