Skip to content

Add a clear invalid/expired QR error screen with rescan action #238

Description

@Lakes41

Difficulty: Intermediate
Type: UI/UX

Background
The README states that invalid QR payloads (bad type/version, malformed JSON, missing fields, invalid wallet, expired) are rejected before the access check is submitted, implying a rejection UI already exists in some form on the access-scanner screen.

Problem
It's not clear the rejection UI distinguishes between different failure reasons (e.g., "this QR code has expired" vs. "this isn't a GuildPass QR code" vs. "malformed code") or offers an immediate one-tap rescan action — a generic "invalid QR code" message is less helpful for users trying to figure out what went wrong.

Expected outcome
When a scanned QR payload fails validation, the scanner shows a specific, human-readable reason (matching the validation case that failed) and a prominent "Scan Again" button that immediately resumes scanning without navigating away from the screen.

Suggested implementation

  • Ensure the QR validation function (from src/features/access/) returns a discriminated result type identifying which specific check failed, not just a boolean.
  • Map each failure reason to a specific, friendly message in app/access-scanner.tsx.
  • Add a "Scan Again" button that resets scanner state without a full screen remount/navigation.
  • Add a Maestro E2E step (or extend an existing one) verifying the rescan button correctly resumes camera scanning.

Acceptance criteria

  • Each documented validation failure shows a distinct, specific message
  • "Scan Again" resumes scanning immediately without leaving the screen
  • Covered by at least one E2E test step

Likely affected files/directories

  • app/access-scanner.tsx
  • src/features/access/
  • .maestro/

Metadata

Metadata

Assignees

Labels

GrantFox OSSGrantFox Open Source Sponsorship program tagMaybe RewardedIssue may qualify for a reward upon successful completion per campaign rulesOfficial Campaign | FWC26Official FWC26 campaign issue — eligible for campaign scoring and rewardsUI/UXUser interface or user experience improvements and design workintermediateIntermediate difficulty tasks requiring solid experience and some context

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions