Technical Portfolio

The following are some of the larger projects that I have worked on in recent years. I haven't included the dozens of other smaller projects I've completed, or miscellaneous work such as maintenance on legacy systems and so on.


An open-source cryptocurrency payment terminal application designed for cafes, restaurants, and other in-person businesses.

Technology Stack

The app is built using standard web technologies including Backbone.js, a light-weight JavaScript framework. The Android build is created using Cordova. The app is listed on the PlayStore as CryptoTerminal and the project's source is available on GitHub:

An open-source server component was created to act as an API server to the mobile app. The server is a Node.js application that serves REST and websockets APIs. The server streams bitcoin and litecoin transactions in real-time as well as provides exchange rate data, network fee estimates, and Monero mempool transactions.

Notable Features

  • Payment methods supported: Bitcoin, Litecoin, Monero, and Lightning Network.
  • Localized into several languages: Czech, English, French, German, Spanish.
  • Supports payment via private key scans by camera and NFC


A mobile app for testing payment systems against double-spend attacks.

Technology Stack

The app is built using standard web technologies including Backbone.js, a light-weight JavaScript framework. The Android build is created using Cordova and the project's source is available on GitHub:

The app is not listed on the PlayStore to discourage non-technical users from using the app to defraud real merchants.

Notable Features

  • Cryptocurrencies supported: Bitcoin, Litecoin.
  • Supports legacy and segwit (backwards compatible and bech32) addresses.
  • Mirrors the UX flow of other mobile wallet applications
  • Single-touch double-spend after initial payment success

Mindjet Cloud

Single sign-on, third-party service integrations, and support for multiple client applications.

Web Interface for Single Sign-on

The web interface faciliates single sign-on for all Mindjet Cloud users, whether they use the MindManager desktop application (Windows and MacOSx), the browser-based web application, or the offline reader app.

User management is handled via Auth0, a third-party authentication provider. A Node.js application server was created to provide an API around custom logic for authentication and file sharing.

Cloud-based File Storage and Sharing

Users of Mindjet Cloud are able to save their mind map files to the cloud and share their files. They can decide to share a file with other users in their group or with anyone by sharing a link to the file. is used as the cloud-based file storage. The logic for file sharing is handled by the Node.js application server.

Mind Map Viewer for the Web

The web-based viewer uses the Rappid diagramming UI toolkit to render complex mind maps in the browser. The viewer supports many features including search, sharing, uploading of mind map files, downloading for offline viewing, and multiple view modes.

An offline version of the viewer application was created using Electron and is available for Windows and Mac OSx.

eReader Web Application

Web-based eReader application for university-level text books.

Automated Conversion of PDF to HTML

The e-books were provided as PDF files, which needed to be converted to HTML and CSS so that they could be displayed in a web browser. Meta data and content were automatically indexed in Apache Solr, allowing for full-text search of the e-books.

Fully-featured eReader in the Browser

All the e-books include full-text search, bookmarking, and a table of contents. Numerous performance optimizations were required to achieve a smooth reading experience on low-powered mobile devices. The client-side app was created with Backbone.js, a light-weight JavaScript framework.

Subscription-based Paywall

The e-books are protected by a subscription-based paywall. Most of the e-books included a preview available for free. The server-side portion of the system was developed using CodeIgniter.


Migration of existing content, full-text search solution, third-party service integrations.

Content Migration

Existing content from multiple different sources had to be consolidated in the new system. This required a mix of database migrations, API consumption, and web scraping. The content had to be simultaneously stored in a new relational database and added to multiple search indexes.

User-based Permissions System

The new content system included a permission system with varying levels of access rights. The server-side component of the system was built using CodeIgniter.

Full-text Search

All the content was fully searchable and integrated seamlessly with the permission system. The full-text search was powered by Apache Solr.


A web-based poker game with cryptocurrencies, like bitcoin.

Everything in Real-time

The interface updated in real-time; including the game state, chat, and statistics. This was done using WebSockets. The client-side web application was created using Backbone.js, which communicated with a Node.js application server.

Multiple Cryptocurrency Accounting System

The system was setup to support multiple cryptocurrencies, the first being bitcoin. Automated deposits and withdrawals were handled via the RPC API of a full bitcoin node.

User Account Security

Multi-factor authentication was used to secure user accounts from fraudulent withdrawals and account takeover.

Last updated on