Below is a list of personal projects along with a description of the technology behind them. Projects can also be found on the Tree Frog Labs web site.

Alexa Skills

I have published several Alexa skills in the Amazon App Store. They can all be found here.

All of these skills were built using JavaScript and Node.js with the Alexa Skills SDK for Node.js. They run as AWS Lambda functions. Some skills also use AWS DynamoDB and/or AWS S3 for data storage, while others access REST APIs to retrieve necessary data to support the skill.

Most of these projects have served as a playground to experiment with Node.js and AWS services, while also allowing me to secure some Amazon developer swag.

Pig has been the most successful of my skills, followed by Blackjack Dealer and Marvel Movie Trivia.

Play Looks Like

I have been a long-time listener of ESPN's Dan Le Batard Show podcast and built an app based on their Looks Like game. It consists of an iOS app, a web site, and an Alexa skill. I don't yet have an Android app, but it should eventually show up some time in the future.

The iOS app was written in Swift and receives tips (okay, potentially receives tips) through in-app purchases. It uses Fastlane for automated builds and deployment. Data for the application is retrieved from the web site's REST API.

The web site consists of a backend REST API running on Node.js. Data is retrieved from a MySQL database. The web site's front-end was built using React. The web server is running on Ubuntu with nginx routing traffic to the Node.js app. The site is secured using Let's Encrypt SLL certificates.

The Alexa skill runs as an AWS Lambda function, written in JavaScript and running on Node.js. It uses the same REST API that is used by the iOS app and web front-end.

Castalong (In progress)

As a long-time hobby project, I have built by own podcast aggregator at The web server consists of a back-end written in Python with the Pyramid framework. It supports a REST API that is used by the web front-end and an iOS mobile app (unpublished).

Podcast data is stored in a MySQL database, and several Python-based processes run on the back-end to crawl podcast RSS feeds and update the database. These processes communicate through a Rabbit MQ server to schedule feed updates, playlist updates, sending email, etc. Web and database servers run on Ubuntu with nginx routing traffic to the Pyramid-based server application. The site is secured using Let's Encrypt SLL certificates.

The front-end is written using React and uses REST APIs to manage user playlists.

The iOS app (unpublished) is written in Swift and uses a Realm database for local storage. Playlist updates are communicated through a REST API and synced to the local database. Internally, the app follows a Redux-inspired architecture using the ReSwift library. It uses Fastlane for automated builds and deployment.

This web site is built using Jekyll. It formerly existed as a WordPress site, but I prefer the simplified approach of generating a static site that doesn't require me to think about backups and security updates.

It's hosted on a Linode server instance and uses a Let's Encrypt SSL certificate. It runs on the same server as the Play Looks Like web site, using nginx to route traffic to the correct site.