← Back to Journal

Building a QR Check-in System for WordCamp Philippines

CommunityWordPressTech

One of the things I enjoy about organizing WordCamp is finding ways to make the event better—not just for attendees, but also for the volunteers working behind the scenes.

For WordCamp Philippines 2026, I wanted to improve one of the most important parts of the event experience: registration and check-in.

Instead of manually searching for attendees, checking their names against a list, and then preparing their badges, I wanted something much simpler:

Scan a QR code → check in the attendee → print their badge.

That idea eventually became CampTix Check-In, a self-hosted WordPress plugin I built specifically for WordCamp Philippines.

The problem with the usual check-in process

WordCamp uses CampTix to manage ticket registrations and attendee information. It works well for managing registrations, but I wanted a dedicated interface for the actual event-day check-in process.

The goal was to have something that volunteers could use without needing to navigate the WordPress admin interface or deal with a complicated workflow.

I also wanted the system to be independent from WordCamp.org itself.

Because WordCamp.org doesn't allow third-party plugins to be installed, I created a separate WordPress site dedicated to check-in. The system could then pull attendee information from the WordCamp site through the REST API or import it from a CampTix CSV export.

This gave me a local copy of the attendee information that we could use during the event.

Building CampTix Check-In

I started building the plugin around the basic check-in workflow.

Screenshot 2026-09-03 at 11 41 34 PM

The plugin includes:

The QR codes are also signed using HMAC-SHA256. This means the system can verify that a QR code was actually generated by the system and hasn't been modified or forged.

The basic flow became:

CampTix → Sync attendees → Send QR codes → Attendee arrives → Scan QR → Check in

image

The scanner runs directly in the browser using a camera, with visual and audio feedback for successful, duplicate, or invalid scans.

At this point, the system was already working pretty well.

But there was one missing piece.

I wanted the badge to print automatically

The scanner could check someone in.

The system could display their badge.

But I didn't want volunteers to have to click through another screen and manually print every badge.

The ideal experience was:

Scan the QR code, and the badge automatically prints.

This was the part I wasn't sure how to solve.

And this is where Jerico came in.

Enter Jerico and the missing piece

A couple of weeks before WordCamp Philippines, Jerico, Arvin John, and I were co-working at Jerico's office.

image

We were doing a few things together, including working on a laptop and going through some preparations for WordCamp. At some point, I mentioned that I was building a QR check-in system and that I wanted to experiment with automatically printing attendee badges after someone checked in.

Jerico immediately got interested.

As he later wrote in his own blog post "Jerico's blog post about the QR Check-in Auto-Printer" , he had already built something similar for an inventory system and knew that the concept was possible.

He quickly put together a proof of concept using a small thermal printer he had available.

The idea was surprisingly simple.

My check-in system would send the attendee's badge information to an HTTP endpoint. Jerico's side would receive that request and take care of printing the badge.

Instead of trying to make the WordPress site communicate directly with a printer, we separated the two systems.

CampTix Check-In → HTTP request → Local print server → Thermal printer

image

This turned out to be a much cleaner solution.

Jerico also made the printer endpoint configurable in the plugin, so we could change the destination without having to modify the code during the event.

That became the final piece that turned the check-in system into an actual registration workflow.

Testing a printer from my house

One of my favorite parts of this project was that we didn't even need to be in the same place to test it.

Jerico exposed his printer through an HTTP endpoint.

I could trigger a print request from my own location, and a physical sticker would come out of the thermal printer sitting in his office.

It was one of those moments where a simple idea suddenly became very real.

I could scan an attendee, send the badge information over the internet, and watch an actual badge being printed somewhere else.

That's when I knew we could make this work at WordCamp.

The hardware

For the event, we used a small thermal label printer setup.

The idea was intentionally simple and inexpensive. Jerico used a tablet running Ubuntu as the printer server, connected directly to the thermal printer through USB.

The printer server ran:

The setup was designed to be as close to plug and play as possible.

When the tablet boots, it automatically logs in, starts the print server, opens Firefox in kiosk mode, and waits for print requests.

The organizers also prepared a second printer as a backup, because the last thing we wanted was for a broken printer to stop registration.

What happens when an attendee arrives?

The final workflow looked like this:

1. Attendee receives their QR code

The system generates a unique, signed QR code and sends it to the attendee via email.

2. Attendee arrives at registration

They show the QR code on their phone or a printed copy.

3. Volunteer scans the QR code

The volunteer opens the QR Scanner on a tablet or phone.

4. The system verifies the QR code

The QR payload is decoded and the HMAC signature is checked.

5. The attendee is checked in

The system records the check-in timestamp.

6. Badge information is sent to the printer

The check-in system sends the attendee's badge information to the configured printer URL.

7. The badge prints

A few seconds later, the attendee has a physical name badge.

So the entire experience becomes:

Scan → Check in → Print → Hand over the badge

The badge itself contains information such as the attendee's name, company, WordPress.org username, social handle, and website, depending on the configured fields.

Seeing it work with 400+ attendees

The real test, of course, wasn't the proof of concept.

It was the actual event.

And it worked.

During WordCamp Philippines, we were able to use the QR check-in and automatic printing workflow for 400+ attendees.

There was something really satisfying about standing at registration and seeing the process happen repeatedly:

Scan. Beep. Check in. Print.

And then seeing the printed badges being worn around the venue.

What started as an idea on a co-working day had become a working registration system used by hundreds of people.

Why I built it instead of using an existing solution

There are already plenty of event registration and check-in systems out there.

But one of the reasons I enjoy WordCamp is that it gives us an opportunity to experiment and build things ourselves.

I wanted a system that was:

CampTix Check-In became exactly that.

The plugin stores attendee information locally and can synchronize from the official CampTix data using either CSV import or the WordCamp REST API.

It also has a fallback: if the configured printer endpoint is unavailable, the badge can still fall back to the normal browser printing workflow.

What's next?

Of course, there are still things I would like to improve.

For version 2, I would love to make the system even more self-contained.

One possibility is turning the printer server itself into the complete registration station.

The tablet already has a camera, so theoretically it could:

Scan QR → Check in locally → Print badge

without depending on the internet during registration.

Attendee data could be synchronized to the device before the event, and check-in data could be synchronized back to CampTix afterward.

That would also make it possible to run multiple independent registration stations.

It's something I'd love to experiment with at a future WordCamp.

More than just a plugin

Looking back, CampTix Check-In wasn't really just a plugin project.

It was a collaboration.

I built the check-in system, but the automatic printing part wouldn't have happened without Jerico.

What I originally thought was the missing piece of the project—printing—turned out to be something that Jerico was already experimenting with.

He didn't just help me fix a problem. He helped turn the idea into something we could actually use in production.

And that's one of the things I love about the WordPress community.

You can mention an idea while working together, someone says, "Yeah, we can probably do that," and suddenly you're building a weird little system involving WordPress, QR codes, REST APIs, tablets, HTTP requests, thermal printers, and a lot of experimentation.

Then, a few weeks later, it's printing badges for hundreds of people.

That's WordCamp.

Try it yourself

CampTix Check-In was built for WordCamp Philippines 2026, but I've made the project available as a WordPress plugin so it can potentially be adapted for other WordCamps and events.

The project is licensed under GPLv2 or later, consistent with WordPress plugin licensing.

The source code and documentation are available on GitHub:

CampTix Check-In: https://github.com/jhimross/camptix-checkin

And a huge thanks to Jerico Aragon for helping me solve the final—and probably most fun—piece of the puzzle: automatic badge printing.

Now I'm already thinking about version 2.

← Previous My Zero-Cost Static Blog Migration (Just a fun experiment) Next → Learning to Be Human Again in a Digital World