Коли виноградник ділиться — наприклад, тому що одна половина здається в оренду або засаджується новим сортом винограду — досі потрібно було видалити наявний виноградник і створити два нові. При цьому втрачалися всі повʼязані дані: завдання, повідомлення про події, облік часу.
Відтепер це можна зробити безпосередньо на карті: провести лінію через виноградник — і площа автоматично розрізається на дві частини. Обидва нові виноградники зберігають свій звʼязок з оригіналом — завдання, повідомлення про події та обліки часу залишаються.
Це звучить просто, але технічно було доволі складно. Логіка розділення полігонів має вміти працювати з усіма можливими формами: увігнутими площами, площами з отворами та граничними випадками, коли лінія проходить точно через кутову точку. Для цього ми використовуємо бібліотеку Turf.js на клієнті й додатково валідуємо результат на боці сервера.
У межах функції поділу ми переробили весь редактор площ. Точки переміщуються інтуїтивніше, маркери більші й краще видимі, а керування на сенсорних пристроях працює значно краще.
Найважливіші покращення з одного погляду:
Замість починати з нуля нові господарства тепер починають зі звичних виноградарських завдань: обрізка, підвʼязування, обламування листя, проріджування, захист рослин, скошування укосів і багато іншого. Типи будь-коли можна коригувати, доповнювати чи видаляти.
Ми уклали ці 47 типів разом із виноробами з Вахау, Бургенланду та Південної Штирії. Вони охоплюють увесь річний цикл і названі так, як це прийнято в німецькомовному виноградарстві.
У фоні відбулося велике технічне оновлення: Spring Boot 4 із Hibernate 7 на сервері, Angular 21 на панелі керування та Riverpod 3 у мобільному застосунку. Ці оновлення дають кращу продуктивність і дають нам змогу швидше розробляти нові функції.
Міграція на Spring Boot 4 була найбільшою технічною зміною від нашого старту — але вона вже окупається. Час запуску сервера скоротився вдвічі.
Для вас як користувачів через це нічого видимого не змінюється — але швидша основа дає нам змогу значно швидше постачати наступні функції.