A theatre booking system built on Sanity.io and SvelteKit, using Stripe for payments. Supports box-office bookings, discount codes, reports, and ticket scanning during the event.
Some complimentary tickets need to be handed out to large numbers of people, which is a bit tricky when they're all on the same email. Back-end functionality for exporting them as PDFs or individual images would be useful. (I don't really want to attach PDFs to emails because people will start printing tickets).
The exported plugins and setup scripts are being compiled by Vite, which is either unnecessary or causes actual problems (such as with the 'unplugin' icons vite plugin). It might make sense to rework this at some point.
Seat selection does not work in dev mode for child projects created with create-box-office, for some reason. The payloads are coming in correctly, it's the reactivity that's messed up.
The logs are full of Not found errors for a favicon (even though I thought I specifically removed any references to a favicon). It's filling the logs with mess.
It's currently not very easy to trace a charge back to a stripe invoice, especially if tracing of refunds is required. Some reference to the invoice should be added to the payment.
Sanity css is currently lumped in with some (but not all?) of the SvelteKit css, for some reason. The SvelteKit css shouldn't really be exported at all, and the sanity css should be put in a sensible place and re-exported cleanly. Relates to #8.
A number of transitive dependencies, including @floating-ui, @portabletext/toolkit, @svelteuidev, dijkstrajs and encode-utf8 fail to be resolved when running a dev server for the ticketing front-end in a spawned project. Manually installing the packages seems to solve the problem, but it shouldn't be necessary.
This might not be the case anymore, but deploying box-office for a new show, with a fresh database, was creating duplicate Stripe customers. This isn't great. (Especially if it blows everything up, but I can't remember if it does.)
There have been multiple instances of /api/invoice calls being executed multiple times, which ends up generating multiple emails and screwing up reporting, which is bad.
This is bad. We're bound to have rounding errors at some point, and Stripe expects everything in integer values anyway so we might as well do the smart thing and use integers internally.
A little checkbox on the checkout page to add emails to the theatre company's mailing list. Just store a boolean, then emails can be given to theatre company for manual addition after the show.
Loading the ticketing platform with URL parameters for 'show' and 'seats' should preselect the seats on-screen. The 'seats' parameter should be encrypted and processed on the server to allow for selecting reserved seats (assuming they aren't already sold).
The front-end seems to be starting a lot of incomplete payments, a lot of payments seem to to come in pairs - one incomplete one followed by a successful one. Requires further investigation.