I'm working as a freelancer consultant and provide the following services:
- Programming in TypeScript and Prolog
- Web scraping and data extraction
- Project/product planning and budgeting
- General development and business consulting
- Deployment on Linux-based platforms
- System monitoring and maintenance
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.
Synergist.io contract automation
Synergist.io 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.
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.
There is a longer writeup about the project.
There is a video showing the system in use by Lasita Maja.
Technology: Node.js, ExpressJS, React, Bootstrap, DroidScript, MySQL.
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 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. 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
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
AVR-based PC cooling
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.
- kontainer - KnockoutJS ViewModel lifecycle manager.
- router - simple hashchange router.
- Dataline - simplest single-line chart library.
- Prolog-markdown - markdown parser.
- Simple-template - HTML template language.
- Dict-schema - like JSON-schema but for Prolog terms.
- Docstore - document database.
- Sort-dict - sorting helper.
- Alternative-router - HTTP router.
- rdet - runtime determinacy checker.
- prolog-yamltiny - YAML subset parser for Prolog.
- fast-feed - very fast RSS/Atom feed parser.
- node-swipl - Node.js and SWI-Prolog bridge.
- node-swipl-stdio - Node.js and SWI-Prolog bridge (stdio-based).
- dom-eee - declarative extraction of HTML document data.
- prolog-vdom - VDOM implementation for Prolog.
- sql-sync - offline two-way replication between MySQL and SQLite.
- pkg-express-benchmark - Node.js pkg benchmarks.
- simple-template-visual-code - Visual Studio Code syntax highlighter for the simple-template language.
- redmine_infdot_upload - Redmine plugin for uploading files from command line.
- gallery-gen - personal image gallery generator.
- phantomjs-dirty - key-value database for PhantomJS.
- kate-ejs - EJS syntax highlighter for the Kate text editor.