Change Log
Introduction
This documents aims to detail all the changes that have been made across the Tory Ferry platform.
Changes
Stripe Metadata Update | 2026-07-25
API
- Stripe PaymentIntents are now tagged with the ticket id, ticket ref, user id and payment method
- Payments are traceable back to a ticket from the Stripe dashboard for every ticket, not just ones that complete payment
- All 8 PaymentIntent creation flows now go through the same
insertTicketWithPaymentIntentandtagPaymentIntentWithTickethelpers
App and API Overhaul | 2026-07-22
App
API
Huge Update
- API:
- Upgraded the whole dependency stack to match the Arranmore API - Express 4 to 5, MongoDB 4 to 7, Stripe 10 to 19,
firebase-admin11 to 13, react-email 1 to 6, TypeScript 5.3 to 5.8. Node 20.19+ is now required - Migrated the v1 controllers off the MongoDB callback API that was dropped in driver 5 - 46 call sites. On the new driver those requests hung forever with no error,
GET /timetablesincluded, which the app calls on every launch - Fixed crashes found along the way:
- Cancelling a sailing with tickets on it crashed the API and emailed nobody - the cancellation email was being called with one argument against a four-argument signature
- An unknown user on
getPaymentIntentcarried on into a null dereference instead of stopping
- Moved the database, Stripe and Twilio secrets out of the config files and into gitignored
.envfiles, with a documented.env.example- This uncovered a dotenv ordering bug the hardcoded values had been masking - the config was read before the env file had loaded
- The old credentials are still in the git history and need rotating
- Error reporting added via Sentry and Bugsink, along with Loki log shipping and a request logger
- The auth token moved from
req.body.authUsertoreq.authUser- Express 5 leaves the body undefined on GETs, which would have 500'd every authenticated ticket read - Added a local test harness - 88 v2 routes are probed for the Express 5 upgrade and all nine email templates are rendered
- Upgraded the whole dependency stack to match the Arranmore API - Express 4 to 5, MongoDB 4 to 7, Stripe 10 to 19,
- App:
- Fixed the sold-out guard - it compared seats against a car count, which is always 0 on Tory, so passengers could be added to a full sailing with the Buy button still live. Only the server-side check at payment stopped it
- The ticket card now shows the price actually paid rather than recalculating it on the phone, so discounts and islander rates match the receipt
- Fixed tickets greying out 30 minutes before departure instead of after - the grace period was added to the wrong side, so the QR code read as expired exactly when the crew needed to scan it
- Free passenger bookings now go through the normal booking path - they were being sent to a reservation endpoint that doesn't exist in the API and failed with "Reservation Failed"
- Free baskets are re-priced against the server price list before a ticket is issued, so a spoofed zero total can't mint a valid ticket
- The genuinely free fares are islander children under 14 - the smartpass is charged for
- Timetable parsing is now typed and guarded - one bad record used to take the whole timetables page down instead of being skipped
- Translations now come from Tolgee as the source of truth, with a pull script that runs before a build
- Now targeting Android 16 (API 36) ahead of the Google Play deadline on 31 August 2026
- Added a Maestro device test suite - four flows passing on iOS 26.2 and Android 16
- Wrote up the Tory/Arranmore parity audit and the upgrade in
PARITY_WITH_ARRANMORE.mdandUPGRADE_NOTES.md
Email Update | 2026-06-22
API
- Removed "All tickets are non-refundable but fully transferable" from the cancellation emails
API Updates | 2026-06-13
API
Kiosk
- Fixed a kiosk timezone bug - the weekday was worked out on the server's UTC clock, so a date picked at midnight rolled back a day and returned the wrong timetable
- Ticket history now records who made the change, and sorts in the right order
API Updates | 2026-05-31
API
- Email logging now includes the ticket reference and the recipient address
App Update | 2026-05-01
App
- Updated to the latest Stripe plugin
App and Kiosk Update | 2026-04-29
App
Kiosk
- App:
- Updated Firebase Auth for reCAPTCHA 6.5.0
- Improved profile editing
- Kiosk:
- Updated to the latest Next.js version
Admin Reroute Functionality | 2025-10-23
Admin
API
- Added reroute functionality to the Admin panel
- Added all reroute API endpoints
- When rerouting a ferry, no emails are sent, just marked as "Requires Attention"
- Added cancellation - "Mark as Requies Attention" to the cancellation panel
App Declaration Update | 2025-10-07
App
- App Financial Features Declaration Completed
Web and Admin Updates | 2025-07-25
Admin
- Added a new git branch for admin
Web and Admin Updates | 2025-06-18
Admin
Web
API
Kiosk
Huge Update
- Server Updates:
- Moved servers from Heineken to Rex (Hetzner)
- Deployed using CI/CD pipeline
- Moved from bitbucket to GitHub
- POS Devices:
- Added login functionality to the POS devices
- Each device has a device_id registered in POS Devices tables
- Always included in the POS headers
- Improved the Revenue APIs
- POS devices can now print out the full data
- Added login functionality to the POS devices
- API:
- Promo Code functionality exists in the API
- Ready for Kiosk deployment
- Device IDs
- Revenue is available in admin and per device
- Admin Panel:
- Brought the admin panel in line with latest version, complete rewrite.
- Updated the admin panel update functionality
- Only makes changes to specific fields in the ticket
- Added the "Push To Device"
- Tickets can be push from admin
- Tickets can be picked up on the admin till
- Web:
- Translated website to Gaeilge
- Full translations can be accessed: Hexa Translations
- Kiosk Updates:
- Removed all references to snow in the kiosk
- Added a preferred payment method when selecting the payment device from Stripe
App Update | Up to 2024-10-09
App
- Support for iOS Dark and Tinted Icons and iOS 18.0
- Support for Themed Icons on Android
- All Flutter plugins up to date (Flutter v3.24.3)
App, Admin & API | Up to 2024-07-10
App
POS
- Updated App
- Updated styles for Stripe
- Target Android Version 34
- Configured a
devandprodapp
- Updated POS Ticket / Machine
- Updated so that tickets with vehicles appear at the top
- Updated to use a new version of Shorebird
- Configured a
devandprodflavor - Updated to Flutter 3.22.0