I have a height-adjustable desk, but I don’t use it as often as I should, mostly because I keep forgetting that standing is even an option. To address this, I created a simple Python app that connects to an Arduino with a distance sensor mounted under the desk via USB (see the picture). The app detects whether the desk is raised (indicating that I’m standing) or lowered (meaning I’m sitting). It runs quietly in the background, starts with the system, and sits in the tray, showing how long I’ve been sitting. It reminds me every hour that maybe I should stand up... I mean, after an hour, because I stand up immediately after the first notification. Ofc. I also added a reset button, just in case I leave my desk... or, you know, for completely honest reasons only.
For now, ChairRorist does what it’s supposed to: tracks my standing time and nudges me to stand periodically. In the future, I might add features like pausing the timer, changing the reminder interval, tracking progress, and more — depending on how much motivation or inspiration I have at the time.
Całkabot 3k0 is a mini-sumo robot equipped with arms designed to lift the opponent. Taking advantage of the lack of size restrictions after the round begins, this beauty you see in the picture unfolds its lifting arms. In the photo, it's already in the fully deployed position. The arms rotate thanks to built-in motors, and as shown in the video below, if an opponent gets caught between them, the arms will lift them. This reduces their traction, making it easier to push them out of the ring.
Of course, apart from that, the robot is equipped with distance sensors, line sensors, and other components typical for mini-sumo robots. The project was developed as part of my engineering thesis, so I’ll spare the lengthy explanations - if you're curious, you can find 40 pages about it below. After running it through a translator (unless you speak Polish), you’ll learn all about the components used, the combat strategies, and more.
The robot took part in two competitions: EastROBO 2025 in Białystok and Robotic Tournament in Rybnik. Unfortunately, it failed to make it past the group stage in both cases. In the first competition, due to a sensor malfunction, the robot managed to drive out of the ring on its own. As for the second one — it went in with one arm held together by super glue. To this day, I have no idea what determined the controversial thickness of the arm in that critical spot, but hey — that’s a lesson for the future.
Undoubtedly, it is possible to lift an opponent using arm-equipped robots, so I’m not ruling out a refined version of the design—3k1—featuring a number of improvements over its predecessor.
Minisumo robot with an opponent-lifting system.pdf
Tafl games are ancient Nordic board games. They are similar to chess, but with many major differences. Due to the vast region in which they were played, there are many different variants of the game. I used JavaScript to create a website where you can choose one of them and play according to its rules. The site also contains a wealth of information about the history and rules of each variant, as well as the entire tafl games family. You can play with a friend on the same device, or try playing against a computer. However, the minimax algorithm I implemented is quite slow, especially on larger boards or in more complex situations. Hopefully, I'll have more time in the future to upgrade it.
Click here if you want to play, but it's available in Polish only.
In Skill and Chill, I worked in a team responsible for the "Business Zone." This platform was created to automate and optimize business processes for entrepreneurs. It includes modules related to management, budget planning, sourcing, supplier analysis, order acceptance, and much more.
I mainly focused on the Procurement module, which handles the requisition and ordering processes. Everything was built on the Outsystems platform. I worked on the front-end using Outsystems, along with some CSS and JS. For server actions, I also used Outsystems and SQL queries. There were many things I learned, such as database architecture and development processes, but the most important lesson was probably developing good programming habits. Most of my previous projects were solo, and now I truly understand how to collaborate effectively on a large-scale project.
Robocode is an online programming school for kids where I worked. I taught the basics of programming in Scratch for younger kids and C++ for older ones, as well as fundamentals of electronics, physics, and Arduino in the "Robotics course." During the "Game Dev course," we worked in Construct with younger kids and in Unity with older ones. The "Software Dev course" mainly covered basic algorithms in Python. I also conducted a "Web Dev course" that focused on the basics of HTML, CSS, and, for older kids, JS.
After a few months of working, I became the "head teacher," which meant I was responsible for our team of teachers (5-8 people). My duties included ensuring optimal performance during lessons, maintaining the quality of educational materials, communicating with managers, and occasionally training our teachers.
In 2021, my girlfriend and I decided to make a game for our friends as a Christmas gift. Of course, we started a little too late, so it ended up having a bit of a "game jam vibe." It's mainly about collecting presents, which give you more time... to collect more presents. At the same time, you have to avoid obstacles that slow you down and collect items that can speed you up.
This website is the 4th iteration, even though the 2nd and 3rd were never published under jakubkivi.github.io. The first version of my personal website was mainly based on templates, which is why, after a year, I decided to make the 2nd version myself. Later, after using Jekyll in one of my other projects, I decided to start over, using this framework. I didn’t finish it because of my trip to the US. Frustrated by not finishing any other version of this website, I decided to simplify it, make it more professional... and start over. This time, I used only HTML, SCSS, and JS. I also used Bootstrap for a few things to "make it faster," but I have to admit it caused more problems than it solved, and I regret this decision. Maybe I should make a 5th version?
Previous versions of this website:
1st Version
2nd and 3rd Version
CałkaBot 1.0 is the first robot in the CałkaBot series. I built it together with my friend Deli during high school for a Mini Sumo competition in Bydgoszcz. Read more about Mini Sumo fights if you're not familiar with them.
We used standard Pololu motors and, like almost every Mini Sumo robot, IR proximity sensors (for detecting opponents) and reflective sensors (for detecting the edge of the ring). The robot is controlled by an ATmega328P microcontroller and an L298N motor driver. Its frame was built from copper plates. One of our key advantages was using four wheels and a double front. When the robot reached the edge, it didn’t have to turn around — it could simply drive backward, which became its new front.
As we observed during the competition, our robot performed quite well. The event was limited to school students, so many participants experienced unusual problems, such as failing to detect an opponent or the ring’s edge. We also ran into a serious issue, caused by our limited microcontroller experience at the time. We now regret not placing a filter capacitor between ground and the resonator, or a pull-up resistor from the reset pin to 5V. After a strong impact — or sometimes even just a quick start — the robot would occasionally restart.
Despite that flaw, we made it to the semifinal group but, unfortunately, ended up in second place. Still, the experience taught us a lot, and with our newly gained knowledge, we were determined to do even better the following year.
Our second mini sumo robot was named CałkaBot 2.0 to honor its predecessor (see backstory.). This time, we decided to create our own PCB board, and Deli did a great job. We chose not to change the motors, proximity sensors, or the frame. However, we did change the floor sensor, which turned out to be a bad decision (the CNY70 would have been a better option). This time, we noticed that CałkaBot 1.0 was not heavy enough, so we added some lead on top as extra weight. Our robot weighs exactly 500g (the maximum weight for a mini sumo). After a few test fights between our CałkaBots, we realized that the new one performed better.
During the competition in Bydgoszcz, we encountered a major issue. Long story short, when our robot was hit hard, it bobbed, and as a result, it thought the enemy was behind it (due to a mistake in sensor strapping), causing it to run out of the ring on its own and lose a few battles. We didn't make it past the group stage, but our effort was appreciated by the main sponsor of the competition, and we won a special prize. CałkaBot 2.0 performed really well in several of its fights, so we decided to improve both it and CałkaBot 1.0 and head to the Baltic Robo Battles. There, we met many new people and gained a lot of experience. We even faced off against technical university students and sometimes won. With all the new knowledge we gained, we decided not to build a new robot, but two robots so we could compare them and clearly identify all the shortcomings. (Facing the new version of CałkaBot with the old one is less objective, as the new one almost always wins). Unfortunately, the pandemic and studies stopped our plans, but I hope that at least CałkaBot 3k0 (the "k" stands for 'Kivi') will make an appearance at some competitions in the future.
ARA is a game made by me and my friends during the winter holiday in 2019, as a challenge to create a game in C++ using the SFML library in just two weeks (it was one of our first projects). It's a turn-based game similar to chess, but with huge twists, such as different figures' movements, removal of the map, or two moves per turn. The rules might seem strange and tricky at first, but after a few games, they start to make sense. After the winter holiday, my friends practically abandoned the project. I made a few attempts to finish the game (menu, save system, etc.), but each time, I didn't have enough time or motivation to do so. Now, it remains in the backlog—maybe when I'm out of new project ideas, I'll come back and finish it.
"The Music Reactive Lamp is based on a DFRobot analog sound sensor and an ATmega328, connected to a WS2812 RGB LED strip. Depending on the noise level, the LEDs turn on and off or change colors. If the music is quiet, the lamp shines blue. As the volume increases drastically, the lamp turns red, and if it stays red for too long, it smoothly transitions to green. The lamp's sensitivity is adjustable with a potentiometer (so it can be used both at home and at a party). Everything is set up on my prototype board. The frame of the lamp is made from a jar covered with a bath mat. The control unit is enclosed and can be powered via USB or DC input, up to 12V. Three diodes indicate whether the power is connected, whether the logic part is powered, and whether the ATmega is functioning properly. Below, you can see photos of the working stage and the inside of the case, but the main attraction is the video showing the Music Reactive Lamp in action. Enjoy!
This display is made from ping pong balls (actually halves of them), backlit with WS2812 diodes. It usually shows the current time, which is loaded from a DS1307 timer module that has a small battery, so even if the power is turned off, it knows the time. The display can also show simple animations, which you can see in the videos below. I even programmed a simple Google Dinosaur game. Everything is controlled by an ATmega328. The controller box has 3 buttons for changing modes (current time, animations, a timer, Dino game), colors, or brightness. After moving to a new flat, I started making a new controller, but once again, studies took away my free time.
The idea behind the Jack project was to create my own home assistant. I built the first model that could control sockets and lights when logged in. There were also a bunch of sensors and displays… Too much to describe here, just watch the video below if you want, but be careful—my English wasn’t as fluent back then.
This project is purely about electronics and mechanics, with no coding involved (except for optional control by Jack in the past). I used two old power supplies. The better one is a real power supply with -12V, 3.3V, 5V, and 12V outputs. From the second one, I only used the case, which I modified as needed. It contains banana connectors, screw connectors, and speaker connectors, but its main value is an adjustable voltage regulator made with an LM2569.
Check out Grzesiek, my first real project. With him by my side, I have fallen in love with robotics, electronics, and programming. There were actually two versions of the robot. The first one I made in 2017 as a middle school project, which I used for my diploma. There’s nothing to boast about. I was 16, didn’t know anything about proper programming or soldering, so the code is a mess, and the robot looks unprofessional—because it was. But the videos are cute and memorable. I started the second version right after middle school, but I had other projects at the time, so I abandoned it. I actually used some parts in other projects. Maybe someday, I’ll resurrect it.
Procrastination doesn’t necessarily mean something bad. It all depends on your redirection vector — you can even use it as a weapon. My thesis supervisor calls it the "virtual work method": you clean the whole house just to avoid finishing a school project. As long as you’re not wasting time thinking about procrastination itself, you can use it to complete tasks that suit you better in the moment. Just like I’m updating the website right now.
Totally forgot about this "notebook". If youre waiting for ending of the previous note, I am sorry. I have no answers... Neither do I have any specific note now, but I hope to come back here with some revelations in the future.
Finishing something is a long and exhausting process. I will write more about it in the future, because now I am celebrating that everything works :D