Release Notes
Summary
This release brings a suite of new capabilities and refinements across planning, finance, and horse management. Users can now sync their agenda via iCal, enjoy faster loading with summary endpoints, and benefit from a redesigned expense interface and mobile‑optimized horse list. Several security, performance, and stability improvements further enhance reliability.
Highlights
- iCal calendar feed added for easy external syncing
- New TransPas facility reservation UI with edit and move actions
- Contact list now includes duplicate count, role badges, and better filters
- Mobile horse list optimized for single‑tap opening and scroll restoration
- WhatsApp invoice messages are personalized with the recipient’s name
Features
Add iCal calendar feed for activities Users can generate and manage iCal streams for their agenda, allowing easy syncing of activities with external calendars such as Google or Outlook.
Contact list now includes duplicate count, role badges, and better filters The overview shows how many duplicates exist, displays role badges under names, adds a role column and improves filter handling.
New TransPas facility reservation UI with dedicated edit modal and move actions TransPas reservations now have a custom edit form, hidden creation options, and a ‘move to facility’ action, streamlining reservation management.
Boarders can add their own horses and assign co‑riders Users with the appropriate rights can add horses they own and manage co‑riders directly from the horse page.
Redesigned Expenses UI with invoice creation and item allocation Expenses now show a ‘not invoiced’ badge, allow creating invoice items, and let users allocate costs to horses, customers or general categories.
Recurrence descriptions are now displayed in the selected language RRule text is translated using UI language strings, providing localized recurrence summaries.
Invitation flow prompts existing users to log in instead of signing up When an invitation email matches an existing account, the page prompts the user to log in instead of signing up, simplifying acceptance.
WhatsApp invoice messages now include the recipient’s name WhatsApp invoice notifications now greet the recipient by name in the appropriate language.
Allow inviting users without stables and show deleted charge in expense delete confirmation Invitations can be sent even when no stables are selected, and expense deletion dialogs now indicate which charge was removed.
File browser now supports folders, previews and sharing like SharePoint Horse file tiles include a folder hierarchy, rich previews, editable names/descriptions, and device sharing options.
Monthly feed report shows quantities, totals and can be exported to Excel The feed report now lists per‑horse quantities, aggregates totals and provides an XLSX export.
Assign tasks to specific staff members When creating a task, users can select a staff member to own the task.
Allow inviting users without stables and show deleted charge in expense delete confirmation Invitations can be created without selecting stables, and expense deletion dialogs now mention the removed charge.
Add invoice email field to contact forms Contacts can now have a separate email address for receiving invoices, leaving the regular email unchanged.
Employment form includes start date input When creating an employment record, users can specify the original employment start date.
Filter recurring services by customer The recurring services view now includes a customer filter to show services linked to a specific contact.
Improvements
Repeat orders now start from the last order as a base When creating a repeat order, the system pre‑populates fields using the most recent order, streamlining the repetition process.
Country selectors upgraded to searchable dropdowns with flags All country pickers now use a searchable component that shows country flags and returns undefined for cleared fields, improving usability and validation.
Open day actions menu by clicking header and hide empty column header on mobile In the planning calendar, the day actions menu opens via the header, and empty column headers are removed in mobile full‑day view.
Horse auto‑complete runs only on button press The external horse search is triggered by an explicit button, reducing unnecessary backend calls.
Mobile horse list now supports single‑tap opening and scroll restoration Tap opens a horse directly, selection starts only via the button, sticky bar shadow works, and navigation back restores scroll position.
Fixes
Show day‑part validation errors next to the correct row API errors are now displayed inline on the specific day‑part row, making it clear which entry has an issue.
Always display contact initials and use profile initials in sidebar Contact profiles now consistently show the initials field, and the sidebar avatar reflects the profile initials.
Disable currency editing on finalized invoices and refresh customer data The currency field is locked on a finalized invoice and changes to the customer automatically refresh related historic data.
Show warning if invoice sending isn’t confirmed and poll send status When finalising and sending an invoice takes long, the UI now warns users and polls the send status for updates.
Display a friendly 404 page for missing public invoices Users accessing an unknown public invoice see a clear ‘not found’ page, and the brand name typo is corrected.
Hide future semen stock in picklist after order shipping date Picklists no longer show semen collected after the order’s shipping date, preventing selection of unavailable stock.
Gracefully handle disallowed origins and allow shop domains Requests from unapproved origins now receive a clear 404 response and shop domains are accepted, preventing unexpected server errors.
Safely access browser storage to avoid crashes when blocked LocalStorage and SessionStorage access is wrapped to prevent SecurityError exceptions, keeping the app stable.
Lock phones to portrait orientation while allowing landscape on tablets Phones stay locked in portrait mode while tablets can rotate, matching device expectations.
Log missing related horse as warning instead of error in invoices When an invoice references a missing horse, the situation is logged as a warning, reducing false error alerts.
Do not report network failures from version check as errors Network errors during the minimum version check are logged as warnings, preventing unnecessary error reports.
Do not treat failed sound playback as an error Audio playback failures are now logged as warnings, avoiding noisy error tracking.
Fallback to original image when EXIF parsing fails If EXIF orientation cannot be read, the upload uses the original file and logs a warning.
Show activity form validation errors to the user instead of reporting them Input validation errors are now displayed inline on the form, improving user feedback.
Skip fetching stables when a user belongs to many organisations The profile page no longer issues a large batch of stable requests, preventing resource errors for super‑admin users.
Keep sticky page elements below the impersonation banner Sticky headers and sidebars now respect the banner height, ensuring content isn’t covered.
Fix IndexedDB cache hangs by closing connections on version change The API cache now properly closes old IndexedDB connections, preventing pages from getting stuck on loading.
Add missing KMAR phase label to horse phase selector The KMAR phase now appears in the horse phase list and UI components.
Box number field now validated as a number in horse edit form The edit form correctly parses the box number as a numeric value, fixing validation errors.
Saving a facility event without a horse preserves its slots Saving a facility event without selecting a horse now keeps any existing slots, preventing accidental data loss.
Host the RVO manure calculation brochure internally The manure calculation brochure is now served from within the app, ensuring the link remains functional.
Feed reports display translated quantity units Quantity measures in feed schedules are shown in the user’s language rather than cryptic abbreviations.
Set PWA manifest description to a non‑null string The manifest now contains a valid description field, removing browser warnings.
Rider filter in calendar limited to selected stable’s riders The default rider dropdown now shows only riders belonging to horses in the chosen stable, simplifying selection.
Require Accounting module to connect bookkeeping integrations Connecting Moneybird, Exact Online, Snelstart or Yuki now requires an active Accounting subscription, otherwise an upgrade prompt is shown.
Show password‑mismatch error on the repeat password field The signup form now highlights when the repeated password does not match the original.
Security
- Prevent token leakage in PDFs and block open‑redirect attacks Redacts tokens from PDF logs and blocks open‑redirect URLs, protecting user data.
Performance
Shrink native app size by removing unused startup images and sourcemaps Reduces native app download size by removing unused assets and sourcemaps, resulting in much smaller iOS and Android binaries.
Load horse summaries instead of full records on breeding screens Breeding‑related screens now request lightweight horse summaries, cutting load time from seconds to fractions of a second.
Load contact summaries instead of full contacts on breeding screens Breeding screens now fetch concise contact summaries, speeding up data loading.
Other
Enable R8 optimizer for Android builds The Android build now supports the R8 code shrinker.
Switch TypeScript module setting from CommonJS to ESNext The tsconfig module option was changed to ESNext.
feat(breedingPlans): filter on plans without agent / insemination station
Ignore benign ResizeObserver loop errors in Sentry ResizeObserver loop errors are filtered out to keep error tracking meaningful.
Update TypeScript target to ES2022 and load PDF worker from package tsconfig target set to ES2022 and PDF.js worker is now loaded from the library.