Projects

In this page you'll be able to read a bit more about my projects and the technologies I've used. Of course, I can't reasonably describe all of them here, but i hope that I'll manage to list most of the interesting ones here! Also, please note that many of these projects have been developed in an enterprise setting where the clients were rather strict in regards to security. Because of this, text and logos might be replaced with random pixels and color schemes removed. This is done to ensure that you get an idea of the complexity of the UI, without giving away the particular clients in question.

Python RSS Static Rendering Containers Docker Drone CI
Developed for Personal projects in 2023

Thousands of aggregated blog posts for you to read!

More information

Turns out that you can do a lot with feeds like RSS, if you know where to source the data! The users of the popular Hacker News technology enthusiast site shared links to their personal blogs and someone was kind enough to aggregate links to the corresponding RSS/Atom feeds where possible in a list. So of course I had to put that list to a good use!

Java Oracle DB Spring Boot Redis Queues Vue WebSocket Containers Docker GitLab GitLab CI
Developed for SIA "Autentica" in 2023

The type of system where good performance is a must, with no leeway!

More information

This was one of the more recent systems that I worked on in the org and one that caused quite a few challenges along the way. The idea behind it was that not only would it integrate with the other systems that were being developed, for scheduling auctions, but it would also provide real time auctions for hundreds of users.

JavaScript Vue Pinia Composition API PrimeVue
Developed for SIA "Autentica" in 2023

It was time to bring the sales platform into the current decade!

More information

Having the AngularJS EOL looming over the project's head was slightly concerning, however this also proved to be a great opportunity to rewrite it in more modern technologies! Notably, Vue, which had already been used previously in another few projects, alongside the features provided by the latest versions, such as the Composition API, which is in some ways nicer to use than React hooks, as well as state management solutions as Pinia and PrimeVue for ready made components.

Java Oracle DB Spring Boot AngularJS Containers Docker GitLab GitLab CI
Developed for SIA "Autentica" in 2023

A public platform for conducting B2B sales for one of the clients.

More information

Here's a sales platform that was meant to introduce a certain amount of self-service functionality to conducting B2B transactions. The idea behind it was that it'd integrate with the aforementioned ERP/CRM system and would allow business partners of a given org to sign up for certain sales processes that were conducted, as well as review terms and rules, submit the necessary documents to allow their participation, as well as choose the services and goods that they're interested in.

Java Tomcat Oracle DB Spring JSF PrimeFaces Containers Docker Selenium GitLab GitLab CI
Developed for SIA "Autentica" in 2023

One of the larger multi-year projects, close to half a million lines of code!

More information

This was a rather complicated system for one of the clients, which involved work over multiple years, both on the continued maintenance of the system, as well as developing entirely new modules for it altogether. While many companies out there might attempt to customize an existing system for their needs, like Oodoo for example, there's also lots of value in doing the opposite - making the system adapt to your business and its needs, fully.

Hiring Code Review
Developed for SIA "Autentica" in 2023

Despite being a developer at heart, I also have some experience in leading technical interviews.

More information

I've occasionally been asked to participate in the hiring process and help out the technical interviews for candidates who'd like to work at the organization. While there are many approaches to hiring, I think that both reviewing take home tasks and taking part in real time interviews are both good approaches.

Guidelines
Developed for Personal projects in 2022

I decided to make a polite guide about asynchronous communication.

More information

It's important to respect others' time, especially when working remotely. Especially in our line of work, where context switching will slow us down and decrease our productivity, where frequent interruptions will often prevent us from getting things done as quickly as we otherwise would.

Fonts
Developed for Personal projects in 2022

Google Fonts is nice, but what about downloadable fonts for personal projects?

More information

I've used Google Fonts to great success so far, but not everyone wants to rely exclusively on web fonts, both because of relying on someone else's infrastructure, as well as over privacy concerns and so on.

Onboarding Mentoring
Developed for SIA "Autentica" in 2022

Investing in increasing your bus factor will generally pay off well!

More information

Every system and project out there will have domain knowledge that won't be immediately obvious to anyone who's joining the team anew. It might be certain aspects of the business domain, it might be knowledge about the overall architecture, about the technical solutions and other noteworthy details. It is therefore important that we work on formalizing this knowledge and making it easier to transfer it to new colleagues.

Ansible GitLab GitLab CI CI/CD DevOps Iac
Developed for SIA "Autentica" in 2022

What do you do, when there are still servers running your containers? Infrastructure as code!

More information

It wasn't enough for me to just work on modernizing how the applications are run and introduce containers, for you see, the containers still run on some sort of a host that has its own configuration, directories, users, permissions services and lots of other things that should also be managed in a sane way.

Containers Docker Docker Swarm Portainer GitLab GitLab CI CI/CD DevOps
Developed for SIA "Autentica" in 2022

Turns out that containers are pretty great, both for development environments and production!

More information

This effort of mine took anywhere between months to years of efforts, depending on how you look at things. Initially, I started out with adding systemd services and Ansible for managing server configuration, but it turned out that this alone wasn't enough to ensure consistency across different environments. The answer to that issue was using containers instead and making the running application instances truly reproducible - you ship what you test!

APM Apache Skywalking Containers DevOps
Developed for SIA "Autentica" in 2022

Your applications work well... right? And you're sure of that? This is where APM comes in!

More information

I've seen people not think about day 2 concerns of development nearly enough as they should. It is not enough to just ship some software and get paid, you also need to think about keeping it running in the future. Not just that, but you need to know just how well the software is running, as well as have the ability to anticipate any potential issues ahead of time.

Architecture Horizontal Scaling Load Testing
Developed for SIA "Autentica" in 2021

With some work, even most simple applications can scale to thousands of active users.

More information

When talking about scaling, opinions vary, as do the orders of magnitude in question: someone's system might run well with a hundred active users, someone else might need to serve thousands, whereas yet another organization might be working with tens of thousands of users and beyond. Personally, I haven't had to work with the latter outside of particular load testing circumstances, but even most boring real world systems can be optimized to perform better for gradual scaling up.

Python Typer Paramiko SSH DevOps IaC
Developed for Riga Technical University (RTU) in 2021

What if someone made a shell based alternative to Ansible?

More information

Tools like Ansible are pretty great for managing the configuration across many servers. However, Ansible in particular depends on a Python interpreter being present on the remote system. What if someone were to create a solution which is not dependent on the presence of Python, one that would work purely through a SSH session, in the remote shell, much like a regular human user would?

K6 Load Testing JavaScript
Developed for Riga Technical University (RTU) in 2021

One of the more performant solutions for load testing.

More information

A part of my Master's thesis was not only deploying a web application, but also load testing it across different container orchestrators, to see how well it performs and whether the container orchestrator deployments have succeeded properly.

Ruby Ruby on Rails PostgreSQL PostGIS Leaflet.js
Developed for Riga Technical University (RTU) in 2021

What if we used contact tracking instead of contact tracing? How would it scale?

More information

For my Master's thesis, I needed a system to benchmark and run as an example, to check whether my configuration management tool worked correctly. Because of this, I decided to explore whether contact tracing would be a better solution - whether GPS data from mobile devices of infected individuals could be aggregated responsibly to generate heatmaps, so even those without applications would know which parts of the city to avoid, as well as something that could aid in the research on the spread of the virus.

Containers Docker Docker Swarm Kubernetes Benchmarking
Developed for Riga Technical University (RTU) in 2021

Turns out that lightweight Kubernetes distros do exist. Docker Swarm is still good, though.

More information

As a part of my RTU course, I had to spend some time doing a praxis - where I'd work in a company and do some research. Luckily for me, I was already employed at the time, so I could spend the time exploring various container orchestrators in detail, a question that was relevant for the org in regards to development environments at the time.

DevOps Zabbix Uptime Kuma Slack Containers Docker
Developed for SIA "Autentica" in 2021

I helped increase the uptime of various environments.

More information

Uptime is a bit of a touchy subject. On one end, people seem to obsess over having zero downtime and make development much harder than it should be (though this is understandable for certain services), on the other people don't necessarily care as long as it doesn't impact themselves personally.

In my mind, doing all of the "easy" things to achieve good uptime is a no-brainer, even in regards to something like development, testing and staging environments - after all, you should make sure that QA have a pleasant experience as well.

GitLab GitLab CI Sonatype Nexus Containers Docker DevOps
Developed for SIA "Autentica" in 2021

I setup an entire pipeline to build and store all of the containers needed for development on-prem.

More information

Have you ever needed to build and store your own containers that aren't necessarily for public consumption? Do you need to avoid running into Docker Hub rate limits and not create unnecessary load on their servers? Do you want good performance while building your own containers, as well as to take advantage of layer reuse? This is exactly what I did for a few projects in the org.

Containers Docker Logrotate DevOps
Developed for Personal projects in 2021

A solution for when log shipping is out of the question.

More information

Have you ever found yourself unable to use log shipping, for any number of reasons? Maybe you have an older project, or maybe the team has simply decided that log files are the approach that they'd like to use. Well, you're going to have a problem - some days, weeks or months down the line, the server disk space is going to run out because of all of the log output, or you'll end up with log files that are hundreds of MB or even GB in size and thus hard to browse.

Python Matplotlib Jira
Developed for Personal projects in 2021

Ever had issues with not knowing which Jira issues should be done after which? I solved that.

More information

Project management software like Jira allows you to add "has to be done before" and "has to be done after" links to issues, so that you know which need to be done after which. But what are you supposed to do, when you have a sprint that has like 20-40 issues in it, all of which can have those links and amongst multiple different ones?

Node.JS Express.js S3 MinIO React.js
Developed for SIA "Autentica" in 2020

I actually made the homepage for the Apturi Covid (Stop COVID) app.

More information

Shortly after the pandemic became quite concerning, Google and Apple joined forces to implement a contact tracing solution. The idea behind it was to alert people of when they've been in close proximity with someone who has become infected, so that they'd know to self-isolate, to help combat the spread of the virus.

Each country got to develop their own contact tracing solution, while using the underlying technology, and I got to collaborate with around 100 industry specialists in my country on doing just that.

Kubernetes Helm Containers DevOps Traefik Microservices Linux
Developed for SIA "Autentica" in 2020

My first experience of running production-ready Kubernetes clusters myself.

More information

Imagine a project coming along, which cannot just pay a cloud vendor to run a Kubernetes cluster for you. Imagine having to manage your own cluster on-prem, needing to do so on a short notice and with room to grow, so that other developers can start working on a microservice project and ship container images successfully.

PHP Laravel React PostgreSQL Linux Ansible
Developed for SIA "Autentica" in 2020

Not quite Farming Simulator, but something to help with real world logistics.

More information

This was another public system that was intended to allow farmers to sign up and manage their fields more easily. The idea was that they could plan crop rotations, as well as fertilization of the fields, as well as manage their farm equipment digitally.

PHP Laravel React PostgreSQL Linux Ansible
Developed for SIA "Autentica" in 2020

A wholesome project about lots of local food related events.

More information

Here's a surprisingly relaxed project that I got to be a part of at work. There was this site that was focused on lots of local food related things, like where you can buy local produce. They wanted to implement a new section, which would allow scheduling events and would serve as the main source of information about them: time, location, possibly adding videos or a gallery, as well as the event plan, speakers and so on.

PHP Bootstrap Micro Frontends MariaDB
Developed for Personal projects in 2020

Note: I've blurred the image of the trophy, in case anyone doesn't feel comfortable with that.

Some more help for an acquaintance, this time with micro frontends.

More information

The acquaintance that I had helped previously in creating a responsible hunting system, now wanted some help with a hunting trophy gallery. I also helped them with bringing that idea to life, within the context of an already running system.

PHP Lumen Bootstrap Mapbox Leaflet.js MariaDB
Developed for Personal projects in 2020

An acquaintance asked me to help them with making hunting responsible, so I obliged.

More information

In the modern times, hunters actually help out even the populations of wild animals, so that they don't do damage to the flora. In the winter, they provide food for the animals to help them better weather the cold and I've personally helped clearing a few beaver dams that were in danger of flooding the surrounding areas.

However, when it comes to hunting, it's actually important to do that properly as well. An acquaintance reached out to me and wanted some assistance in doing that, by developing a system that'd both allow keeping track of how many animals have been hunted, as well as would allow experts to add comments explaining how to do that better in the future.

Planning Microservices Java C# Node.js Vue MySQL DevOps
Developed for Riga Technical University (RTU) in 2019

It's useful to learn from failure and do post-mortems as well!

More information

Many might choose to only talk of their successes, though where's the fun in that? Here's a short story about an abject failure, that was a useful learning experience. A while back, people really bought into the benefits of microservices, along the lines of the Gartner hype cycle.

However, something that few consider are the operational complexities brought on by picking such an architecture, as well as the inevitable overhead of managing various project runtimes and configurations, making it so that picking microservices for smaller projects is likely to lead to failure!

Modeling OCL
Developed for Riga Technical University (RTU) in 2019

A university project that showed me the dark side of model driven development.

More information

Don't get me the wrong way, I absolutely adore model driven development and its practical applications. For example, when you can point your application instance to a live database instance and generate either a full list of baseline migrations, or maybe entity mappings for your OCR or other DB access solution of choice. I love it when you can point a tool or a build step at your service definitions in your code and generate OpenAPI specs for your APIs.

C# WPF PostgreSQL PostGIS OpenStreetMap QGIS
Developed for Riga Technical University (RTU) in 2019

OpenStreetMap + PostGIS = ❤️

More information

This was my first foray into using geospatial data, rendering and interacting with my own maps. Thankfully, open data like the kind provided by OpenStreetMap made for a pleasant experience.

PostgreSQL pgSQL
Developed for Riga Technical University (RTU) in 2019

An attempt to create something that reads like Prolog in PostgreSQL.

More information

During my database course, we had to implement a variety of interesting use cases: time series databases, geospatial databases and deductive databases, as well as others.

MySQL
Developed for Riga Technical University (RTU) in 2019

Time series data and temporal algebra, in MySQL. Enough said.

More information

During my database course, we had to implement a variety of interesting use cases: time series databases, geospatial databases and deductive databases, as well as others.

Java Tomcat Spark BouncyCastle
Developed for Riga Technical University (RTU) in 2019

A security focused course work, to make managing certificates and their expiry easier.

More information

Did you know that Let's Encrypt only became a thing back in 2014? From there they gradually made more and more impact upon the industry, before eventually becoming widespread to the point where almost all of my public certificates are issued by them. However, for this university course project, I set out to create my own web based management system, which would allow you to easily generate as many certificates as you need.

BPMN
Developed for Riga Technical University (RTU) in 2019

A whole course of modelling business processes.

More information

In one of my university courses, I had to model a number of business processes in a given organization and plan how they could be improved, all done in formalized approaches such as BPMN (Business Process Modeling Notation). While there is something not too positive to be said about lots of red tape, I have to admit that this course was relatively nice and let me explore possible implementations for an information system, without jumping headfirst into writing code.

Python Slack
Developed for SIA "Autentica" in 2019

A rather nice experience integrating Python with the Slack API.

More information

Imagine using the quite nice Flyway solution for managing your database migrations. Now imagine the version string growing to something quite complicated over time, to the tune of V20230214.X.Y.Z.W.M.N due to project requirements. How are you supposed to figure out ways to name such migrations manually?

PowerShell Windows Server
Developed for Personal projects in 2019

A PowerShell script to work around Windows Server limitations.

More information

Imagine having a Jenkins pipeline that deploys a new .war, .ear or .jar file to a server. How do you stop the application service once that happens, redeploy this file to the application server and then start it again, with the new application version?

Java Tomcat Vaadin PostgreSQL Excel
Developed for SIA "Autentica" in 2019

An expense module for a real estate system, for thousands of properties.

More information

This was a fairly interesting experience that I had. I was called in to take over a real estate property management system, which had information about everything from plots of land, to buildings, to even separate parts of buildings. Not only that, but this system used a framework by the name of Vaadin. While my experience with Java on the front end hasn't been too good (given that JavaScript or TypeScript can be a better fit), this turned out not to be too much of a problem, especially for more data centric solutions.

Java Tomcat Oracle DB JSP
Developed for SIA "Autentica" in 2019

A serious project that turned out to be a stressful learning experience.

More information

Imagine being called in to help with a project, which needs to be migrated to a more modern and secure runtime. Imagine this project not having automated CI/CD for a variety of factors and now needing to gradually migrate everything over.

Not only that, but imagine newer versions that were developed before your involvement in the project now getting deployed and eventually surfacing underlying problems with the technologies themselves - resulting in outages that need to be mitigated ASAP.

JavaScript Node.js Express.js MongoDB
Developed for Riga Technical University (RTU) in 2018

A simple shop example system, for a university course.

More information

Imagine how quickly it's possible to knock together a web based system with a few forms and two user types - surely it shouldn't take more than a few evenings of hacking away. And now, imagine the same, but with every form, every state transition, every validation needing to be formally described. That was largely what the university course in question consisted of.

Python Flask
Developed for Riga Technical University (RTU) in 2018

A pretty lightweight course management system, made with Flask.

More information

In a university course, we had to come up with a full system design for a given domain. In my case, that meant developing a course management system, to manage study courses and the students assigned to those, as well as the lectures that they'd have to attend.

Java JavaEE C# ASP.NET Node.js JavaScript MySQL Linux
Developed for Riga Technical University (RTU) in 2018

For my Bachelor's thesis, I created real world benchmarks for two popular technologies!

More information

I had been interested in software performance for quite a bit, especially in real world scenarios. I recall looking at The Computer Language Benchmarks Game and thinking that while one runtime might be faster than another, those results might change somewhat in real world scenarios - when you're doing lots of computational operations, or quite on the contrary, are waiting for data to be sent through the network.

IoT AWS AngularJS Linux
Developed for SIA "Autentica" in 2018

Working with IoT can be quite challenging!

More information

This was a shorter project, where I got called in to help with implementing some features in an IoT centric project, in particular, for the cloud management UI that scheduled certain processes to take place.

Planning Git GitLab
Developed for SIA "Autentica" in 2018

Turns out collaborating across organizations can be challenging.

More information

What do you do when you want to take a source code repository and mirror it across multiple organizations? You can use the built in functionality in GitLab for this, which is completely workable in most cases (provided that you won't run into issues with Git LFS objects). But what do you do when you want both of those organizations to be able to make their own commits, without breaking the synchronization?

Planning Architecture Microservices Containers Docker PostgreSQL Redis
Developed for SIA "Autentica" in 2018

I got to not only do system architecture, but also help with sales.

More information

In my country, some projects are bid on in the public, so that multiple companies can compete with their own offerings. As a part of this, there was a necessity to provide a workable system design draft for one such project.

Planning DevOps GitLab CI/CD Jenkins Linux
Developed for SIA "Autentica" in 2018

It was around 2018 that I got to plan bespoke development workflows.

More information

A client of the company needed someone to help them figure out just how they can develop and eventually ship new releases of their system. After gaining some development experience on the already existing projects within the company, I was asked to help them - to figure out something that could be workable both for us and for them, as we'd collaborate on the development.

PHP Materialize
Developed for Riga Technical University (RTU) in 2017

That one time when I wrote my own PHP framework for a course project.

More information

Even back in the day, people were not exactly happy with the state of our national e-health system, which had troubles running well. So, for the fun of it, I decided to see whether I could create a very basic MVP for our PHP course work. An interesting aspect of it all was that we weren't allowed to use already existing frameworks, so of course I decided to write my own!

C# WPF AI
Developed for Riga Technical University (RTU) in 2017

A fun little project for the university AI course.

More information

In the RTU AI course, we explored both the theory behind some basic AI concepts, as well as got to implement our own example programs. In my case, it was a checkers-inspired game where the player took part in matches against an AI counterpart, which had backtracking capabilities.

Java TomEE MySQL JavaEE Spring JSF PrimeFaces Linux
Developed for Riga Technical University (RTU) in 2017

The first system that I setup from scratch myself for a University course.

More information

During a course at RTU, I had to work on an event scheduling system. In the course, the idea was to take an idea, do a lot of planning and eventually turn it into a functioning system. Not only did I finish creating the system, but I actually could set it up on a rented VPS, which helped me learn more about server administration.

Java JBoss Oracle DB Spring JSF PrimeFaces
Developed for SIA "Autentica" in 2017

A surprisingly modern and pleasant internal system for its time.

More information

This was perhaps the first time where I saw a larger system that simultaneously felt elegant. I might say that it was because of the comparatively limited scope that the system had - it was meant to manage employee vacations, as well as do some reporting and it did so quite well.

Java JBoss Oracle DB Spring JSP JSF
Developed for SIA "Autentica" in 2017

My second professional project, with lots more bug fixing.

More information

The maintenance of the previous system was a somewhat relaxed process, as there wasn't that much to be done in its development. In comparison, this ERP (enterprise resource planning) system that I got to work on needed many more new features added, to meet the needs of the business. This did present certain problems, as the codebase had been around for a while and working with it was difficult.

Java Tomcat Oracle DB JSP
Developed for SIA "Autentica" in 2017

One of my first professional projects when I had stable employment.

More information

After starting out my work at Autentica, one of the first projects I got was for the occasional maintenance of an internal employee survey system, for one of the clients. While the tech stack wasn't particularly new, it was still useful experience.

Unity C# Android CSV
Developed for Upwork in 2017

Someone wanted me to create a visualization of market data evolution over time.

More information

When I was freelancing, someone wanted to create an easily understandable dynamic visualization of market data, which would let the user jump back and forth in time, to see how particular values along various axes change over time.

Unity C#
Developed for Upwork in 2016

Someone reached out to me and wanted me to help them finish a horror game.

More information

One of my latter freelance projects was helping a person with finishing a horror game. They had an idea and had done work on laying out levels, but needed someone with the technical acumen to bring that design document and those scenes to life.

Unity C# Android
Developed for Upwork in 2016

This was one of my first proper mobile game prototypes.

More information

When I was freelancing, someone reached out because they wanted to prototype a mobile game with procedural terrain. The idea was that they wanted to see, how big one could make game worlds on such limited hardware, as well as how well procedural terrain fragments could fit together to provide good environments.

Unity C# DICOM
Developed for Upwork in 2016

One of my freelance projects included visualizing DICOM medical scan data.

More information

Freelancing allowed me to work on a variety of interesting projects, as well as small proof of concept solutions. One of such solutions was visualizing DICOM data in a 3D space. The idea behind this was that a medical professional could take a dental scan and preview it in a more dynamic manner, eventually panning around it and zooming in on points of interest.

Java jMonkeyEngine Voxels
Developed for Personal projects in 2015

One of the oldest interesting projects that I have is a voxel engine that I created in Java, inspired by Minecraft.

More information

Games like Minecraft have become quite popular in the recent years, even though voxel engines have existed long before then. For example, there is Ken Silverman's excellent Voxlap engine that was used in games like Ace of Spades back in the day. Out of curiosity, I also set out to build something similar, using the Java based jMonkeyEngine.

Page rendered in: 0.50 seconds