# Hi, I'm John Ahlroos 👋 [![Linkedin Follow](https://img.shields.io/badge/LinkedIn-15.5k-blue?style=social&logo=linkedin)](https://linkedin.com/john.ahlroos) [![Mastodon Follow](https://img.shields.io/mastodon/follow/109329619852609648?domain=https%3A%2F%2Fsocial.ahlroos.me)]() [![YouTube Channel Views](https://img.shields.io/youtube/channel/views/UCCxxbd2Zf6Op9fThLPSZMGg?style=social)]( https://www.youtube.com/@JohnAhlroos) [![GitHub followers](https://img.shields.io/github/followers/johndevs?style=social)](https://github.com/johndevs) --- ![Header](https://code.devsoap.com/john/.profile/raw/branch/main/header.png) ## 💬 About me I am *John Ahlroos*, a software engineer with a long history in building web applications and working with Open Source communities. I love coding and hacking away on projects, and over time I have also enjoyed leading teams and mentored younger developers. At heart though, I am a coder, through and through. I come from as far north as Finland; you know where the northern lights shine, and the reindeer run wild on the streets... Don't you?
We Finnish developers are a humble bunch, we rarely brag about our abilities but are known for writing excellent and readable code that **just works**. We are hard workers and always speak up and take the lead when we see there is something that needs to be improved. In 2021 I made a big move and moved to the South coast of Spain, more specifically Marbella, and started working on a trading platform for [Skilling](https://skilling.com). I am still on that route today. 🌴 ## 🛠 Tech Stack I have worked with many tech-stacks over the years and have tried to gather as much information about them here. For clarity though the most esoteric and historical stacks I have had the pleasure of working with are not listed as I cannot in good conscious recommend them to anyone. ### Languages ![Java](https://img.shields.io/badge/java-%236DB33F.svg?style=for-the-badge&logo=java&logoColor=white) ![Apache Groovy](https://img.shields.io/badge/apache_groovy-%23E34F26.svg?style=for-the-badge&logo=apache&logoColor=white) ![Javascript](https://img.shields.io/badge/javascript-%23E34F26.svg?style=for-the-badge&logo=javascript&logoColor=white) ![Python](https://img.shields.io/badge/python-%23323330.svg?style=for-the-badge&logo=python&logoColor=white) ![C Sharp](https://img.shields.io/badge/c_sharp-%23E34F26.svg?style=for-the-badge&logo=c&logoColor=white) ![HTML5](https://img.shields.io/badge/html5-%231572B6.svg?style=for-the-badge&logo=html5&logoColor=white) ![CSS3](https://img.shields.io/badge/css3-%231572B6.svg?style=for-the-badge&logo=css3&logoColor=white) ### Frameworks, Platforms and Libraries #### Java ![Spring Framework](https://img.shields.io/badge/spring_framework-%23E34F26.svg?style=for-the-badge&logo=spring&logoColor=white) ![Spring Boot](https://img.shields.io/badge/spring_boot-%23323330.svg?style=for-the-badge&logo=spring&logoColor=white) ![Spring Reactive](https://img.shields.io/badge/spring_reactive-%23323330.svg?style=for-the-badge&logo=spring&logoColor=white) ![Micronaut](https://img.shields.io/badge/micronaut-%236DB33F.svg?style=for-the-badge&logo=micronaut&logoColor=white) ![Ratpack](https://img.shields.io/badge/ratpack-%231572B6.svg?style=for-the-badge&logo=ratpack&logoColor=white) ![RabbitMQ](https://img.shields.io/badge/rabbitmq-%231572B6.svg?style=for-the-badge&logo=rabbitmq&logoColor=white) ![Vaadin](https://img.shields.io/badge/vaadin-%23ED8B00.svg?style=for-the-badge&logo=vaadin&logoColor=white) ![Google Web Toolkit](https://img.shields.io/badge/google_web_toolkit-%231572B6.svg?style=for-the-badge&logo=google&logoColor=white) ![Lombok](https://img.shields.io/badge/lombok-%23ED8B00.svg?style=for-the-badge&logo=lombok&logoColor=white) ![Hibernate](https://img.shields.io/badge/hibernate-%23ED8B00.svg?style=for-the-badge&logo=hibernate&logoColor=white) ![Quartz](https://img.shields.io/badge/quartz-%23E34F26.svg?style=for-the-badge&logo=quartz&logoColor=white) #### Java Testing ![Junit](https://img.shields.io/badge/junit-%23E34F26.svg?style=for-the-badge&logo=junit&logoColor=white) ![Cucumber](https://img.shields.io/badge/cucumber-%23323330.svg?style=for-the-badge&logo=cucumber&logoColor=white) ![Spock](https://img.shields.io/badge/spock-%231572B6.svg?style=for-the-badge&logo=spock&logoColor=white) ![TestContainers](https://img.shields.io/badge/testcontainers-%231572B6.svg?style=for-the-badge&logo=testcontainers&logoColor=white) #### JavaScript ![Express.js](https://img.shields.io/badge/express.js-%23ED8B00.svg?style=for-the-badge&logo=express&logoColor=white) ![React.js](https://img.shields.io/badge/react.js-%23ED8B00.svg?style=for-the-badge&logo=react&logoColor=white) ![Angular.js](https://img.shields.io/badge/angular.js-%236DB33F.svg?style=for-the-badge&logo=angular&logoColor=white) #### C# / .Net ![Blazor](https://img.shields.io/badge/blazor-%236DB33F.svg?style=for-the-badge&logo=blazor&logoColor=white) #### Python ![Flask](https://img.shields.io/badge/flask-%23E34F26.svg?style=for-the-badge&logo=flask&logoColor=white) ![TensorFlow](https://img.shields.io/badge/tensorflow-%231572B6.svg?style=for-the-badge&logo=tensorflow&logoColor=white) ![Pandas](https://img.shields.io/badge/pandas-%236DB33F.svg?style=for-the-badge&logo=pandas&logoColor=white) #### IDE + Plugin ecosystem ![Eclipse](https://img.shields.io/badge/eclipse-%23E34F26.svg?style=for-the-badge&logo=eclipse&logoColor=white) ![IDEA Intellij](https://img.shields.io/badge/idea_intellij-%23ED8B00.svg?style=for-the-badge&logo=idea&logoColor=white) ![Microsoft VS Code](https://img.shields.io/badge/microsoft_vs_code-%23E34F26.svg?style=for-the-badge&logo=microsoft&logoColor=white) #### Security + Authentication ![Keycloak](https://img.shields.io/badge/keycloak-%23E34F26.svg?style=for-the-badge&logo=keycloak&logoColor=white) #### Infrastructure + CI/CD ![Apache Maven](https://img.shields.io/badge/apache_maven-%231572B6.svg?style=for-the-badge&logo=apache&logoColor=white) ![Apache Ant](https://img.shields.io/badge/apache_ant-%23323330.svg?style=for-the-badge&logo=apache&logoColor=white) ![Gradle](https://img.shields.io/badge/gradle-%236DB33F.svg?style=for-the-badge&logo=gradle&logoColor=white) ![Drone CI](https://img.shields.io/badge/drone_ci-%23323330.svg?style=for-the-badge&logo=drone&logoColor=white) ![Jenkins](https://img.shields.io/badge/jenkins-%23ED8B00.svg?style=for-the-badge&logo=jenkins&logoColor=white) ![TeamCity](https://img.shields.io/badge/teamcity-%23ED8B00.svg?style=for-the-badge&logo=teamcity&logoColor=white) ![GoCD](https://img.shields.io/badge/gocd-%23E34F26.svg?style=for-the-badge&logo=gocd&logoColor=white) ![Rancher](https://img.shields.io/badge/rancher-%231572B6.svg?style=for-the-badge&logo=rancher&logoColor=white) ![Travis](https://img.shields.io/badge/travis-%23ED8B00.svg?style=for-the-badge&logo=travis&logoColor=white) ![Docker](https://img.shields.io/badge/docker-%23ED8B00.svg?style=for-the-badge&logo=docker&logoColor=white) ![Docker Compose](https://img.shields.io/badge/docker_compose-%236DB33F.svg?style=for-the-badge&logo=docker&logoColor=white) ![Hashicorp Terraform](https://img.shields.io/badge/hashicorp_terraform-%23323330.svg?style=for-the-badge&logo=terraform&logoColor=white) #### API Integrations ![Customer.io](https://img.shields.io/badge/customer.io-%23323330.svg?style=for-the-badge&logo=customer.io&logoColor=white) ![Segment.io](https://img.shields.io/badge/segment.io-%23ED8B00.svg?style=for-the-badge&logo=segment.io&logoColor=white) ![Snipcart](https://img.shields.io/badge/snipcart-%23E34F26.svg?style=for-the-badge&logo=snipcart&logoColor=white) ![Slack](https://img.shields.io/badge/slack-%23323330.svg?style=for-the-badge&logo=slack&logoColor=white) ![Github](https://img.shields.io/badge/github-%23E34F26.svg?style=for-the-badge&logo=github&logoColor=white) ![Keycloak](https://img.shields.io/badge/keycloak-%23ED8B00.svg?style=for-the-badge&logo=keycloak&logoColor=white) ![Twitter](https://img.shields.io/badge/twitter-%231572B6.svg?style=for-the-badge&logo=twitter&logoColor=white) ![IMAP/POP](https://img.shields.io/badge/imap/pop-%23ED8B00.svg?style=for-the-badge&logo=imap/pop&logoColor=white) ![Hasura](https://img.shields.io/badge/hasura-%23323330.svg?style=for-the-badge&logo=hasura&logoColor=white) #### Amazon Web Services ![AWS Lambda](https://img.shields.io/badge/aws_lambda-%23E34F26.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS S3](https://img.shields.io/badge/aws_s3-%23323330.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS Batch](https://img.shields.io/badge/aws_batch-%23ED8B00.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS API Gateway](https://img.shields.io/badge/aws_api_gateway-%23323330.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS Cloud Watch](https://img.shields.io/badge/aws_cloud_watch-%23ED8B00.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS Cognito](https://img.shields.io/badge/aws_cognito-%231572B6.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS EC2](https://img.shields.io/badge/aws_ec2-%23323330.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS ECS](https://img.shields.io/badge/aws_ecs-%231572B6.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS ElastiCache](https://img.shields.io/badge/aws_elasticache-%236DB33F.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS Elasticsearch](https://img.shields.io/badge/aws_elasticsearch-%231572B6.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS RDS](https://img.shields.io/badge/aws_rds-%23E34F26.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS SQS](https://img.shields.io/badge/aws_sqs-%23ED8B00.svg?style=for-the-badge&logo=amazon&logoColor=white) ![AWS SNS](https://img.shields.io/badge/aws_sns-%23323330.svg?style=for-the-badge&logo=amazon&logoColor=white) #### Databases ![PostgreSQL](https://img.shields.io/badge/postgresql-%236DB33F.svg?style=for-the-badge&logo=postgresql&logoColor=white) ![MySQL](https://img.shields.io/badge/mysql-%236DB33F.svg?style=for-the-badge&logo=mysql&logoColor=white) ![DynamoDB](https://img.shields.io/badge/dynamodb-%23E34F26.svg?style=for-the-badge&logo=dynamodb&logoColor=white) ![Presto](https://img.shields.io/badge/presto-%23ED8B00.svg?style=for-the-badge&logo=presto&logoColor=white) #### Version Control + Services ![Git](https://img.shields.io/badge/git-%23E34F26.svg?style=for-the-badge&logo=git&logoColor=white) ![Subversion](https://img.shields.io/badge/subversion-%236DB33F.svg?style=for-the-badge&logo=subversion&logoColor=white) ![CVS](https://img.shields.io/badge/cvs-%23323330.svg?style=for-the-badge&logo=cvs&logoColor=white) ![Github](https://img.shields.io/badge/github-%23E34F26.svg?style=for-the-badge&logo=github&logoColor=white) ![Gerrit](https://img.shields.io/badge/gerrit-%231572B6.svg?style=for-the-badge&logo=gerrit&logoColor=white) ![Bitbucket](https://img.shields.io/badge/bitbucket-%23E34F26.svg?style=for-the-badge&logo=bitbucket&logoColor=white) ![Gitlab](https://img.shields.io/badge/gitlab-%23ED8B00.svg?style=for-the-badge&logo=gitlab&logoColor=white) ### Design & Architecture tools ![Figma](https://img.shields.io/badge/figma-%23E34F26.svg?style=for-the-badge&logo=figma&logoColor=white) ![Lucid Charts](https://img.shields.io/badge/lucid_charts-%231572B6.svg?style=for-the-badge&logo=lucid&logoColor=white)