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 insertTicketWithPaymentIntent and tagPaymentIntentWithTicket helpers

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-admin 11 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 /timetables included, 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 getPaymentIntent carried on into a null dereference instead of stopping
    • Moved the database, Stripe and Twilio secrets out of the config files and into gitignored .env files, 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.authUser to req.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
  • 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.md and UPGRADE_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
  • 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:
  • 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 dev and prod app
  • Updated POS Ticket / Machine
    • Updated so that tickets with vehicles appear at the top
    • Updated to use a new version of Shorebird
    • Configured a dev and prod flavor
    • Updated to Flutter 3.22.0

hexa studios

mobile app and web developers

All rights reserved.