Blog of Raivo Laanemets

Stories about web development, consulting and personal computers.


I'm working as a freelancer consultant and provide the following services:

  • Programming in TypeScript and Prolog
  • Web scraping and data extraction
  • Technical SEO analysis
  • Workshops and training (TypeScript, React)

Recent projects

Ambright GmbH Printed Light

Ambright produces custom light fixtures using Printed Light technology. Customers can design their own luminaires using a visual design editor. The design tool provides options to create the luminaire shape using geometric primitives such as polygons and place individual light sources onto the surface. A special CNC machine then cuts out the surface shape, places the light sources (LEDs), and routes power to them.

My role in the project was to help refactor the visual design editor codebase, discuss various ideas for new features and implement them.

Technology: React, TypeScript, SVG, makerjs, Tailwind CSS

CareerFolder for Tammiste Personalibüroo OÜ

Tammiste Personalibüroo OÜ is a talent search company in Estonia. They help businesses across Estonia recruit the right people, evaluate staff and candidates, and develop teams through engaging training, coaching and supervisory sessions. CareerFolder is a confidential database of executives and skilled specialists that they have been building since 2001.

My part in the project is to modernize the CareerFolder codebase and add various technical and non-technical improvements. The ancient PHP codebase is iteratively updated to newer development practices and cleaned up. The platform is moved to Microsoft Azure (search, file storage, etc.). All new features are developed using HTTP APIs and TypeScript+React.

Technology: PHP (old and new), PostgreSQL, React, TypeScript, Azure platform. contract automation is a solution to automate contract negotiation. It is used by procurement departments, commercial teams and alternative legal service providers to execute high-volumes of recurring contracts with minimal effort.

I joined the project as a full-time frontend developer on-site in Berlin. I focused on building the user interface components. The most complex part of the system was the document editor supporting import and export of Microsoft Word documents.

Technology: React, Redux, TypeScript, Swagger

Shipping management system for Lasita Maja AS

This is an information system to manage shipping. The system helps to plan, price and track shipments. The application is used by Lasita Maja AS. Lasita produces log cabins and ships them to retail partners all around Europe. Shipping is done through 3rd party service providers. The application includes a small Android phone app to take photos of loaded trucks before they are sent out and to automatically upload and associate the photos with shipment orders.

  • Longer blog post about the project.
  • The system as used by Lasita.

Technology: Node.js, ExpressJS, React, Bootstrap, DroidScript, MySQL.


Technical SEO for Elisa AS - overview of technical requirements, best practices, and tools for creating web sites accessible for search robots and engines. Illustration of common mistakes and solutions for problems that prevent sites from being indexed or displayed properly in search results.

React workshop for TurnIt OÜ - 2 day introduction to React, Redux and TypeScript. I presented various concepts, for example, what is JSX, and then we built various small applications to see how to apply these concepts. During the following weeks after the course I helped to review the code on the actual application that they started to build with React.

Previous projects

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.

Technology: Node.js, ExpressJS, MySQL, SWI-Prolog, Pinnacle API.

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.

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.

Keha Arengu Monitooring

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 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. The application supports all 3 desktop platforms: Windows, Mac OS X and Linux.

Technology: C++, Qt, SQLite, NSIS.

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.

Open Source projects

I have also created a number of Open Source projects. The source code can be found on my GitHub account.


Personal web-based replacement for Google Reader and other feed readers. It tracks seen/read/important state of articles and is built for high performance. Scales well beyond 500 feeds that the most other feed readers struggle with. GitHub

Project wizard

A dialog system with questions and yes/no and selection answers. The set of questions is structured as a tree data structure. It asks certain top-level questions and then proceeds to ask only those questions that make sense by the previous answers. GitHub


Blogging and content management framework for SWI-Prolog. This blog is built using it. It comes with built-in analytics, caching, comments support, admin UI, etc. Homepage. GitHub.

AVR-based PC cooling

The project includes a firmware for AVR and a setup/configuration utility for PC. Built for fun. Deployed to provide silent cooling for my main computer. GitHub. Blog post.

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. GitHub. App.

LLJ - Logic Language for JVM

LLJ is a Prolog-like logic language for running on JVM. It allows close integration with Java libraries. At the time of release it was faster and more memory efficient than many other Prolog implementations on JVM. GitHub.

Browser libraries

  • kontainer - KnockoutJS ViewModel lifecycle manager.
  • router - simple hashchange router.
  • Dataline - simplest single-line chart library.

Prolog libraries

Node.js libraries