Kan være tilgængelig
(Opdateret 2024-02-27)Fullstack Java/Kotlin developer
Aarhus, Danmark
Modersmål Danish, English, Øvet Italian
- Broad experience in frontend technologies, React, Svelte, Hotwire
- 3+ years experience with Kotlin, Ktor, Multiplatform
- 5+ years experience with Java, Spring Boot
Kvalifikationer (32)
Kotlin
TOOLING
JavaScript
Sveltekit
API
Development
GRADLE
JQuery
SOFTWARE DEVELOPMENT
Ktor
Git
TAILWINDCSS
Java
STRUCTURED SOFTWARE
Spring Boot
REACTJS
NodeJS
React
websockets
CONTINUOUS INTEGRATION/DELIVERY
CI/CD
APPLICATION SERVER
Integrations
Node.js
Bootstrap
WEBSOCKET
TypeScript
Express/NextJS
Caching
Groovy
AWS
PostgreSQL
Professionel erfaring
2023-08 - Nuværende
I am a self-employed software developer and consultant. I work with clients who want to utilize purpose-built software to automate and/or streamline internal processes. I also work with clients to improve or integrate existing software solutions, whether independently or as part of a development team.
2023-06 - 2023-08
Project The client had a purpose-built app to book visits from Calendar Booking technicians for their customers which was built using the System Google Calendar API. Due to concerns with longevity and 06/2023 - 08/2023 data security, they wanted to develop a custom calendar service that gave them control of the data while providing a front-end similar to the one known from Google.
Function & Responsibility I was solely in charge of designing and developing the solution and integrate it into their existing software. I worked closely with the users to provide a seamless transition, and developed a way for the client to transition gradually to the new system.
The frontend was built using SvelteKit and Tailwind CSS, using Typescript or Kotlin/JS, while the backend was handled by Pocketbase as well as integrating with the existing Spring Boot backend.
2020-12 - 2023-07
Customer Kotlin | Ktor | React | Cloudflare Workers | Gradle HLTV.org Project Due to an explosive growth, the previous way of administrating Esports AdTech native website ads manually became a tedious and laborious Platform process. To solve this, a new AdTech platform had to be built that had to deliver the current fast and AdBlock-resistant native baked- 12/2021 - 07/2023 in ads but allow for much easier administration and customization.
Function & Responsibility Initially working with a colleague, we designed a platform that allowed the sales department to configure and deploys ads themselves with full snapshot history and freedom. The frontend was built in Kotlin/JS with React, and the backend extended their current webserver backend built in Ktor.
The platform had to scale to millions of daily users, and thus utilized aggressive caching as well as serverless technologies to avoid load on the monolith backend.
The serverless part was written in Javascript and Kotlin/JS, and we used Cloudflare Analytics Engine to handle impression data.
We designed the snapshot-system in tandem, after which I took over and managed and developed the project on my own until I left the position.
The platform comprised a multitude of subprojects including: - Ad-serving via Cloudflare Workers to inject geo-specific ads on the fly directly into the HTML without increasing load on the backend.
- An interface for graphics designers to design and deploy custom betting widgets.
- A complete administration tooling for the sales department to manage campaigns and statistics.
- High-accuracy clicktracking without Javascript - A custom-built AdBlock-resistant impression-tracking script written in Kotlin/JS - Implementation of the platform across new assets - A complex build system and CI/CD pipeline using Gradle and Gitlab CI/CD The project was built with continuous dialogue between myself and the sales department ensuring alignment on goals and functionality.
Customer Kotlin | Ktor | Kotlinx-HTML | SQL | SCSS HLTV.org Project The company wanted to make their legacy Counter-Strike Legacy stats project statistics available to the public for archival and historical purposes.
07/2022 - 11/2022 This project mimicked the layout and design of the contemporary stats sections on the website, but used an entirely different dataset and structure on the backend.
Function & Responsibility Due to concerns with performance, the project had been postponed for a long time. The web application already had to deal with millions of daily visitors who accessed their data and stats for current Counter-Strike matches.
However, in consultancy with some of the seniors in the company, I built a stats section on the website that mimicked the design and functionality of the CS:GO stats section on the site, but utilized the legacy data from Counter-Strike 1.6. To avoid more load on the single MariaDB database, all the thousands of matches were pulled into memory on startup and parsed and analyzed on the fly, as we had a lot of free memory capacity on the application server.
I worked with the in-house graphics designer to create a web interface using custom SCSS that worked similarly to the existing stats section, while providing a nostalgic feel for users who had been using the site back in the 2000's.
Customer Groovy | Kotlin | Gradle HLTV.org Project The client used a monolithic infrastructure with upwards of 100 Refactorization of subprojects in Gradle. As Kotlin was used everywhere in the monolithic build project, it was seen fit to convert all Gradle files from Groovy to Kotlin as well as modernizing the entire build system with modern system Gradle practices such as lazy configuration and convention 04/2022 - 07/2022 plugins.
Function & Responsibility I worked on my own on the refactorization, although being able to consult with some of the people who had been developing and extending the build system up until this point.
Initially, the project was scoped to converting Groovy to Kotlin, a decision driven by aligning the language used across the monolith and to get rid of the ambiguity and implicitness of the Groovy language, as well as the lack of IntelliSense support for Groovy in our IDE's.
After this step was done, I migrated some of the old Gradle practices to new bestpractices in order to take advantage of newer caching features and incremental builds. I also streamlined and deduplicated a lot of code utilizing Gradle convention plugins.
Having finished the refactorization and modernization of the complex build system, I effectively worked as the in-house Gradle expert for the rest of my tenure at the company.
2018-08 - 2020-12
Customer Kotlin | Thymeleaf | Spring Boot | SNMP | CPSMS HAS Project The client needed a way to automatically alert technicians if critical SLA service or fatal errors happened in their network. They already had a system that handled these warnings, but no way of automatically notifying the relevant people.
08/2018 - 12/2018 To solve this, an SLA service was built which handled the administration of on-call technicians and their notifications.
Function & Responsibility I designed and developed the service myself, utilizing and integrating existing solutions that I had built for the client.
The service integrated with an existing Argus system that sent out SNMP messages which were decoded and sent out to on-call technicians if relevant. The technicians could interface with the service by responding via SMS or by visiting the web interface. The service also comprised a system to administrate who was on-call at which times.
Customer Kotlin | Java | React | Spring Boot | Websockets HAS Project To administrate maintenance tasks for the CTV headend, a task Headend task management system inspired by Asana in React with Spring Boot management as the backend was built.
01/2019 - 05/2019 Function & Responsibility I designed and built the app as an extension of their existing booking- and administration system built in Spring Boot. I utilized React as the frontend, and the interface automatically reacted to updates in realtime using Websockets.
The interface was designed with Asana as the inspiration, as the client had previously used Asana for task management, but needed more customized solutions to fit their needs. This included custom properties, the ability to notify customers affected by maintenance work via SMS, as well as integrating with existing CRM and booking systems to allow everyone in the organization to be aware of planned downtime and maintenance.
2016-01 - 2018-07
01/2016 - 07/2018 The booking and task administration was built using plain Java Servlets as well as JSP and jQuery for the frontend.
Function & Responsibility Initially, small tasks were automated with small Java apps, such as an integration with Asana tasks, automated label printing for sending out modems to customers and various quality-of-life improvements to existing software using integrations or browser extensions.
This later turned into a full-blown booking- and task administration tool that I designed, developed and deployed myself for internal use, and is still being maintained and used every day to this day.
Customer Java | Apache PDFBox | JavaFX HAS Project The ISP received nearly 1000 PDF electricity invoices every Automated PDF data quarter, which had to be manually manually reviewed one-by-one extraction in order to calculate a tax deductible.
01/2016 - 07/2018 The app extracted all this information automatically and output the correct tax deductible amount, turning a multi-week administration job into a 5-minute task.l Function & Responsibility I designed and built the app myself in cooperation with the accountant of the client to ensure that all rules related to the tax deductible were taken into account.
2016-01 - 2018-07
Customer Java Servlets | JSP | jQuery
2012-01 - 2012-06
Customer Java | Apache POI | JavaFX Anonymous Project A customer needed a way to automate tedious data entry into their Automation of data website which was imported daily in .Xlsx format from a supplier.
entry The solution was a JavaFX app where you could input the file, 05/2012 - 06/2012 some data about the column and row structure, and then import automatically to the webshop to update the stock.
Function & Responsibility I was tasked with the full development lifecycle of the app including communication with the client.
Akademisk baggrund
2024-11 - 2024-11