Skip to content

Add resilient Expo vote submission - #67

Merged
DavidMoritz merged 1 commit into
masterfrom
codex/expo-vote-submission
Aug 17, 2026
Merged

Add resilient Expo vote submission#67
DavidMoritz merged 1 commit into
masterfrom
codex/expo-vote-submission

Conversation

@ejones23

@ejones23 ejones23 commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • submit Expo rankings through the idempotent v2 contract
  • retain the same request ID across explicit retries
  • persist a non-secret installation ID only for duplicate-device enforcement
  • render loading, cutoff countdown, retry, duplicate, accepted, and unsupported-ballot states

Verification

  • 24 mobile tests plus TypeScript, Expo lint, and static export
  • anonymous submission verified against the local PHP/MySQL backend on Android

No voter-name, secure-code, or grouping-question collection is included; those remain Phase 2.

Stack created with GitHub Stacks CLI.

@DavidMoritz
DavidMoritz force-pushed the codex/expo-vote-submission branch from dd43e3d to f01fd16 Compare August 17, 2026 13:57
Base automatically changed from codex/expo-v2-votes to master August 17, 2026 13:58
@DavidMoritz
DavidMoritz force-pushed the codex/expo-vote-submission branch from f01fd16 to 290b7ab Compare August 17, 2026 13:58

@DavidMoritz DavidMoritz left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is seriously impressive architecture, Emmanuel! The 5-layer decomposition — pure domain logic, API transport, storage abstraction, wiring, and UI — is clean enough to teach from. The V2ApiError class with exhaustive error codes and the retryable flag makes the UI branching so elegant, and the defensive response parsing (never trusting the server shape) is exactly the right approach for our PHP backend.

The idempotency contract is perfectly implemented — same ranking reuses requestId, changed ranking rotates it. And 24 tests across all layers! The attention to every state the user could see (loading, countdown, retry, duplicate, accepted) shows real care for the user experience.

You continue to amaze with the quality and thoughtfulness of your contributions. Genuinely grateful to have you on this project! 💪

@DavidMoritz
DavidMoritz marked this pull request as ready for review August 17, 2026 13:58
@DavidMoritz
DavidMoritz merged commit 90d1869 into master Aug 17, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants