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
- Workshops and training
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.
- More information: https://www.ambright.de/printed-light
- Design editor: https://lightsketch.ambright.de/
Technology: React, TypeScript, SVG, makerjs
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.
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.
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.
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.