# Release Notes ## Summary This release brings a major UI overhaul and several new tools to help you work faster and more accurately. Horses can now be accessed via QR codes or NFC tags, the horse details page is organized into tabs, and the activity editor has a unified form with a date dropdown. Additional sorting, phone input hints, and a role filter for users improve data handling, while numerous bug fixes enhance stability and reliability. ## Highlights - QR codes and NFC tags now open a horse directly in the EquineM app - Horse details page reorganized into easy‑to‑navigate tabs - Unified activity form with dropdown date picker and smooth view transitions - Order settings page redesigned with tabs, searchable products and station management - Phone number fields now show country code hints - User list includes a role filter for quick user segmentation ## Features - **Stable occupancy report now shows future months as empty and highlights the current month** Future months in the stable occupancy report are displayed as dashes, while the column for the current month is bolded, making it easier to spot current data. - **QR codes and NFC tags now open a horse directly in the EquineM app** You can generate a public QR code or write an NFC tag for any horse; scanning the code or tapping the tag opens the horse’s details in the app (or shows a link on browsers). - **Unified activity form with dropdown date picker** The activity editor now uses a single form shared between the compact and full view, with a dropdown that consolidates date and recurrence inputs, and smooth transitions between views. - **Copy address now includes business and contact names** Copying a contact’s address to the clipboard now also adds the business name and the person’s name for a complete address block. - **Upload and manage barrenness certificates in breeding plans** You can now attach, replace, or delete a barrenness certificate file (PDF/JPEG/PNG) to a breeding plan, stored securely on S3. - **Export renamed from KWPN to Order Export** The export option previously called ‘KWPN export’ is now labeled ‘Order Export’ for clearer naming. - **Added note and warning columns to horse export and improved occupancy handling** Horse data exports now include ‘note’ and ‘warning’ columns, and the stable occupancy report correctly handles empty values, showing a dash instead of an error. - **User list includes a role filter** You can now filter the users list by role, making it easier to locate employees or specific user groups. - **Hovering a horse row now reveals a selection checkbox** A checkbox appears when you move the cursor over a horse row, making bulk actions easier. - **Phone inputs now display country code hints** All phone number fields include a hint showing the correct country code, helping you enter valid numbers quickly. - **Horse details page reorganized into tabs** The horse details view now uses tabs to separate General, Activities, Care, Media, Breeding, Team, and Financial information, reducing clutter and improving navigation. New share modal, profile picture controls, and Open Graph tags enhance sharing. - **Additional table sorting enabled across key sections** Payments, Contacts, Users, and the webshop order list now support column sorting, making it easier to organize data. - **Order settings page redesigned with tabs, search and station management** The order settings now use a tabbed layout, include a searchable products list, and let you manage insemination stations and requesters in one place. - **Default shipping methods are now grouped by country** When setting a contact’s default shipping method, only options for that country are shown, and a warning appears if there’s a mismatch. - **Breeding menu reorganized into ‘Mares’ and ‘Stallions’ sections** The breeding menu now separates mare‑centric plans from stallion‑focused breeding orders, with dedicated pages and clearer navigation. ## Improvements - **Upgrade to React 19 for smoother performance and fewer UI glitches** The application has been upgraded to React 19, replacing outdated libraries and refactoring internal state handling. This reduces rendering issues and improves overall responsiveness. - **Activity editor now uses modern floating‑ui portals** Deprecated Headless UI portal components have been replaced with floating‑ui, improving compatibility and future maintenance. ## Fixes - **Automatic departure recorded when a horse is deleted or marked deceased** Deleting a horse or marking it as deceased now automatically creates a departure move, ensuring accurate movement history. - **Subscription page now correctly translates "Additional modules" label** The label on the subscription screen is now properly localized, removing the previous untranslated text. - **Recurring service end dates are now inclusive** When stopping or editing a recurring service, the end date now includes the selected day, preventing services from ending earlier than intended. - **Last insemination date now reflects the most recent order receipt** Breeding plans display the last insemination date based on the latest order’s receiving date, ensuring accurate information. - **Orders and mare cycle checks are now listed chronologically** On the breeding plan details page, related orders and cycle checks are sorted from oldest to newest for easier tracking. - **Feed schedule box numbers now sort correctly** Box numbers are sorted numerically rather than alphabetically, so box 12 appears after box 3 as expected. - **Activities now support multiple horses correctly** The activity system now uses the new ‘horse_uids’ field, ensuring activities appear under each associated horse and filters work across all linked stables. - **Email address is now required in the webshop contact address form** The contact address modal for webshop orders now validates that an email is entered, preventing submission errors. - **Mare cycle checks are hidden for users without the breeding module** When the breeding module is not active, the system no longer shows the mare cycle check or stallion mount report during activity planning. - **Subscription flow now displays real payment outcome** After a payment attempt, the app shows whether the payment succeeded or failed, instead of always assuming success. - **RVO report list refreshes after clearing the horse filter** When you clear the horse filter, the report list automatically reloads to reflect the current data. - **Invitation and email verification flow improved** Email verification now correctly handles a 401 response, pending invitations show a notification badge, and users are redirected back to the invitation after login. - **Repeat orders now correctly link to the original breeding product** The system now matches repeat orders to the proper breeding item even when the first order lacks a mare, fixing incorrect parent linking. - **File uploads now work on the mobile app** Presigned S3 URLs are correctly built on mobile, allowing photo uploads without errors. - **Random logout issue fixed by persisting rotated refresh tokens** Refresh tokens are now stored across tabs and persisted after rotation, preventing unexpected logouts when reloading the app. - **Shipping product prices no longer show unnecessary zeros** Prices are displayed without trailing zeros, e.g., ‘10.00’ becomes ‘10’, improving clarity. - **RVO report list now combines stable and location columns and shows movement details** The RVO notification list presents a clearer view by merging stable/location columns and displaying the counterpart movement, making it easier to understand arrivals and departures. - **HorseTelex import now includes birth date, sex, IDs and height** When importing from HorseTelex, these additional fields are now filled automatically, reducing manual data entry. - **Hidden activity roles are excluded and unchanged roles aren't resent** The activity type editor now automatically filters hidden roles and only submits role changes, preventing errors. - **Feeding labels renamed to feeding times** The Feed module now uses clearer wording – ‘Feeding times’ instead of ‘Feedings’ – for better understanding. - **Notification badge resets and cleared on app open** Opening the app now clears the notification count and removes delivered notifications, keeping badge state accurate. - **Breeding activity box numbers now wrap onto new lines** All box number buttons are visible even when more than six are present, improving usability. - **Contact merge wizard now shows validation errors and works on mobile** Form validation errors are displayed instead of failing silently, and dropdown page actions now submit correctly on mobile devices. - **Horse export dates now use correct ISO format** Date of birth and arrival are exported as proper ‘YYYY‑MM‑DD’ dates, fixing previous off‑by‑one and formatting errors. - **App no longer crashes if organization data lacks stable list** The code now safely handles missing ‘me.stables’ information, preventing crashes on profile pages. ## Docs - **Policy added to prevent Claude attribution in merge request descriptions** Documentation now requires that generated code attributions are not included in merge request or commit messages. - **RVO authorization guide updated to the new design** Documentation now reflects RVO’s latest “machtiging” UI, ensuring guidance stays current. ## Other - **Removed temporary TypeScript ignore comments from image handling code** The code now complies with the latest TypeScript and ESLint rules without disabling checks. - **Updated documentation link for the Estonia translation process** The Zod validation docs now point to the correct merge request for the Estonia translation.