Ulta Smart Mirror

Some renderings of the mirror’s features, more info coming soon…

Video to attract guest’s attention. Tap for larger view.
Scroll through product listing pages. Tap for larger view.
View product details and get reviews. Tap for larger view.
Browse subcategories. Tap for larger view.
Learn about Ulta’s amazing loyalty program. Tap for larger view.
Turn on lights / change color. Tap for larger view.
Play short videos. Tap for larger view.
Tap for larger view.
Full view. Tap for larger view.

PTS Explorer

Key Technologies: Bootstrap (HTML/CSS), JavaScript, JSON, and AR QuickLook

PTS Explorer is a quick way to find instagram photos of a given PTS (paint to sample) color. A few months ago I noticed there were many Instagram accounts centered around PTS colors – this worked well to see many examples of different colors, but what if you didn’t know all the colors, or wanted to see many examples of a certain color?

These questions prompted me to create PTS Explorer.

Responsive layout using Bootstrap. Tap image for larger view.
Filter colors by name. Tap image for larger view.
Filter colors by hue. Tap image for larger view.
View instagram photos tagged with color. Tap image for larger view.
Example 2. Tap image for larger view.
On iOS12 via Mobile Safari preview colors in AR QuickLook.
Use photoshop scripting to quickly generate swatches from JSON data file.

https://www.ptsexplorer.com

Command for Mac

Key Technologies: RS-232, Hex, and Cocoa (Mac)

Command for Mac is a [native] application I built to run DCC trains on my office layout. It works by using the USB Interface for Power Cab to bridge the gap from the computer to the NCE cab bus. The application uses the RS-232 serial interface to send hex commands to control the locomotives.

The application’s main interface can be accessed from the OS menu bar, this interface allows you to open the manage the connection, add/remove trains, and create new throttles.

Want to develop your own application? Hex command documentation can be found here.

Menu Bar Application. Tap image for larger view.
Manage Trains Window. Tap image for larger view.
Single Throttle. Tap image for larger view.
Multiple Throttles. Tap image for larger view.

Intern Project – ARKit!

Key Technologies: Swift, ARKit 2, Cinema 4D

I had the distinct pleasure to help with this year’s intern project – a proof of concept app to test out viewing virtual makeup with augmented reality.

We chose to model a popular Nar’s lipstick that was visually interesting, and had some great colors.

  • Created the mesh and animation sequence in Cinema4D / took accurate measurements to endure model closely matched its real-world counterpart
  • Exported as Collada file
  • Imported into Xcode and converted to SceneKit file
  • Textured in SceneKit
  • Changing the mesh material at runtime to show off different lipstick shades
  • Added scene lights for realistic plane shadows

Day of Code

Hello World.

In partnership with Apple and CPS, Ulta hosted a Day of Code at our downtown Chicago office. Students from LakeView High School and Michele Clark were walked through the development lifecycle of a feature, from requirements to development, to getting the app on the app store. We also spent some time introducing the students to the Ulta Beauty brand and high level stats about our company.

Joe Rago, Director of Digital Innovation starts the day off.

We also built an app just for this day so the students could have something tangible to correlate some of our coding topics as we provide the students with the GitHub repo for the app. We did our best to represent all common iOS app view patterns, as well as latest Swift syntax.

Another cool feature in the app is we did a little of  the school branding and let students choose their school – doing so updates the app icon and provides with school specific details.

Sasha Smith and Jenni Urban talk about CX while having the students work together on prototypes.

Patents (Current)


Nov. 21, 2017
Gathering in-store employee ratings using triggered feedback solicitations
US9824323B1


Feb. 27, 2018
Drive-thru system implementing location tracking
US9904903B1


Sep. 4, 2018
Using a mobile computing device camera to trigger state-based actions
US10068221


Dec. 25, 2018
Seamless user retail experience based on location
US10163150B1


Feb. 12, 2019
Systems and methods for facilitating enhanced device functionalities within a retail store
US10204372B1

4.0.1 to 5.2: Reflecting on my first 2 years with Ulta Beauty

In our latest release we added support for iOS11 and the iPhone X, a major milestone for our development team. With that release I thought it was important to take a look back and see just how much the app [and team] has changed in my time at Ulta.

Key Initiatives:

  • Cleaned up, simplified, and modernized the codebase. Established a cadence for structuring code aimed for readability and understanding with emphasis on in-line comments explaining business logic. In most cases I tell my developers to structure their code linearly so that it mirrors what’s being displayed.
  • Identified redundancy in models/views and consolidated
  • Removed all non-essential third party code (that isn’t mandated by business partners)
  • Banned the use of cocoa pods and dependency managers.
  • Removed all unused and old assets / converted new assets to PDF (vector)
  • Created a “Core” which handles all our application/session/configuration management, as well as contains our own web services client
  • Established rules on native first UI/UX patterns with creative partners and an understanding of maintaining code over time e.g. I don’t want to be fixing custom controls with each OS release.
  • Compartmentalized storyboards based on features [performance/readability]

*It’s important to note that the above initiatives reflect my viewpoint on how a large enterprise project with multiple [sometimes fluid] team members should be treated. When creating my own apps I have similar from different goals and I can take certain liberties knowing only I will be maintaining the code.

The screenshots below are a few examples of said changes. On the left is version 4.0.1, the app I inherited when I started, and on the right, 5.2, our latest release.