Technology Updates for FurSquared 2024

- 26 min read - Text Only

Year-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.

huff-puff
Three hundred hours is a lot! And it is above and beyond what should be expected of any team member. I did all of that so I would not have to crunch during the convention. In that regard, I was successful.
cocktail
Much of the hard work has been done and life is much more tolerable for everyone now. Even if I only did around a hundred hours (a far more tolerable range) for next year, we should still be fine for 2026.
cheers
That said, there are plenty of things to incrementally improve without much risk. If you're interested in working with me, please reach out!

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.

Technology updates for 2024, a person is measuring the room with a laser device.

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!

scan-banana-sticker-beep

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.

QR codes worked so well last year. What was the problem?
peek
phone-surprise
All sorts of things. QR code being too big or small, the screen brightness, smudges and glare on the screens, people forgetting to bring it out or not finding it in their emails. On the other hand, a majority do have an ID of some sort with a code on the back to scan in the USA.
looking-ych
For those without a phone, or who cannot find their email, we can do a fuzzy lookup by name and birth date.
judges
One actually complained about how their QR code wasn't working. They never registered for this year and were trying to present last year's email to us.

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.

shocked
Not all scanners we purchased were of the exact model as advertised on eBay. I made a work-around configuration so the unsupported scanners could sometimes read the licenses.
i-guess
It might not surprise you, but not all states encode their DLID data in the same order. The scanners that had no DLID support would then output the raw data over the keyboard to the Chromebook, leading to a lot of confusion for the staff operator.

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.

Sounds like something to patch up next year.
notes

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.

watching-fight-1
This turned out to be a bad design choice and will be redesigned for 2025. I'll cover it more in the next article as to why.

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.

Example cash receipt with a QR Code

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.

ych-you-disappoint-me
Unfortunately, these instructions were not always followed, which led to some attendees having an upgraded badge that looked like a reprint effect.
Add more accessible training resources to the list!
reading

In the case of an intentional badge reprint, a notice would print to give to security to notify them of a duplicate going around.

shrug
Whether this was used or meaningful is something I'll ask going into 2025.

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.

An example refund email

Speaking of emails, all emails that go out now have Multipart MIME emails with HTML and plain text templates.

glamorous
We finally have HTML in our emails! This is huge for accessibility!

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.

A crop of a spreadsheet listing hours and free attendance

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.

oh-no
By the end, it became a lot of spaghetti code. Turns out, I am not all that great of a frontend developer, which is why I mitigated the risk of breaking things with end-to-end tests.
peek2
Again, I could really use some help in this particular area.

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.

dab
Though many tried to zoom into the QR code because it was small, and that gave scanners issues because the Zebra scanners don't like large QR codes.

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.

Ginji now has a badge that actually reads as ギンジ🐾ターラノー, as well as It/It as pronoun

Which is certainly an improvement over 2022's rendering which only supported the latin-1 charset and emojis.

sometimes-i-think-but-then-i-forget
That said, the character alignment isn't great across character sets. I wasn't sure at the time how to get the baseline from the font.

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.

Example email that went to vendors

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."

cash
Some have wished to bundle attendance and vending into one transaction. This is unfortunately not as simple as it may seem from the outside. Again, time limits and all that.
cooking
"Friend codes" would be automatically generated by selecting cryptographically random words from a large dictionary.
cooking-burning
I had to go through that list four times to filter out naughty words and acronyms like "html". And British English spellings of words.

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.

A reminder email for vendors that neglected to register

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.

for-science
I have a few thoughts on making a token list for pronouns, rather than single enumeration. Then some could say "She / They / It"

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.

A survey email with a button

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.

tired-banana-tea
This was fixed afterwards! I was too tired by Saturday morning to do any code investigation. There's a reason why I do so much upfront work. I cannot keep all the details in my head to do competent development when I am sleep deprived.
toaster
If there's any lesson to come from this, highly configurable systems are great when you need to solve problems in two minutes instead of three hours.

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.

trust-no-one
Last year, I delegated QA to another person. Unfortunately, of the 12+ test cases there were back then, they barely ran one of them and told me it was good to deploy. This led to several back-and-forth frustrated conversations with the affected parties, such as dealers / vendors about issues encountered while paying for their tables, which delayed our Dealers Den announcement to attendees.

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.

tripped
The convention revealed an edge case that should have been tested: using a card that refused payment followed by a card that succeeded in payment. It would have revealed the issue where names or options were not restored correctly upon refresh rehydration.

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.

ych-carry
A tip for conventions: please do not run critical convention operations on personal hardware or cloud accounts.

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.

toot-toot-choo-choo-train
Stick around, I've got some exciting ideas for 2026! Look forward to the next article where I'll go into what went wrong in 2024, ideas on how to resolve them, and the research I am doing for 2026!