Skip to content
5 October 2026App 0370a50Technical details

Release Notes - Technical Details ​

Internal companion to RELEASE_NOTES.md. Not for customers.

  • Range: 728b92858c5b97d6d8da6d435b7d2d34afd1081b → 0370a503af87e81a48ed3aea3766e0cd6141318f
  • Generated: 2026-10-05 14:36 UTC
  • Merge requests: 48
  • Commits: 116 (0 without a merge request)

Merge requests ​

!2421 refactor: upgrade to React 19 ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2421
  • Author: Rein de Vries
  • Commits:
    • 115fd033 refactor: drop react-helmet-async for React 19 native metadata
    • 8e2de3bd refactor: migrate useStables and useActivityFiles to useApiPromisesState
    • 26d1ebad refactor: migrate the contact-duplicate pages to useApiPromisesState
    • 3f88496d refactor: drop optional chaining from memo dependency arrays
    • 1e363ae6 refactor: use useApiPromisesState across all ApiPromises call sites
    • 36456160 feat: add useApiPromisesState hook
    • 4361d5d7 fixup: fix(watch): replace watch subscription inside useEffect with the useWatch ho
    • 802e41fd fix: replace derived-state-via-effect with useMemo in 5 spots
    • 48bb4ac5 fix(watch): replace watch subscription inside useEffect with the useWatch hook
    • fb8fcbeb fix: replace watch() with useWatch() to fix react-hooks/incompatible-library
    • 169daf1c chore: suppress existing react-hooks compiler-rule violations
    • ed1242ab chore: bump eslint-plugin-react-hooks to v7
    • 031d3acd chore: upgrade to React 19
    • cb5a91f7 fix: replace ReactElement<any> with ReactElement after codemod
    • 4785cb3c chore: run types-react-codemod preset-19 on src

!2433 feat(reports): handle null future months in stable occupancy and bold current month ​

!2434 fix(horses): register departure when deleting or marking horse as deceased ​

!2436 feat(horses): QR code and NFC tag that open the horse in the app ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2436
  • Author: Michel
  • Commits:
    • eac1b8d9 feat(horses): write the QR link to an NFC tag on Android and iOS
    • 6ef29eaa feat(horses): add a QR code dialog with PDF download to the horse actions menu
    • e1dac76d feat(horses): add a public QR landing page that opens the horse in the app
    • cafa7733 chore(mobile): register the @capacitor/device native plugin
    • 447389a8 fix(horses): build public horse links with the frontend url in the mobile app

!2438 feat(activities): date dropdown and a single activity form for the compact and full modal ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2438
  • Author: Michel
  • Commits:
    • dd0a2c88 fix(activityEditor): adapt to React 19 types and lint rules
    • 4966fc90 fix(activityEditor): address MR review comments
    • e7552672 feat(activities): open the date dropdown when expanding from the compact date field
    • 961c9870 feat(activities): morph the compact activity modal into the full modal
    • 8d912450 refactor(activities): use the shared activity editor on all planning pages
    • e18ea9d5 feat(activities): share one activity form between the compact and full modal
    • b8418f8e feat(activities): open the full form from the date field in the compact activity form
    • 9c73cb4a feat(activities): move date and recurrence inputs into a dropdown in the full activity form
    • 4a071bce feat(activities): add date summary field with dropdown for date inputs

!2440 fix(subscription): translate 'Additional modules' label ​

!2441 Use inclusive end date when stopping or editing a recurring service ​

!2442 feat(contact): include business and person name when copying the address ​

!2443 fix(breedingPlans): use last order receiving date as last insemination date ​

!2445 feat(breedingPlanDetails): upload and remove a barrenness certificate ​

!2446 fix(feed): sort box numbers numerically in feed schedule ​

!2447 docs(claude): forbid Claude attribution in MR descriptions ​

!2448 refactor(activityEditor): replace deprecated Portal.Group with floating-ui portals ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2448
  • Author: Michel
  • Commits:
    • c8f744db refactor(ui): position popovers and organization selector with floating-ui
    • 4844dc28 refactor(ui): replace Headless UI anchor with floating-ui in DropdownMenu and SearchContact
    • 3dc8ef98 refactor(activityEditor): replace deprecated Portal.Group with floating-ui portals

!2449 feat(reports): rename KWPN export to Order Export ​

!2452 chore(openapi): regenerate client (horse note, refresh token, nullable occupancy) ​

!2453 fix(planning): use horse_uids instead of deprecated horse_uid on activities ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2453
  • Author: Gerben Morsink
  • Closes: #1724 Stop using deprecated horse_uid on v5 activities; use horse_uids
  • Commits:
    • d8a8db16 fix(planning): filter the action list on the stables of all horses of an activity
    • 2a812377 fix(planning): use horse_uids instead of deprecated horse_uid on activities

!2454 fix(webshop): require email in contact address modal ​

!2455 feat(users): add a role filter to the users list ​

!2456 fix(planning): skip the mare cycle check and stallion mount report without the breeding module ​

!2458 feat(horses): show selection checkbox when hovering the row ​

!2459 feat(inputs): add PhoneInput with country code hint for all phone fields ​

!2460 fix(subscription): show the actual payment result instead of assuming success ​

!2461 fix(rvo): reload report list when the horse filter is cleared ​

!2462 Chore/update open api 2809 ​

!2463 Refactor the horse details page ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2463
  • Author: Michel
  • Commits:
    • 02f71c0a fix(planning): avoid invalid li/p nesting in ActionListRow
    • 6e9bbcf3 feat(horses): add button in the activities tab
    • ffa8ad23 feat(horses): replace the start/end badges of planned items with bold text
    • 92c85c6b feat(horses): show the activity type category as a badge in the activities filter
    • 7c10e152 feat(horses): show the note as a blue callout in the general tab
    • b7b95ddd feat(horses): timeline, recurring services and facility reservations in the activities tab
    • b44698a6 feat(horses): show a label and dash when a horse has no note or warning
    • 71ba9fd5 feat(horses): hide the warning text and dragging in the activities tab
    • f6eb1d88 fix(date-range-picker): keep the start and end day of a day based quick select
    • 3ce71982 feat(horses): show a message in the breeding tab for stallions and geldings
    • e60aa81c feat(horses): show the care activities in the care tab
    • 6767ad04 feat(horses): filter the activities tab on activity type
    • cecc68a9 fix(horses): process the review of the horse details page
    • 4f395ca7 feat(horses): muted uppercase field labels and an amber warning callout in the general tab
    • 113dfbb1 feat(horses): open graph tags and preview image for shared horse links
    • 5fe613b1 feat(horses): share a horse directly from a compact modal with share options
    • 31f37fd3 feat(horses): show the horse details page in tabs
    • 74f7ea34 feat(financial): preselect a horse when adding a recurring service
    • 3c3dec30 feat(planning): load the action list activities for a custom date range
    • a2af2339 feat(ui): add tabs, flat tiles and other building blocks for the horse details page

!2465 Fix/invitation and verify email flow ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2465
  • Author: Rein de Vries
  • Commits:
    • b510950d fix(verify-email): treat the allauth 401 as a successful verification
    • 67d08c81 fix(invitation): show a pending-invitation ping on the mobile menu button
    • 2ffea449 fix(invitation): redirect back to the invitation after login

!2466 fix(webshop): match repeat order parent on breeding product type ​

!2467 fix(upload): pass serverless host as baseUrl so s3 presign works on mobile ​

!2468 Resolve "Random logout on reload: rotated refresh token is never persisted" ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2468
  • Author: Rein de Vries
  • Closes: #1728 Random logout on reload: rotated refresh token is never persisted
  • Commits:
    • b754d8ef fix(auth): only adopt a refresh token from another tab when it is the same user
    • 90cc6583 fix(auth): persist rotated refresh token and serialize refreshes across tabs

!2469 fix(shipping-product): trim trailing zero decimals on price ​

!2470 fix(rvo): merge stable/location columns and show movement counterpart in RVO report list ​

!2471 fix(rvo): update authorization guide to RVO's new machtiging design ​

!2472 fix(horsetelex): import birth date, sex, ids and height alongside pedigree ​

!2473 fix(activity-types): drop hidden roles and skip unchanged roles on save ​

!2474 fix(feed): rename feeding labels to feeding times ​

!2475 fix: remove the ts-ignores for image crop and base64 encode ​

!2479 fix(push): reset app badge and clear delivered notifications on app open ​

!2480 feat: more table sorting ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2480
  • Author: Rein de Vries
  • Closes: #820 Add sorting feature to several more tables
  • Commits:
    • 51e4280d fix(users): persist sort and filter state for the users list
    • 1781f7a7 feat(users): add sorting to the users table
    • 6ca289ac feat(contacts): add sorting to the contacts table
    • 99f50b2b feat(webshop): add sorting to the order list
    • d0b6c038 feat(payments): add sorting to the payments table

!2482 Enhanced order settings page ​

  • Merge request: https://gitlab.equinem.com/equinem/equiapp/-/merge_requests/2482
  • Author: Rein de Vries
  • Labels: Enhancement
  • Closes: #868 Create a new page for insemination stations/requester, #908 Search for stallion (by name) in the product list
  • Commits:
    • 13c8ee41 refactor(shopSettings): rename tab names
    • 93ce715b chore(shop): make the add button blue - primairy action
    • a6c9dca3 feat(shop): split breeding and shipping products in own tabs
    • 814323e6 feat(shop): filter and search breeding and shipping products
    • e5daf8a3 feat(shop): manage agents/insemination and semen collection stations in shop settings
    • 4b29b82d fix(navback): keep query params so filters survive the back link
    • 845e409e feat(shop): split shop settings into tabs

!2483 fix(activities): wrap breeding box number buttons so all boxes are visible ​

!2484 feat(contacts): group default shipping methods by country and warn on mismatch ​

!2485 multiple fixes for contact Merger ​

!2487 fix(horses): export date of birth and arrival as ISO dates ​

!2491 fix(organization): guard against missing me.stables in the organisation response ​

!2494 Chore/update open api 0510 ​

!2496 feat(breeding): split menu into breeding mares and breeding stallions ​

Left out of the customer release notes ​

OpenAPI schema refreshes and other changes with no customer-visible effect.

EquineM documentation