Week 3 was where development met real-time pressure. I dove into implementing the QR code scanning workflow, translating an abstract idea into a working feature that users could interact with. At the same time, I stayed on call for live system operations, tackling issues as they surfaced. That constant switch between building and troubleshooting pushed me to think not only about functionality, but also about how resilient features need to be in real-world conditions.

Building the QR Scanner Workflow

The QR scanner was designed to integrate seamlessly into the app, triggered from the upper-right button. Once activated, it follows a structured sequence: scan the QR, parse the JWT, extract the PUID, retrieve the corresponding record in the database, and mark attendance. For parsing, I used the jwt_decoder library, with the JTI field serving as the critical link to PUID documents in CouchDB. The pipeline now extracts that identifier, handles parsing errors gracefully, and ensures scans never fail silently. With this structure, the scanner reliably connects each scan to the correct participant performance.

Database Integration and Attendance Marking

On the database side, I worked with the puid: partition to retrieve event, performance, and player details. Once found, the data is passed to the PerformanceRepo, which manages attendance transitions. Attendance now shifts cleanly from absent to queue, complete with timestamps for auditing, while duplicate entries are blocked. These safeguards may be invisible to end users, but they play a crucial role in ensuring accuracy and maintaining trust in the system’s records.

Supporting Live Operations

Alongside development, I continued supporting the system during live use, which provided valuable insight into real workflows. A recurring issue was unstable internet connectivity, which required repeated reconnections during key operations. Another problem came from the AI Assist button, still tied to the deprecated Gemini 1.5 model and limited to 50 requests per day. I implemented a hotfix to upgrade it to Gemini 2.5-Flash-Lite, which raised the limit to 1000 requests and immediately stabilized the feature. These situations reinforced the importance of staying calm and solution-focused when systems are running in production.

Reflections & Insights

  • Building the QR scanner forced me to think more carefully about workflow design and how each step connects to the next.
  • Understanding JWT structures gave me a clearer picture of how authentication and identification can be handled in real-world systems.
  • Real-time troubleshooting during system support highlighted the importance of stability and user trust alongside feature development.

What’s Next

  • Refine the codebase and expand testing with automated checks
  • Strengthen the workflow with proper JWT validation
  • Add timestamp checks to identify and reject outdated slips


0 Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.