ph91.de
  • Home
  • About me
  • Categories
    • Software Development
    • New Zealand
    • Music
    • Tech & IT
    • Sports
    • Dublin
    • Junk
  • Contact
  • Disclaimer
ph91.de
ph91.de
  • Home
  • About me
  • Categories
    • Software Development
    • New Zealand
    • Music
    • Tech & IT
    • Sports
    • Dublin
    • Junk
  • Contact
  • Disclaimer
action adventure beach clouds
  • Software Development

Creating “Windwarner”

  • 2. January 2021

1. Motivation

The initial start of the project was at the beginning of 2019. I was looking for a sparing project which would help me getting hands on experience in Microservices, Spring Boot, Docker and Cloud. As usual, windsurfing proved to be a good “business” domain. The concept behind Windwarner is the following:

  • WindwarnerJobs
    • Get warned about good conditions (minimum windspeed and optionally minimum temperature) on your favorite windsurfing spots via email. You can chose from a list of data providers which can be used to obtain weather conditions.  You can configure arbitrary number of jobs for different spots. Each job is associated with a schedule (All Week, After-work, Weekends). You have the possibility to snooze jobs for specific time-periods e.g. when you are on holidays or not free on a specific day.
  • WindCalendarConfigs
    • The concept is similar to WindwarnerJobs but this time for weather forecasts. You can configure minimum weather demands for different spots at your favorite data provider. Windwarner will provide you your personal subscribable calendar endpoint which can be included in all major calendar applications. The format used is iCal which is the calendar standard. Your mail program will regularly check the endpoints which will keep you on top of all wind forecast stuff.

From the start, the architecture/technologies were kind of pre-selected as this project should also be a training on things which are useful for my professional life (no PHP). Moreover, the interface between the application and the user should be as small and as standard as possible which makes a lot of sense in my opinion. What use would it have to implement a custom smartphone/tablet applications/browser add-on with custom notifications?

The problem of informing a person about an event is solved: Messaging (Email)   

The problem of organising your appointments in the future is solved: Calendar (iCAL)

The chance that a device (seamlessly) supports email or calendars is much higher than the chance that you can install your custom app on it. The only custom part left is an easy user-interface which handles RBAC and CRUD on WindwarnerJobs and WindCalendarConfigs.

 

2. Architecture

Created with the C4 best practices in mind. Check the C4 diagram legend here.

System Diagram
Container Diagram
Deployment Diagram

3. Implementation

Stack for Microservices

  • Maven
  • Java 14
  • Spring Boot with several starters
  • Liquibase
  • Quartz Scheduler
  • Caffeine Cache Implementation
  • Springfox
  • biweekly for iCal
  • openAPI client generator
  • Google Jib
  • Testcontainers for MySQL-DB in integration tests

Stack for wordpress plugin

  • PHP
  • WordPress-API
  • Select2 for dynamic spot search
  • Firebase PHP-JWT
  • HTML, JavaScript and CSS

4. Operations

After initially trying out AWS (Fargate + RDS), I soon stopped that after the costs rose quickly and were just too much for a non-profit side-project. As I already host my blog, my personal Jenkins, Kanboard and some other stuff on Hetzner Private Cloud,  I registered another Hetzner instance for Windwarner.  The smallest instance is enough to run two Spring Boot Docker containers as you can see here.

docker stats

The prize of just 2,96€ per Month for a small server is unbeatable. Of course, you don’t have the fully managed experience which you’d have in AWS but the prize-tag of that is just unreasonable for a non-profit side project of that scope. As a comparison, the two small services only cost 0.68€ per day on AWS Fargate. Route53, VPC and other necessary helper services would increase it even more. 

Hetzner Dashboard

Necessary steps for operation:

  • Install docker and docker-compose
  • Installation of nginx reverse proxy with let’s encrypt
    Docker-compose for NGINX
  • Create DNS entries for subdomains which point to the static IP of the Hetzner Server
  • Enable auth for private AWS ECR repository in order to pull the Windwarner docker images
  • docker-compose up -d 😎

5. Demo

select2 for SpotSearch
WindCalendar integrated in iPhone
WindCalendar integrated in iPhone
Automatic Siri integration
Windwarner Wordpress Plugin
Windwarner Warning Email
Related Topics
  • microservices
  • spring boot
  • windwarner
Philipp

Previous Article
  • Allgemein
  • Software Development

Convert to degree to direction (the beautiful way)

  • 15. August 2020
  • Philipp
View Post
Next Article
  • Software Development

wpDataTables Hack: Default to current year

  • 23. January 2021
  • Philipp
View Post
369 comments

Comments navigation

Older comments
Newer comments
  1. Geraldkiz says:
    10. November 2025 at 21:19

    https://t.me/GGBet_egs/15

  2. Geraldkiz says:
    10. November 2025 at 22:26

    https://t.me/s/Jet_egs/16

  3. Geraldkiz says:
    10. November 2025 at 23:32

    https://t.me/s/Pinco_egs/16

  4. Geraldkiz says:
    11. November 2025 at 00:40

    https://t.me/Martin_egs/10

  5. Geraldkiz says:
    11. November 2025 at 01:45

    https://t.me/Gama_egs/12

  6. Geraldkiz says:
    11. November 2025 at 02:50

    https://t.me/s/Leon_egs/16

  7. Geraldkiz says:
    11. November 2025 at 03:52

    https://t.me/s/Rox_egs/11

  8. Geraldkiz says:
    11. November 2025 at 05:00

    https://t.me/Gama_egs/13

  9. Geraldkiz says:
    11. November 2025 at 06:05

    https://t.me/Fresh_egs/12

  10. Geraldkiz says:
    11. November 2025 at 07:09

    https://t.me/PlayFortuna_egs/4

  11. Geraldkiz says:
    11. November 2025 at 08:15

    https://t.me/s/Gizbo_egs/7

  12. Geraldkiz says:
    11. November 2025 at 09:21

    https://t.me/R7_egs/14

  13. Geraldkiz says:
    11. November 2025 at 10:31

    https://t.me/s/Booi_egs/11

  14. Geraldkiz says:
    11. November 2025 at 11:47

    https://t.me/s/Gama_egs/3

  15. Geraldkiz says:
    11. November 2025 at 12:58

    https://t.me/s/Daddy_egs/7

  16. Geraldkiz says:
    11. November 2025 at 14:11

    https://t.me/Gama_egs/18

  17. Geraldkiz says:
    11. November 2025 at 15:26

    https://t.me/Pinco_egs/18

  18. Geraldkiz says:
    11. November 2025 at 16:34

    https://t.me/s/Kometa_egs/6

  19. Angelvub says:
    11. November 2025 at 18:06

    https://t.me/va_1xbet/17

  20. AllInAce says:
    11. November 2025 at 18:06

    https://t.me/s/iGaming_live/4686

  21. Angelvub says:
    11. November 2025 at 19:32

    https://t.me/s/va_1xbet/3

  22. Angelvub says:
    11. November 2025 at 20:53

    https://t.me/s/va_1xbet/19

  23. Angelvub says:
    12. November 2025 at 00:24

    https://t.me/va_1xbet/20

  24. Angelvub says:
    12. November 2025 at 01:31

    https://t.me/s/va_1xbet/6

  25. Angelvub says:
    12. November 2025 at 03:35

    https://t.me/va_1xbet/6

  26. Angelvub says:
    12. November 2025 at 04:41

    https://t.me/va_1xbet/11

  27. Angelvub says:
    12. November 2025 at 05:54

    https://t.me/s/va_1xbet/10

  28. Angelvub says:
    12. November 2025 at 08:04

    https://t.me/s/va_1xbet/20

  29. Angelvub says:
    12. November 2025 at 09:08

    https://t.me/va_1xbet/19

  30. BennettTwins says:
    12. November 2025 at 10:26

    https://t.me/surgut_narashchivaniye_nogtey/14

  31. BennettTwins says:
    12. November 2025 at 11:40

    https://t.me/s/surgut_narashchivaniye_nogtey/3

  32. BennettTwins says:
    12. November 2025 at 12:54

    https://t.me/surgut_narashchivaniye_nogtey/18

  33. KennethRhish says:
    12. November 2025 at 13:56

    https://t.me/s/rating_online

  34. KennethRhish says:
    12. November 2025 at 15:22

    https://t.me/s/ah_1xbet/14

  35. KennethRhish says:
    12. November 2025 at 16:43

    https://t.me/ah_1xbet/5

  36. KennethRhish says:
    12. November 2025 at 18:00

    https://t.me/s/ah_1xbet/22

  37. KennethRhish says:
    12. November 2025 at 19:17

    https://t.me/s/ah_1xbet/2

  38. KennethRhish says:
    12. November 2025 at 20:35

    https://t.me/s/ah_1xbet/12

  39. KennethRhish says:
    12. November 2025 at 21:45

    https://t.me/s/ah_1xbet/7

  40. KennethRhish says:
    12. November 2025 at 22:54

    https://t.me/s/ah_1xbet/19

  41. KennethRhish says:
    13. November 2025 at 01:10

    https://t.me/ah_1xbet/9

  42. KennethRhish says:
    13. November 2025 at 02:22

    https://t.me/s/ah_1xbet/4

  43. KennethRhish says:
    13. November 2025 at 04:38

    https://t.me/ah_1xbet/20

  44. KennethRhish says:
    13. November 2025 at 07:10

    https://t.me/s/Best_rating_casino

  45. RouletteRogue says:
    13. November 2025 at 11:31

    https://t.me/reyting_topcazino/19

  46. KennethRhish says:
    13. November 2025 at 14:15

    https://t.me/topcasino_rus/

  47. EltonSpoib says:
    13. November 2025 at 21:18

    https://t.me/top_ratingcasino/2

  48. EltonSpoib says:
    13. November 2025 at 22:28

    https://t.me/a_Topcasino/7

  49. EltonSpoib says:
    13. November 2025 at 23:43

    https://t.me/a_Topcasino/3

  50. EltonSpoib says:
    14. November 2025 at 01:58

    https://t.me/a_Topcasino/2

Comments navigation

Older comments
Newer comments

Leave a Reply

Your email address will not be published. Required fields are marked *

ph91.de
Blog by Philipp Schreitmüller

Input your search keywords and press Enter.