Technology Updates for FurSquared 2024
- 25 min read - Text OnlyYear-on-year, following 2023's success and pain points, FurSquared grew by 35%. This growth was possible for many reasons.
FurSquared 2024 was held at a new venue, the Hilton Milwaukee City Center. It had more hotel rooms, was accessible by public transportation and an airport, had a tremendous set of local food options, and there was plenty more to do outside of the venue property. We could not have done it without the fantastic partnership we had with the Hilton Milwaukee City Center events team, especially the director, Joel.
This convention, like any organization, is composed of many departments. In particular, my realm of influence reaches web technology, registration, vendors (also called "dealers"), volunteers, swag, finance, and artwork. I, in my role as a technologist, work to enable and lighten the burden for everyone around me in their mission to pull off a convention.
My work allowed many staff to enjoy their convention, rather than stress and burn out before and during it. Ergonomic technology inserted into the right places made a world of difference for staff and attendees.
And work I did — with over three hundred hours of expert contribution, I tackled the most distressing gaps in FurSquared 2023.
Even with that much time, I had to compromise. I was spending my own time, a precious and expensive resource to me, on this convention. I could not work on things I knew would not be delivered in time because my motivation to do more would be dependent on the success of my work.
Not everything I did was perfect. Instead, it was achievable within my time constraints and the resources of the convention. Every area had an incremental improvement of some sort. The technologies and concepts can be used again next year, refined to handle the greater volume of people while making life even easier for staff.
New features for 2024
I once saw another convention scan my driver's license to look me up. It was faster while also being more accurate than them manually transcribing my ID card, after all. Could I replicate that? Yes, I could!
It did break down when attendees registered with a typo in their name or birth date, never registered at all, or when multiple people had the same birth date. The partial match screen confused staff as it displayed everyone with the same first name, last name, or birth date.
Process and technology changes like this take days to design, implement, and test — all to replace the variable time it takes to scan a QR code on someone's phone.
This is merely one of the many enhancements that were in place for 2024. The rest can be categorized as attendee-facing (including vendors), staff-facing, or operational quality-of-life.
Staff-facing enhancements
Driver's license scanning, as described above, helped staff check in attendees quicker in the best case. We got scanners that could read the AAMVA DLID encoding on the back of US and Canadian driver's licenses. These scanners were then configured to pluck the relevant information (name, date of birth, address) and then send a simple delimited keyboard input with that information to a hidden text field.
Given my time limits, the DLID scanner functionality was shoehorned into the existing manual fuzzy search functionality. There was no signal to differentiate a single partial search result from a complete matched result, or to choose a complete result among many partial results.
Continuing with the theme of check-in enhancements, I added a new cash processing flow. Attendees would first pay and present their ID, then they'd get a QR code back to complete their registration. Their personal details would be pre-filled with their DLID info.
They may elect to use a convention computer instead. In that case we scan the QR code on a guest machine and put it in front of them.
Staff had a frontend dedicated to processing cash registrations. In short, it created a cash-voucher and pre-filled registration link in one. It then used the next new feature that came to 2024: thermal printing!
A basic USB ESC/POS thermal printer would print cash receipt and alerts. With a thermal printer, we could leave behind the age of duplicate-paper receipt books.
It also printed notices for badge upgrades, badge reprints, and a few other miscellaneous things.
When a badge upgrade occurred and it had already been printed, instructions would print to find and destroy the old and then print a new copy. If the attendee had their badge prior to the upgrade, it had instructions for that case too.
In the case of an intentional badge reprint, a notice would print to give to security to notify them of a duplicate going around.
When a reprint is returned for a refund, registration leads were now empowered to use a new frontend responsible for managing partial or full refunds. Each action was audited with the staff member responsible and a reason for the refund. This way, they had no reason to go into the Stripe administrative portal, which we want to keep limited. Additionally, a confirmation email would go out to attendees who received a refund.
Speaking of emails, all emails that go out now have Multipart MIME emails with HTML and plain text templates.
Lastly, Volunteers (department) got several new capabilities.
Attendees could fill out the form to volunteer during or after registration. After completing the form, they would immediately be invited to the Telegram group in an email, and volunteers leads would be emailed as well.
Additionally, leads could log time in the registration system. With a short form, they could document which attendee volunteered time, who on staff vouched for their time, how much time, and where they contributed time.
It automatically tracked eligible rewards, which allowed volunteering attendees to immediately go and pick up their rewards. This level of tracking enabled operations to hand out rewards to eligible volunteers and has given us a confident list of attendees that have earned their free attendance registration for 2025.
Attendee-facing enhancements
A completely new front-end! Rather than deal with OOP extending the multiple-parent-class Django forms as used in 2023, I opted into a React frontend. Not only did it give attendees a more modern and smooth means to register, but I could also use Stripe Element to handle payments, add dynamic volunteer sign-up form fields, and more.
Importantly, Stripe Element allowed us to operate within modern PCI requirements and take both Apple Pay and Google Pay as a payment method.
Another small change was to request on-site emergency contact info if available, as I saw Midwest FurFest use it in their form. Though, most attendees selected the option "I do not have an on-site contact".
After registration was complete, it would also automatically refresh to show when their badge was ready to pick up as well! The QR code was immediately available at the correct size for staff to scan.
Lastly, for the one or two attendees that want emojis and other language symbols, I added support for fallback fonts. I would group glyphs by which font they could be rendered by and then compose them together.
As a result, ギンジ🐾ターラノ was able to wear a badge with their intended name and pronouns.
Which is certainly an improvement over 2022's rendering which only supported the latin-1 charset and emojis.
Vendors had a new registration experience this year. It starts with a new acceptance email, which pre-fills the email address on registration when they arrive.
Once registered, they could immediately proceed to purchase their table spot, so long as they used the same email that they applied with.
This time, they received a clear and correct description of what they were paying for. Once purchased, their vending spot is secured, and they could add assistants at any time with "friend codes."
Once they were registered, like volunteers, vendors would be emailed a confirmation email with an invite link to a Telegram group for support.
If any vendors were forgetful in completing their approved vending purchase, an automated email will go out to remind them a day before their invitation expires.
Before the convention, I added a new pronoun option for those that go by "It". During the convention, a single attendee facing change was made. A previous contributor added "They / Their" as a pronoun option, when it should have been "They / Them." I corrected that and redeployed so I could reprint an attendee's badge as they had desired.
After the convention, I added a survey to go out to attendees that checked in with pre-filled form fields, such as their badge number and email address.
Operations
Financial operations, as dull as it sounds, is vital to get done correctly. In moving to Stripe Element, registration had to support web-hooks from Stripe, which requires a quick response time. This forced payment processing and several other backend workloads to using a task queue library like Celery.
This improved response times and allowed the frontend to poll for payment completion after Stripe Element redirects to the payment complete page. Additionally, each poll call verified the payment status with Stripe if the web-hook had not arrived yet.
The data model for financial activities was further enriched with line-item quantities, costs, discounts, coupons, payment methods, and so forth. This enabled registration to send detailed receipts for any type of transaction, be it attendance or vendors.
A small but bothersome thing has been the technical capability to sell different products at different times without scheduling someone to adjust the configuration at the intended time. Now, products like attendance and upgrades can be configured for different prices at different dates and times.
Additionally, products have quantity limits now! For example, we have a limited number of dinner spots we can offer for our super sponsors. When we run out of spots, the option no longer appears to attendees or those seeking to upgrade.
And, lastly, daily badges! They can have different designs to designate "Friday only" passes versus "Sunday only" passes, which are priced differently.
However, on Saturday, daily badges were printing Friday designs! Oops, a one-line addition to the payment processing handler was needed. It didn't copy the day value from the product to the registration.
Before the convention, I finished a suite of end-to-end tests. This gave me a reliable low-stress environment to make final tweaks and changes before the date when we had to handle 1700+ people on site. These tests ensured that complex flows like cash processing functioned without technical issues at the convention.
It was obvious that given the complexity of this software and the nature of everyone being a volunteer I could not rely on delegating manual QA to a person. Registration must be high quality and handle all edge cases gracefully.
These end to end tests were developed on Playwright, a multi-browser end-to-end test driver. If anyone is looking to do end to end tests, I highly recommend this! Playwright was straightforward to use and it really reduced my stress as a solo developer.
And, finally, a disaster recovery tool. FurSquared needed the capability to back up and restore registration and all of its information and dynamic files from one server to another. This tool was later used to move registration from a server tied to an individual account to a convention-owned account.
Reflection
Every enhancement and fix taught me more on how to run a convention smoothly, to empathize with staff and attendees of various circumstances, and to plan for and support a holistic operation.
I am relieved that despite the problems the new cash flow had (which will be discussed in the next article), we had no regressions in our overall throughput. Every team was set up for success in keeping their promises to attendees and vendors, and, in the end, I had only one on-demand code change to make during the convention.
We handled more people than I imagined. I thought maybe we'd break 1600. Nope, almost hit 1800! We had to rush-order supplies because of that!
It was thrilling in its own way to see everything mesh together without crashing, and to see the issues I imagined come up be swiftly resolved through the solutions I put in place.
Nearly every source of anxiety I found in 2023 was tackled by 2024.
Going forward, my work should be more sustainable. I will improve the issues found in 2024 (article to come soon) and seek to improve the lives of those around me in volunteers, vendors, and elsewhere. And beyond that, I will work towards supporting the scale I anticipate in 2026 and beyond.