# Release Notes ## Summary This release introduces a major UI refresh and several behind‑the‑scenes upgrades. React 19 powers a smoother, more stable experience, while new features like QR/NFC linking and a tabbed horse details page streamline daily workflows. We also fixed numerous bugs around dates, payments, imports, and added useful UI enhancements such as sorting and better translations. ## Highlights - Upgrade to React 19 for smoother performance and stability - Add QR code and NFC tag to open a horse directly in the app - Redesign horse details page with a tabbed layout - Support multiple horses per activity using horse_uids - Show actual payment result for new subscriptions ## Features - **Stable occupancy report now shows placeholders for future months and highlights the current month** Future months display a dash instead of numeric data, and the column for the current month is bolded, making the occupancy view clearer. - **Add QR code and NFC tag to quickly open a horse in the app** Generate a public QR link, download a PDF, or write to an NFC tag; scanning opens the horse directly in the mobile app. - **Unified activity form with date dropdown for compact and full modals** The activity editor now uses a single form that smoothly transitions between the compact float and the full modal, with a date field that opens a dropdown for all date and recurrence options. - **Copy full contact details, including business and person name, to the clipboard** When copying an address, the clipboard now includes the business name and individual's name for complete contact information. - **Upload and remove a barrenness certificate in breeding plan details** You can now attach a PDF, JPEG or PNG barrenness certificate to a breeding plan, stored securely on S3, and remove it when needed. - **Rename KWPN export to Order Export** The export option is now labeled Order Export for clearer identification. - **Include note and warning columns in horse export** Horse XLSX exports now contain note and warning fields, allowing you to export additional annotations. - **Support multiple horses per activity using horse\_uids** Activities can now be assigned to several horses, appearing under each horse and respecting stable filters for all involved horses. - **Add role filter to the Users list** You can now filter users by role, making it easier to locate employees or other specific groups. - **Show selection checkbox on hover in the horse list** Hovering a horse row reveals a checkbox for quick multi‑selection. - **Add phone input with country‑code hint to all phone fields** Phone number fields now display a hint of the country code, simplifying international entry. - **Redesign horse details page with tabbed layout** Horse details are now organized into tabs (General, Activities, Care, Media, Breeding, Team, Financial) with improved sharing options, open‑graph preview, and streamlined navigation. - **Add column sorting to Payments, Contacts, Users and Webshop order list** Tables in these sections now support sortable columns, with Users list remembering sort and filter state. - **Revamp Order settings page with tabs and station management** Order settings are now split into tabbed sections, including a new stations page and searchable product lists. - **Group default shipping methods by country and warn on mismatches** When setting a default shipping method, only options valid for the contact’s country are shown, with a warning if selections differ. - **Separate breeding menu into mares and stallions sections** The breeding menu now has distinct sections for breeding mares (plans, cycle checks) and breeding stallions (breedings, orders, shipping, etc.), with updated routes and settings. ## Improvements - **Upgrade to React 19 for smoother, faster UI** The app now runs on React 19, dropping unused libraries, using native metadata handling, and adopting the new useApiPromisesState hook, resulting in more stable performance and fewer internal warnings. - **List related orders and mare‑cycle checks oldest first** The breeding plan details page now sorts associated orders and cycle checks chronologically, making it easier to follow the timeline. - **Use floating‑ui portals for popovers and dropdowns in the activity editor** The activity editor now relies on floating‑ui for positioning, improving the reliability of popovers and dropdowns. ## Fixes - **Automatically record a departure when a horse is deleted or marked deceased** Removing or marking a horse as deceased now creates a departure move, ensuring the horse’s history stays accurate. - **Translate the "Additional modules" label in the subscription page** The label is now correctly localized, fixing the missing translation issue. - **Correct end‑date handling for recurring services** Stopping or editing a recurring service now treats the end date as inclusive, fixing off‑by‑one errors in the UI and status messages. - **Show last insemination date based on the most recent order** Breeding plans now display the last insemination date from the latest order’s receiving date, with an explanatory tooltip. - **Sort feed box numbers numerically in the feed schedule** Box numbers are now ordered by numeric value, fixing the previous alphabetical ordering issue. - **Require an email address in the webshop contact address modal** The modal now validates that an email is provided, preventing submission errors. - **Hide mare‑cycle check and stallion‑mount reports when the breeding module is disabled** Users without a breeding subscription no longer see these reports, avoiding unnecessary prompts. - **Display actual payment result for new subscriptions** The subscription flow now redirects correctly to the payment provider and shows success or failure based on the real outcome. - **Refresh RVO report list after clearing the horse filter** The report list now reloads automatically, ensuring the displayed data matches the cleared filter. - **Improve invitation and email verification flow** Email verification now handles 401 responses gracefully, pending invitations show a badge, and login redirects back to the invitation. - **Fix repeat order linking for breeding products** Repeat orders now correctly identify their parent breeding product, preventing mismatched links. - **Enable file uploads on mobile by correcting S3 presign URLs** Mobile uploads now construct the correct base URL for S3 presign, allowing photos and files to be uploaded. - **Persist rotated refresh token to stop random logout** Refresh tokens are now saved and synchronized across tabs, preventing unexpected logout after a page reload. - **Trim trailing zero decimals from shipping product prices** Prices now display without unnecessary .00, offering cleaner price formatting. - **Merge stable/location columns and show movement counterpart in RVO report list** The RVO report list now combines stable and location information and clearly displays the related movement entry. - **Import birthdate, sex, IDs and height from HorseTelex alongside pedigree** HorseTelex imports now include additional attributes, providing a more complete horse record. - **Exclude hidden roles from activity type editing and avoid unnecessary saves** Hidden and admin roles are filtered out, and unchanged role lists are not sent, preventing errors. - **Rename feeding labels to feeding times for clarity** All references to "Feedings" are now labeled "Feeding times", improving terminology. - **Reset notification badge and clear delivered notifications when app opens** The app badge count is cleared on launch, ensuring it reflects only pending notifications. - **Wrap breeding box number buttons to display all boxes** Box number buttons now wrap onto multiple lines, allowing more than six boxes to be visible. - **Show validation errors and fix contact merge form submission** Contact merge now reports validation errors and correctly submits when accessed via mobile dropdown menus. - **Export horse dates of birth and arrival as proper ISO dates** XLSX export now uses YYYY‑MM‑DD format for birth and arrival dates, correcting previous month/day errors. - **Guard against missing stables in organization response** The app now safely handles responses lacking `me.stables`, preventing crashes. - **Open Pricing tab directly from service contract link** Clicking a service link now navigates to the Pricing tab in financial settings, improving navigation. ## Docs - **Update RVO authorization guide to the new design** Documentation now reflects the latest RVO authorization screen layout. ## Other - **Prevent Claude attribution in merge request descriptions** A new rule removes any generated‑by‑Claude line from MR or commit messages. - **Remove TypeScript ignore directives for image crop and base64 encode** Image processing code now complies with TypeScript without ignored errors. - **Update Estonia translation link in Zod configuration** Link points to the correct merge request for the Estonian translation.