# Release Notes ## Summary This release brings a suite of new capabilities and polish across the platform. Users can now record manual expenses, enjoy smarter module suggestions during signup, and download invoices in bulk as PDFs. The mare cycle check and horse management interfaces have been refined, while numerous bugs and stability issues have been fixed, including improved filter persistence and clearer error messages. The UI for release notes has also been updated for easier access. ## Highlights - Bulk download of invoices as PDFs - Tailored module suggestions during signup based on stable type - New manual expense entry screen - Updated mare cycle check page with alphabetical sorting and copy buttons - Release notes button added for quick access to “What’s new” ## Features - **Force delete hidden horses** You can now permanently delete a horse that has been marked hidden, allowing you to clean up hidden records directly. - **Tailored module suggestions during signup based on stable type** The signup flow now suggests modules that match the selected stable type, making it easier for new users to choose the right features. - **Manual expense entry** A new manual expense screen lets you record expenses directly, with proper VAT handling and clear subject display. - **Client invoicing enhancements: date sorting, type filter, and mobile UI** Invoices can now be sorted by date, filtered by billable item type, and the status button group collapses into the filter dropdown on small screens, improving navigation on mobile devices. - **Release notes button added to UI** A release notes button now appears in the refresh dialog and on your profile page, giving quick access to the latest updates. - **Download multiple invoices as PDFs** You can now download individual invoices (including draft concepts) and use a new bulk download button to retrieve several invoices at once. ## Improvements - **Improved mare cycle check page** The mare cycle check UI no longer depends on the calendar, lists entries alphabetically by horse name, shows cycle type and full customer name, and adds copy buttons for notes and cysts. - **Rename release notes link to “What’s new” and fix URL handling** The release notes link now appears as “What’s new” in the update modal and profile page, and its URL is correctly tied to the current deployment. ## Fixes - **Backend updates and bug fixes** The system now uses an updated API generator and includes fixes for planning activities, horse detail errors, session token handling, and other stability improvements. - **Invoice item errors now highlighted in the relevant fields** Validation errors on invoice items are now displayed next to the specific field, helping you quickly locate and correct issues. - **Invoice fields retained when only manual items remain** Removing generated items and leaving only manual entries no longer clears required fields, preventing the “Customer uid: This field is required” error. - **Horse selector remains visible after editing invoice items** Adding or removing invoice rows no longer causes the horse selector to disappear, ensuring consistent data entry. - **Search input no longer loses keystrokes during URL updates** The horse search bar now retains characters you type even while the search term is being synchronized with the URL. - **Correct billing name displayed in subscription details** The billing name now appears correctly in subscription details, and changes to the primary invoicing contact are instantly reflected. - **Use updated horse search API for detailed info** Horse details are now fetched using the newer search_horse API, ensuring up‑to‑date information without relying on old endpoints. - **Action list filters persist across sessions** List filters are saved to local storage by default, so your filter settings remain after closing and reopening the app. - **Incomplete order warning limited to existing orders** The incomplete‑order message now only appears for saved orders, avoiding confusion when creating a new order. - **Planning activity selection respects sorted list order** The planning feature now correctly matches the last used activity against a sorted list, improving activity suggestions. - **Mare cycle checks table visible when filters are applied** When any filter is active, the mare cycle checks table displays instead of an empty state, letting you see filtered results. - **Correct DOM nesting on insemination route page** The insemination route page now has valid HTML structure, fixing illegal DOM nesting errors. - **Ignore harmless cache‑directory removal errors in Sentry** Sentry now skips non‑critical errors that occur when trying to delete a non‑existent cache directory. - **Signup modules field correctly handled as array** The signup process now interprets the modules field as an array of strings, fixing module selection handling. - **Admin invoice preview respects UI language** Invoice previews in admin views now use the interface language instead of forcibly switching to the invoice’s language. - **Apply table header class to <thead> for proper styling** Table header styling is now correctly applied to the <thead> element, ensuring consistent table appearance. - **Show error message when deleting a VAT percentage fails** If a VAT percentage cannot be deleted, an error message is now displayed instead of failing silently. - **Classify breeding order items by product type** Breeding order items now include a product_type field, allowing the system to distinguish shipping items without extra lookups. ## Docs - **Fix markdown formatting for release notes** Release notes now render correctly with proper markdown syntax. ## Other - **Increase error log depth for nested contexts** Error logging now captures deeper nested contexts, providing more detailed information for debugging. - **Add Claude project instruction file** An instruction file for the Claude AI project has been added to the repository. - **Extract reusable MetaItem component for invoice metadata** A helper component has been created to streamline repeated dt/dd markup in invoice meta sections. - **Reformat Claude markdown documentation** The Claude project's markdown file has been reformatted for better readability. - **Remove redundant ESLint plugin from Vite configuration** The duplicate ESLint plugin was removed, simplifying the Vite build setup and preparing for the upcoming Vite 8 upgrade. - **Eliminate manual JWT injection for authentication** Manual JWT injection has been removed now that authentication specifications are fixed. - **Upgrade build system to Vite 8 with Rolldown** The project’s build system has been upgraded to Vite 8, bringing faster production builds and updated plugin versions.