Projects

Purrfect Price

Compare cat food prices from top sellers with Purrfect Price

purrfect-price.webp

After adopting a cat for the first time, I found myself overwhelmed by the sheer number of cat food options, ranging from budget to premium brands. The research process was time-consuming, with prices and quality varying widely across different online stores. That’s what motivated me to create Purrfect Price.

Purrfect Price is a tool designed to simplify this process by scraping prices and product details from multiple cat food websites. Built using NextJS for a dynamic frontend, the scraper is powered by Playwright to fetch data from popular websites like Zooplus. The data is then organized and displayed using AgGrid, allowing users to filter and compare cat food brands easily, helping them find the best quality/price ratio.

The tool automates what would otherwise be a tedious manual process of visiting multiple sites and trying to assess which product offers the best value for our beloved pets, helping cat owners make more informed decisions with ease.

FlexInvoice

A simple and customisable web-based invoice generator

flexinvoice.webp

Having recently started working as a freelancer with my own company, the need emerged to bill clients via tailored invoices, for both my use and my collaborators'.

Since I found a basic Word-based template a bit too simple for my needs, and at the same time I didn't want to find a complete product, I quickly came up with my own solution: a React template that gets populated by JSON data, from which I generate a PDF using Puppeteer.

Currently, I'm developing a data input service to streamline the process. This additional feature will automate data gathering for the template, which typically changes infrequently and predictably, with the goal to automate invoicing as much as possible.

Personal website 2.0

My new personal website, implemented with Next.js

martacodes.webp

After a few years, I embarked on a journey to give my website a much-needed refresh, harnessing the latest technologies and the wealth of knowledge and skills I'd acquired over time.

The website is now implemented using React in combination with Next.js, making it lightning-fast and highly efficient. I've incorporated Tailwind CSS and Material-UI, which provide not only aesthetic appeal but also a seamless user experience. For the first time it also features a dark mode.

Under the hood, a GraphQL backend ensures data retrieval is optimized, while content creation and updates are handled through the Strapi CMS, offering flexibility and control over the website's content.

For deployment and hosting, the website finds its home on Vercel.

All-Star Advent of Code

My submissions to all Advent of Code challenges (2015-2023)

aoc.webp

I've been participating actively in the Advent of Code challenges since 2020, and after finishing the 2020 event, I decided to go back and solve all puzzles from the past years.

I succeeded in a few weeks, and now I'm quite proud of my shiny 450 stars ⭐ (apparently only ~1050 people managed to achieve the 'all stars' status) — not to mention the huge progress I've made with Kotlin, complex algorithms and problem solving in general.

As a side project, I've also put together an API that automatically sets up a new class for the new daily challenge and downloads the input data, and automatically fetches the star progress from my account to update the Readme.

Pigeon Family Cam

RaspberryPi-powered webcam monitoring a pigeon nest on my balcony

pigeons.webp

When a couple of pigeons nests on your balcony, what could be better than installing a RasPi webcam and broadcasting their lives on the internet?

Twitch-to-Slack notifier

Custom Python cron job to link Twitch to Slack for personalised live show notifications

twitch.webp

I never want to miss a live show from my favourite Twitch streamers, and I'm used to grouping notifications on Slack channels as a way to organise them. After testing services like Zapier and IFTTT and getting quite dissatisfied with the licence limitations or the lack of customisation, I decided to write my own cron job in Python: it queries the Twitch API to find which of the streamers I follow goes live and then connects to a Slack webhook, displaying a nice-looking message. Never gonna miss a show again!

Fiscal Code Android app

Android application for computing an Italian Fiscal Code via the public algorithm, and verifying a code's validity

fc_app.webp

I started learning Android development recently and, in order to focus on the features of the mobile world, as well as on practising with Kotlin, I've been reusing the Java backend of the Fiscal Code calculator I built in university.

The app has been downloaded 100000+ times and reached a rating of 4.3 during its lifetime.

Team toolbar plugin

Customisable XBar plugin for streamlined team process monitoring

xbar.webp

Many teams have a considerable number of processes and metrics to monitor and links to web resources, which often end up all over the place in the browser. To gather all of those I created a plugin for XBar, a useful app that lets you put the output from any script in the MacOS toolbar.

Connecting to the company's servers, the toolbar shows Bamboo build and deployment processes, pull requests, release statuses and such. Now my team uses the toolbar on a daily basis and I'm currently working on extending its functionality, e.g. to allow other teams to easily add their own configuration.

Daily Programming

Daily coding challenges to improve programming skills

programming.webp

They say "Practice makes perfect", and that's why a good programmer should write code every day.

The way I like to practise, when I don't have more complex projects to work on, is to pick a coding challenge (e.g. from r/dailyProgrammer, CodeWars, Project Euler, Advent of Code, ...), or simply to think of a problem I want to tackle, and write my solution for it. This repository is a collection of all such challenges.

Power Usage Web Scraper

Automated power consumption monitoring from an energy supplier's website, via Python web scraping.

zebra.webp

What to do when your energy supplier offers a live balance of the energy usage in your account and you wish to monitor it to know how much you're spending, but at the same time you don't want to login every few hours? For me it was the perfect chance to learn web scraping with Python.

The result is a script that logs in to my account, calls the supplier's API at the desired time intervals and saves the results.

A simple task, but a meaningful achievement and a fun way to apply coding skills to a real-life problem.

Premium Insurance UI components

Information banners for the new Premium insurance product at Rentalcars.com

noodle.webp

As a part of the Graduate Scheme at Booking.com, I joined the team that develops the "Premium" insurance product, which offers exclusive benefits to the customer such as skipping the line at the car pickup counter, a lower deposit, no credit card required and a dedicated support helpline.

We built the UI in React, developing various components (a comparison of the available insurance options for the car details page, a few upsell banners and information sections) that we then integrated in the main webapp.

mpancaldi.web.app

Initial iteration of my personal website using ReactJS

website.webp

Built with ReactJS and later migrated to Typescript, it's also a chance to play around with my web development skills and experiment with front-end technologies.

MSc Dissertation - Automated Grading

An automated grading tool for the programming assignment of the Software Engineering course

msc.webp

Creating a wc clone for my MSc Software Engineering course was enjoyable, although the grading process took longer than expected.

This experience inspired my dissertation project, where I developed an automated testing tool for students' coding exercises, aiming to streamline the instructor's evaluation and grading tasks.

Cloud computing and GDPR

Research article on the effects of GDPR on Cloud services, published by IEEE in 2018

gdpr.webp

Disclosing personal data for a purpose not known by data subjects is a practice that the 2018 EU General Data Protection Regulation (GDPR) is supposed to prevent. This article gives an overview of the major aspects of GDPR related to provision, use, and maintenance of cloud services and technologies, with the objective of representing effective guidance for companies during the process of complying with the new laws.

The article was written in collaboration between professors and associates of the faculties of Law and Computer Science of the Free University of Bolzano, and was accepted by IEEE for publication in the Nov/Dec 2018 issue.

wc clone (Unix)

Clone of the Unix wc tool written in Python, using a black-box testing approach

Wc.webp

First complex project in Python - creating a clone of the Unix' word count tool, wc, based on re-engineering techniques and black-box testing and using only the Python Standard Library for the main functionality.

The result is a program that produces the same output as the original wc for all known input sequences and file formats, including binary files.

Food Saver (GESS 2017)

Hackathon project created for the Global Entrepreneurship Summer School 2017 in Shanghai.

gess.png

I was selected (among 1200+ applications) to attend the Global Entrepreneurship Summer School (GESS) 2017, hosted by the Tongji University in Shanghai, China.

This year's topic was “Food“, and our goal was to find solutions to related problems - such as food waste, obesity, hidden hunger and food safety.

My team designed a mobile app that connects users to supermarkets and local food suppliers: most markets have an “expiring soon“ section with aliments that cannot be displayed being too close to their expiration date. This app would be a database listing such products, so that customers can save money and help reduce food waste, by purchasing groceries that are still perfectly safe to eat.

BSc Dissertation - Technical Debt

Heuristic algorithm for SATD method analysis and bug impact.

satd.png

My BSc graduation project: I developed an heuristic algorithm that parses the so-called "SATD methods", that is Java methods that are affected by "Self-Admitted Technical Debt", instances of Technical Debt that the developers self-documented in the form of comments.

The research then analysed how such methods evolve from the moment the comment was introduced through Version Control and, based on the bugs reported in the code's issue tracker, how the presence of technical debt affects the amount of bugs on average.

Werner's Restaurant

Java webapp for restaurant reservation and take-away management

werners.webp

A full Restaurant Manager webapp in Java is the final project my team developed for the Internet & Mobile Services course: it allows customers to reserve a table or to book a takeaway order, and the restaurant managers to verify the status of the reservations and orders, add and remove takeaway meals and check other employees' accounts, mostly in the form of CRUD tables.

I've recently made a v2 in Spring and deployed it on Heroku - check it out!

Holiday request manager

Internship project: HMRS software with a versatile employee portal

ict.webp

I interned for three months at the ICT Group as a web developer, and my task was to build an additional feature to the company’s HR management software: a portal for the request and approval of the employee vacations, work permits, transfers and bank hours.

The UI I developed consists of customisable calendars and timesheets, which offer different views according to the role of the logged user (employee or manager), and was built using AngularJS with the Boostrap CSS framework.

Hack-my-Town

Innovative brand strategy for Glorenza-Glurns, the smallest town in South Tyrol

glurns..webp

A day of December 2014, four UniBZ computer science and design students were sent to the smallest town in South Tyrol, Glorenza-Glurns, with a challenge from their professors: find innovative ideas to improve the life of a mountain village, often isolated and closed in its daily life, which would offer history and attractions but fails to entice tourists to stay.

Our solution, winner of the contest between UniBZ and other Italian universities, was to create a brand for Glorenza and a consortium for the towns in the area - a brand to promote the history, the beauty of the landscapes and the tastiness of the food and that tourists get to know and trust.