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
373 comments

Comments navigation

Older comments
Newer comments
  1. PokerPhantom says:
    30. October 2025 at 23:18

    https://t.me/s/Beefcasino_rus/57

  2. MichaelSpers says:
    31. October 2025 at 04:37

    https://t.me/s/ud_MrBit/48

  3. MichaelSpers says:
    31. October 2025 at 05:51

    https://t.me/s/ud_Kent/53

  4. MichaelSpers says:
    31. October 2025 at 07:06

    https://t.me/ud_MrBit/45

  5. MichaelSpers says:
    31. October 2025 at 08:20

    https://t.me/ud_Riobet/46

  6. MichaelSpers says:
    31. October 2025 at 09:36

    https://t.me/s/ud_Daddy/47

  7. MichaelSpers says:
    31. October 2025 at 10:56

    https://t.me/ud_Irwin/56

  8. MichaelSpers says:
    31. October 2025 at 12:16

    https://t.me/s/ud_Pin_Up/55

  9. MichaelSpers says:
    31. October 2025 at 13:36

    https://t.me/ud_Leon/62

  10. MichaelSpers says:
    31. October 2025 at 14:56

    https://t.me/ud_Daddy/45

  11. MichaelSpers says:
    31. October 2025 at 16:15

    https://t.me/s/ud_Drip/53

  12. MichaelSpers says:
    31. October 2025 at 17:35

    https://t.me/s/ud_Gizbo/51

  13. MichaelSpers says:
    31. October 2025 at 18:55

    https://t.me/?ud_1Go/60

  14. MichaelSpers says:
    31. October 2025 at 20:12

    https://t.me/ud_Kent/48

  15. MichaelSpers says:
    31. October 2025 at 21:27

    https://t.me/s/ud_Leon/59

  16. MichaelSpers says:
    31. October 2025 at 22:41

    https://t.me/ud_Drip/64

  17. MichaelSpers says:
    31. October 2025 at 23:55

    https://t.me/ud_Legzo/62

  18. RoyalFlusher says:
    1. November 2025 at 00:55

    https://t.me/s/Beefcasino_rus/59

  19. MichaelSpers says:
    1. November 2025 at 01:10

    https://t.me/ud_Pokerdom/44

  20. MichaelSpers says:
    1. November 2025 at 02:28

    https://t.me/s/ud_Pokerdom/47

  21. MichaelSpers says:
    1. November 2025 at 03:42

    https://t.me/ud_Booi/51

  22. MichaelSpers says:
    1. November 2025 at 04:53

    https://t.me/ud_1xSlots/52

  23. MichaelSpers says:
    1. November 2025 at 06:05

    https://t.me/s/ud_GGBet/48

  24. MichaelSpers says:
    1. November 2025 at 07:19

    https://t.me/s/ud_Gama/55

  25. MichaelSpers says:
    1. November 2025 at 08:31

    https://t.me/s/ud_Vulkan/49

  26. MichaelSpers says:
    1. November 2025 at 09:44

    https://t.me/s/ud_Legzo/62

  27. MichaelSpers says:
    1. November 2025 at 10:57

    https://t.me/s/ud_MrBit/49

  28. MichaelSpers says:
    1. November 2025 at 12:12

    https://t.me/ud_Lex/49

  29. MichaelSpers says:
    1. November 2025 at 13:36

    https://t.me/s/ud_1Go/36

  30. MichaelSpers says:
    1. November 2025 at 14:54

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

  31. MichaelSpers says:
    1. November 2025 at 16:07

    https://t.me/ud_Gizbo/24

  32. MichaelSpers says:
    1. November 2025 at 17:07

    https://t.me/s/Ud_GAMa

  33. MichaelSpers says:
    1. November 2025 at 18:24

    https://t.me/s/UD_iRWIn

  34. MichaelSpers says:
    1. November 2025 at 19:40

    https://t.me/s/uD_CASinO_X

  35. MichaelSpers says:
    1. November 2025 at 20:49

    https://t.me/s/uD_1XBET

  36. MichaelSpers says:
    1. November 2025 at 21:55

    https://t.me/s/UD_BOoI

  37. HighRollerMage says:
    2. November 2025 at 01:08

    https://t.me/official_1win_aviator/38

  38. MichaelSpers says:
    2. November 2025 at 01:08

    https://t.me/s/Ud_pIn_up

  39. MichaelSpers says:
    2. November 2025 at 02:12

    https://t.me/s/UD_pinCo

  40. MichaelSpers says:
    2. November 2025 at 03:13

    https://t.me/s/Ud_catcasINo

  41. ChipWhisperer says:
    2. November 2025 at 03:56

    https://t.me/s/official_1win_aviator/68

  42. MichaelSpers says:
    2. November 2025 at 04:17

    https://t.me/s/uD_stArda

  43. MichaelSpers says:
    2. November 2025 at 05:25

    https://t.me/s/Ud_KEnT

  44. MichaelSpers says:
    2. November 2025 at 07:40

    https://t.me/s/ud_1XsLOtS

  45. MichaelSpers says:
    2. November 2025 at 08:44

    https://t.me/s/uD_fRESH

  46. MichaelSpers says:
    2. November 2025 at 09:50

    https://t.me/s/ud_voDkA

  47. Caseydrusy says:
    2. November 2025 at 11:22

    https://t.me/s/tf_1win

  48. TracyDub says:
    2. November 2025 at 13:20

    https://t.me/s/Top_bk_ru

  49. StevenGok says:
    2. November 2025 at 13:44

    https://t.me/s/kta_1win

  50. StevenGok says:
    2. November 2025 at 14:45

    https://t.me/s/Top_bk_ru

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.