Projects

The following are the most interesting projects that I have worked on over the 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.


PayNoWay

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. The app communicates directly with the peer-to-peer network of ElectrumX servers via TCP sockets. This allows the app to interact with the Bitcoin and Litecoin blockchains in the following ways:

  • Fetch unspent transaction outputs (UTXO)
  • Fetch network fee estimates
  • Broadcast raw transactions

The app connects with and manages multiple ElectrumX peers. This greatly improves the overall performance and stability of the end-user experience.

The app is available on the PlayStore and F-Droid. The project's source is available on GitHub

Notable Features

  • Cryptocurrencies supported: Bitcoin, Litecoin (including mainnet and testnet)
  • Supports legacy and segwit addresses (backwards compatible and bech32)
  • Mirrors the UX flow of other mobile wallet applications
  • Dashboard to easily track double-spend success rates and totals
  • Single-touch double-spend after initial payment success
  • Optional auto-broadcast double-spend transaction (with configurable delay)
  • Advanced double-spend configuration including: Payment output replacement style (drop vs. replace-with-dust)
  • History of payments and double-spend transactions
  • Support for multiple exchange rates providers

All screenshots from PayNoWay


CryptoTerminal

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 communicates directly with the peer-to-peer network of ElectrumX servers via TCP sockets. This allows the app to interact with the Bitcoin and Litecoin blockchains in the following ways:

  • Watch addresses for payments
  • Fetch unspent transaction outputs (UTXO)
  • Fetch network fee estimates
  • Broadcast raw transactions

The app is listed on the PlayStore as CryptoTerminal and the project's source is available on GitHub: github.com/samotari/crypto-terminal

Notable Features

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

All screenshots from CryptoTerminal


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.

Box.com 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.


ASUG

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.


PokerWithCoins

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