I build practical backend tools and automation using Python, Docker, and cloud technologies.
I enjoy turning real-world problems into simple, reliable systems — from data collection and processing to containerized execution and cloud‑ready design.
Most of my work starts with a concrete need and grows into something reusable and well‑structured.
- Python — automation, API integration, data collection, data processing, backend utilities
- Docker, Git, GitHub Actions — containerization, CI/CD, reproducible setups
- AWS — EC2, Lambda, S3, IAM, VPC, CloudWatch
- Linux & networking — deployment, debugging, troubleshooting
Repo: https://github.com/k-borowiak/flight_deals
A tool that automatically tracks flight prices and sends a weekly email report with current and historical data.
It:
- queries Google Travel Explore API for the cheapest flights across multiple destinations
- caches API responses locally to avoid unnecessary calls
- compares current prices against historical minimums
- updates a Google Sheets spreadsheet via REST API
- sends a formatted weekly report via Gmail SMTP
- runs automatically every Monday via GitHub Actions
What started as a manual price check became a fully automated, zero-maintenance tracker.
Repo: https://github.com/k-borowiak/training-analyzer
A backend system for collecting and analyzing endurance training data, starting with Strava.
The project focuses on building a clean and extensible backend that:
- connects to external fitness platforms using OAuth
- synchronizes activities incrementally and supports historical imports
- stores raw training data and calculates key performance metrics
- processes data asynchronously in the background
- prepares the ground for AI‑assisted training insights
This project is less about flashy features and more about solid backend architecture, data flow, and a design that can evolve into a cloud‑deployed service.
Repo: https://github.com/k-borowiak/zwiftpower-excel-updater
A Python tool that automates collecting rider performance data from ZwiftPower and turns it into a structured dataset for team management.
It:
- logs in via Zwift SSO
- extracts rider data from dynamic web pages
- cleans and normalizes results
- exports ready‑to‑use data to Excel
What started as a manual, repetitive task became a reliable automation tool that can be reused and extended.
- solving real problems with automation
- working with external APIs and dynamic web data
- designing backend workflows for data collection and processing
- separating responsibilities (data intake, logic, output)
- using Docker for consistent, repeatable environments
- setting up CI with GitHub Actions
- thinking ahead about AWS deployment and scalability
I usually start with the simplest working solution, then improve structure, reliability, and deployment step by step.
I care about:
- simple and understandable solutions
- tools that are easy to run, debug, and maintain
- reproducible setups (Docker, configuration, scripts)
- building software designed for real use, not just demos
