Chess engine API and game client

Legal moves are accepted by the game client, which requests the next position from the chess engine through a JSON API.

Engine logs are displayed through a console that can be toggled into view, and game winning positions are saved to Redis along with the engine's resulting win-loss record.

Written in Ruby and JavaScript, using Sinatra, Redis, and Sass.


Bouncing ball simulator

The objective of the game is to get to the top. As the ball goes up, gravity decreases, platforms get smaller and more spread out, and jumps replenish slower. As time passes, the world moves faster, and reaching the top gets more difficult.

The momentum, inertia, and gravity of game objects are simulated by functions derived from real-world physics.

Written in JavaScript.


Minimal chess AI

Ruby chess engine powered by a minimax algorithm, optimized through alpha-beta pruning and move-history based heuristics.

Creates a new game session from any FEN position string, evaluates ~30,000 positions/second, and is written in less than 150 lines of code.

Written in Ruby.


Live polling app

Allows users to create, view, and participate in live polled events, displaying results with charts and word clouds using HTML5 Canvas.

Features include a RESTful JSON API, a Backbone.js frontend, and OAuth user authentication.

Written in Ruby and JavaScript, using Rails, Backbone.js, Sass, and SQL.


Search visualization experiment

Renders visualizations of data collected by its chess engine while a user plays against it. Gathers data from each node of the search tree reflecting position evaluation and search performance.

Iceland didn't have a word for computer so they mashed up the phrase "prophetess(völva) of numbers(tala)" into tölva (computer).

Written in Ruby and JavaScript, using Sinatra, Sass, Backbone.js, and D3.js.