Snap Together

Snap Together is an Android app I made for groups of people to be able to share photos easily. A user creates an album and join the album. Each album has a start and end time, name, and a password. Anyone who joined the album will automatically have their any photos they take during between the start and end time added to the album. Everyone who joined the album will have easy access to everyone else's photos.

This app is intended for when groups of people get together for a event, such as a wedding, party or trip. Everyone in the group can easily access everyone else's photos. No more having to ask everyone to send their photos to you or monitor their Facebook page for new photos.

This is an Android app, so it's written in Java and uses Gradle and Android Studio. It also uses Cloudinary, Retrofit, Glide and the Google login API for Anrdoid. Python, MongoDb, and Flask are used for the backend server. The backend is hosted on my Linode (Ubuntu server).

This app is not available on Google Play yet.

Snap Together Home Page Snap Together Create Album Page Snap Together Album Images Page Snap Together Upload Notification

Glowbot Commander

Glowbot Commander is a game I created. It's a retro styled top-down shooter with some real time strategy elements. You can directly control your character (which is a robot) by using the standard WSAD keys to move around and the mouse to aim and shoot. You can also release the robot from direct control, where it will then fire at enemies on its own. It will also back up from enemies on its own. In this mode you can control the robot in a similar way you would control your units in a real-time strategy game. You can click on a place for the robot go go, have it patrol, tell it to attack a specific enemy, have it guard a specific ally, or hold its position.

You can purchase additional robots to fight with you, or different guns and shields. Upgrades and robots can be sold for money, or swapped out for different upgrades. Your team of robots fights against endless waves of enemies.

This is a Java game. I used the Eclipse IDE. The game framework I used was LibGDX. I did all my drawings in Inkscape. All my animations were done using Spriter. The spriter animations are easily integrated with LibGDX via the Gdx-Spriter library. The game is hosted on I created a job in my personal Jenkins build server that uses the API to automatically package and deploy the game to whenever I run the job.

The game has over a hundered unit tests and a few integration tests, which are run on every commit on my Jenkins server. I used a modified version of the entity-component-system design pattern to easily manage the creation of the entities in the game. This design pattern allowed me to easily create entities where I could swap out different rendering, AI, and logic components to change the look and behavior of the entities without having to create separate entities for each different robot and enemy. In other words, all the entities use the same underlying logic but have different "components" that make them look different and behave differently.

The swarming and avoidance logic the game uses is based on chapter 6 in The Nature of Code.

You can download the game here.

Clash Weights

Clash Weights is a website I created to help players of the popular mobile game Clash of Clans. In this game, you join a clan, which consists of up to 50 other players. Your clan can initiate a war with another clan, where you attack the other clan's players. The way your clan is matched up against another clan is based on your war weight. All of your troops and defensive structures have a weight assigned to them. Using the Clash of Clans API and the player's player tag (a unique identifier for each player), Clash Weights calculates a player's war weight.

If you want to see what the war weights page looks like but don't play clash of clans, you can follow this link to see my accounts war weights.

The website was built using Ruby on Rails (my first time using Rails). The IDE I used was Aptana Studio 3. It's hosted on my Linode (Ubuntu server).

This Website

This website uses Ruby on Rails. The IDE I used was Aptana Studio 3. I used libraries LightBox, Remodal, and of course JQuery.

This website hosted on my Linode (Ubuntu server).

Reminder Tabs

Reminder Tabs is a Google Chrome extension. When you have a tab open you can click on the Reminder Tabs button and have that tab automatically open at a later time. You can set it to open once at a later time, or daily, weekly, or monthly.

I made it because bookmarks never worked very well for me. I would bookmark a page and then never look at my bookmarks. With Reminder Tabs, the page will automatically open up later so I won't forget about it.

This extension is just HTML, CSS, and Javascript which uses the Chrome Extensions API.


Focus is a simple Android app. It's used by someone who is mediating to stay constantly focused on meditation. During meditation, your mind will probably wonder a lot (mine does). This app will, every so often, cause the phone to vibrate or make a noise, which should prompt the user to focus again on trying to keep her mind clear.

The user should have the phone right next to them. When the phone vibrates or makes a sound, if the user was not focused (her mind wondered), then the user can tap the screen to shorten the length of time until the next vibration/sound. If the user doesn't tap the screen, then the length of time until the next vibration/sound is lengthened.

This is an Android app so it is written in Java and uses Gradle. The IDE I used was Android Studio. The app is available on the Google Play Store here.