Articles

Node.js

Camera viewer

Camera viewer thumbnail
IP cameras are cheaper than ever and with the ESP32-CAM boards it is now possible to stream video for less than USD 10. However, IP cameras are commonly either only accessible from within their network, or use servers from third party companies to allow users to see the video feed from anywhere in the world. As both scenarios are inconvenient, I decided to create a camera viewer application that can proxy the video feed to a web interface.
WebProjectsMongooseMongoDBNode.js

Home automation

Home automation thumbnail
Few would argue that having lights turned on in a room without occupant is a waste of electricity. Ideally, lights and other appliances like air conditioners would only be turned on when someone is around. This project is a NodeJS application that gathers data about the occupancy of an apartment and manages appliances accordingly.
WIPNode.jsMQTTProjectsIoT

This very application, a CMS based on Neo4J

This very application, a CMS based on Neo4J thumbnail
Publishing articles on a website can be as simple as uploading HTML files to a web server. However, writing articles in raw HTML can be time consuming. A content management system (CMS) is an application designed to solve this issue by providing a simple way to create and manage web content directly from the web browser. There are many CMSs available, namely Wordpress or Joomla but I decided to create my own as a form of practice and in order to have it highly customized to my needs.
Node.jsWIPProjectsWebNeo4J

Finances management web app

Finances management web app thumbnail
Most banks nowadays provide e-banking interfaces that allow clients to monitor the state of their accounts. However, each bank has its own system and the provided interfaces sometimes lack functionalities. Consequently, I decided to create my own finance dashboard, that combines information regarding multiple accounts. Currently I use it to keep track of my bank accounts balance over time as well as provide a breakdown of my transactions.
ExpressNode.jsMongoDBInfluxDBWeb +2

LINE Bot

LINE Bot thumbnail
<p>LINE offers an API to developers looking into creating chat bots. I created my own so that I could send myself notifications.</p>
Node.jsExpressProjects

Group management microservice

Group management microservice thumbnail
As a graph database Neo4J is a great choice to manage highly relational data. On the other side, a great number of applications feature at least some form of user management system. With Neo4J, those users can be store as nodes and connected to other items via relationships. A typical example would be a blog, where both articles and users are individual nodes while authorships are represented by a relationship.
ProjectsNode.jsWIPWebNeo4J

Node.js DevOps example

Node.js DevOps example thumbnail
In this article, we’ll build a simple Node.js application that uses Express to respond to HTTP requests. In order to deploy this application to production, we’ll also configure a GitLab CI/CD pipeline so as to dockerize it and deploy its container to a Kubernetes cluster.
DevOpsKubernetesTutorialsDockerNode.js

Image upload microservice

Image upload microservice thumbnail
An image is worth a thousand words and probably even more if comparing their size in bytes. When designing my CMS, I originally intended to store images directly in the article, encoded in Base64. However, this would considerably increase the size of each article, making the whole CMS slow.
WebWIPNode.jsMongoDBProjects +1

Mongoose bulkWrite upsert

Here is a code snippet for a bulk update with upsert using Mongoose:
MongoDBMongooseNode.js

Wardrobe and outfits management web app

Wardrobe and outfits management web app thumbnail
Have you ever bought a piece of clothing only to come home and realize you already had a similar one in your wardrobe? This happened to me the other day so I decided to fix the problem. To do so, I designed a simple web application in which the user can keep track of all the garments they own.
Vue.jsMongoDBMongooseVuetifyWIP +3