Raivo Laanemets. Full-stack freelancer.

Projects

This page contains list of the projects I have been involved with.

You might be interested only in:

See also my CV and how to hire me as a freelancer.

2016

Koormaplaanid: truck load planner

A web app to optimize 2D package layout for trucks. It provides a simple UI to enter package details and then construct the load by drag-and-drop. Load construction is made easier by using colorful labels and backgrounds. The application is used by Lasita Maja AS.

Technology
  • KnockoutJS
  • Bootstrap
Screenshots

The package data input area and the work area:

Koormaplaanid truck loading screenshot Koormaplaanid truck loading screenshot

Desktop automation with Raspberry Pi

A set of proprietary tools for controlling specific desktop apps with hardware connected through Raspberry Pi. The project contains:

  • A software component for Raspberry Pi written in Python. The software receives events from various sources, including Flic.io buttons and the GPIO header pins and sends TCP packets corresponding to the events.
  • A web application to configure Pi's remotely. Built as a ExpressJS web application with MySQL as the data storage.
  • A desktop application to run certain actions based on TCP packets received from Pi's. The application was built onto the Electron platform using the Vue.js framework.
  • A set of small network applications acting as a hub for distributing events between the desktop machines. Written in Node.js.
Technology
  • Raspberry Pi
  • Python
  • Flic.io
  • JavaScript
  • Electron
  • Vue.js
  • ExpressJS
  • MySQL

Web analytics for browsing sessions

This application started from a weekend project to automatically detect bot visitors and create corresponding filters for Google Analytics (GA). However, at some point of time I started to use it as the main visitor tracker on this blog and some other sites. It allows to browse individual visitor sessions, something that is not possible on GA. Due to not being a widespread solution, it also attracts a lot less referral spam. The code is Open Source and available on GitHub.

Technology
  • Node.js
  • ExpressJS
  • Bootstrap
  • MySQL
Screenshots

List of session and a single session view:

Session Viewer screenshot Session Viewer screenshot

Log stream viewer and alert management

A frontend web application to browse and monitor logs stored inside a MySQL database. The application started as a proprietary solution to monitor various projects but later I released it as Open Source. The application replaced my previous solution using a SaaS service that became a bit too pricey for my logging volume. The system also monitors log events from uptime, domain expiration, and SSL certificate expiration check scripts.

Technology
  • Node.js
  • ExpressJS
  • Bootstrap
  • MySQL
  • Rsyslog
Screenshots
MySQL syslog viewer screenshot

Automated sports betting system

An automated system to place sports bets using data gathered from specific sites. The system scraps data from sites and places bets using the API provided by Pinnacle, an online bookmarker. The data on the system is stored in an optimized MySQL instance, running queries on 100k+ of rows in 1-2ms. Part of the system was implemented in SWI-Prolog.

Technology
  • Node.js
  • ExpressJS
  • MySQL
  • SWI-Prolog
  • Pinnacle API

Internal electronic voting system for the Estonian Free Party

Internal electronic voting system for the Estonian Free Party (Vabaerakond). Includes a voting interface with various types of questions for voters and an administration section to manage question, to manage party members, and to see report of votes on the current questions. The system is intergrated with the cryptographic Estonian ID-card and Mobile-ID APIs to support secure voting.

Technology
  • Node.js
  • ExpressJS
  • MySQL
  • Bootstrap
  • KnockoutJS
  • Estonian ID-card APIs
  • Mobile-ID APIs
Screenshots
Estonian Free Party e-voting screenshot

2015

Scale Laser online CAD and store

Scale Laser is an online CAD application and e-commerce site for model railroad builders. My role in the project was to build the overal frontend part of the site, the e-commerce system including the cart and payment integration with Stripe and the backend manager/scheduler for production. The first release is still in development.

Technology
  • Prolog
  • RDF
  • Bootstrap
  • Stripe
Screenshots
Scale Laser screenshot Scale Laser screenshot

Photo gallery generator. I did not find gallery generator that satisfied all my needs and I had to build my own. This one supports nested albums, incremental building, metadata in JSON, custom templates (EJS) and generates gallery output into a separate directory tree from the source directories. It is built as a Node.js command-line application and uses ImageMagick to generate thumbnails.

Technology
  • Node.js
  • ImageMagick

PhantomJS-based traffic bot

A traffic bot to generate real-looking traffic for a specific site using the headless scriptable browser PhantomJS. The bot starts from a random referral page and visits random links on the site. The amount of generated traffic depends on the number of the launched parallel processes of the bot and the configured delay between selecting the next navigation link.

Technology
  • PhantomJS

2014

infdot.com

Company homepage for Infdot OÜ. The site has been a test ground for various web technologies and has been rewritten many times.

Technology
Screenshots
infdot.com site screenshot

Timetable scrapper for UK cinemas

A web scrapper for extracting timetables from homepages of UK cinemas. The project included custom web scrappers for about 20 different sites using the scripted headless browser PhantomJS. It also included a Node.js-based web app to store the extracted data in a MySQL database.

Technology
  • PhantomJS
  • Node.js
  • ExpressJS

Stats scrapper for BetExplorer

A web scrapper to extract sports betting data from the BetExplorer site. The project included a PhantomJS-based scrapper to extract the data and scripts to calculate the required statistics from the extracted data.

Technology
  • PhantomJS

2013

Poker.ee

An online poker news and affiliate site.

Technology
  • WordPress
Screenshots
Screenshot of poker.ee site

Network of affiliate sites

A network of online gambling affiliate sites to serve as landing pages from other marketing channels. Built onto WordPress with custom design and theme.

Technology
  • WordPress
Screenshots
Screenshot of bet-china.com site

Ledlamp.ee

Ledlamp.ee is an online web store for LED lamps. I inherited the project and did not build the initial version. I helped to relocate the project to the new hosting provider and fixed issues with frontend HTML and PDF invoices.

Technology
  • Magento
Screenshots
Screenshot of ledlamp.ee site

Logi.ee

Logi.ee is a web-based diary for physical activity. My role in the project was to be a technical mentor. I contributed the backend code for integration with the Fortumo and Sendsmaily services.

Technology
  • Node.js
  • ExpressJS
  • MongoDB
  • Mongoose
  • Fortumo
  • Sendsmaily
Screenshots
Screenshot of logi.ee site

Log-CI

Continuous Integration script to run project build/test and write result into a log. Supports Git only. Works in cases when Jenkins is overkill. The build log output is supposed to be monitored by a realtime logging service.

hash-regex-router

Client-side hashchange regex router for singe-page applications. Works on Chrome 5, Firefox 3.6 and IE 10+. Initial codebase was extracted from one of my frontend projects. Since then it has been improved with methods required for other projects. The library includes support for asking confirmation to leave the current route. This feature was not supported by other front-end router libraries.

Keha Arengu Monitooring/FitSmarty

Keha Arengu Monitooring (KAM) is a computer software to track person's health and fitness. It was initially based on the popular Excel worksheet distributed at tervislik.net. The objective of the project was to implement the application which would be more usable, more maintainable, and with more features than the Excel worksheet. FitSmarty was the English localization of the application.

Technology
  • C++
  • Qt
  • SQLite
  • NSIS

The application supports all 3 desktop platforms: Windows, Mac OS X and Linux.

Screenshots
Screenshot of Keha Arengu Monitooring/FitSmarty Screenshot of Keha Arengu Monitooring/FitSmarty Screenshot of Keha Arengu Monitooring/FitSmarty Screenshot of Keha Arengu Monitooring/FitSmarty Screenshot of Keha Arengu Monitooring/FitSmarty Screenshot of Keha Arengu Monitooring/FitSmarty

Custom CRM for kehakool.ee

Custom CRM to handle sales of the KAM software. It includes the frontend store view and the backend with user management, sales, license key management and invoicing.

Technology
  • Yii Framework
  • MySQL
  • wkhtmltopdf (for PDF invoices)

Includes integration with Estonian banks to handle payments.

KAM-Track

Helper application to track users of KAM/FitSmarty software. It includes both the web application for collecting statistics and displaying reports and the client code to send application usage events from the desktop software. The application took 3 days to put together.

Technology
  • Node.js
  • MongoDB
  • KnockoutJS
  • Bootstrap
  • ExpressJS
  • MongoLab
  • AppFog cloud

2012

The Estimator

The Estimator is an application for estimating the time that a project takes. It divides the project into components and components into tasks. The tasks are estimated to take min to max hours. The app then calculates total min to max hours for the whole project.

The application was built to evaluate the KnockoutJS and Bootstrap frameworks.

Technology
  • KnockoutJS
  • Bootstrap

Uses the localStorage API to store data.

Contractor's Work Log API design

A RESTful API for entering time logs remotely. The API uses HTTP GET/POST with JSON-based messages and error handling. My scope of the work was writing the initial API specification.

2011

Thread analysis for Goblint

Specification and code for the thread analysis (main only, unique, many) of the C language for the Goblint static analyzer. The thread analysis was supposed to reduce the number of false positives from the thread locking/synchronization analyzer.

2010

LLJ - Logic Language for JVM

LLJ is a Prolog-like logic language for running on JVM. It allows close integration with Java libraries. The source code is extensively commented and covered with a high number of test cases. At the time of release it was faster and more memory efficient than many other Prolog implementations on JVM.

Technology
  • Java
  • Prolog
  • Maven
  • JUnit

PreciseInfo

A project to provide fast and accurate search results from a collection of existing documents. The project also included PHP scripts to dump documents into the search database. The search application was tuned to retrieve the search results from over 100000 documents in less than 0.1 seconds.

Technology
  • Solr
  • WordNet

The WordNet database was used for implementing synonyms support.

Custom ignition starter

Ignition starter for vehicles with internal combustion engines. The project included custom circuit design and firmware.

Technology
  • PIC MCU
  • HiTech C compiler
Photos
Circuit board of custom ignition starter

2009

The Seals Database

The Seals Database for the National History Archive. My responsibility was to gather requirements from the archive specialists, document them, produce the application specification, and later test the actual application against the specification. The set of acceptance tests was implemented using the Selenium test utility.

2008

Wicket-based mplayer frontend

A web-based front-end for mplayer. It extracts metainfo (title, artist and album) from music files (mp3 and flac) and makes it easy to create playlists based on this info. The metainfo is extracted using the entagged library.

Technology
  • Java
  • Wicket
  • Prevayler
  • Maven

Elion e-teenindus

Self-service portal for Elion customers. Elion is the largest telecom company in Estonia. I worked in a team of 6 people as a Java programmer. My responsibility was to implement features based on the HTML prototype and specification documents. Large part of the work involved writing PL/SQL unit tests for the legacy Oracle database.

Technology
  • Java
  • Oracle
  • Spring Web Flow

2007