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
Likely affected files/directories
app/access-scanner.tsx
src/features/access/
.maestro/
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
src/features/access/) returns a discriminated result type identifying which specific check failed, not just a boolean.app/access-scanner.tsx.Acceptance criteria
Likely affected files/directories
app/access-scanner.tsxsrc/features/access/.maestro/