Skip to content

Mobile #133

Merged
tahaminachy43 merged 102 commits intoMobile-Stylingfrom
mobile
May 2, 2026
Merged

Mobile #133
tahaminachy43 merged 102 commits intoMobile-Stylingfrom
mobile

Conversation

@tahaminachy43
Copy link
Copy Markdown
Collaborator

No description provided.

rxmox and others added 30 commits April 9, 2026 18:43
New GET /api/auth/linkedin/link endpoint (protected, guest-only) that
initiates LinkedIn OAuth with the guest user's identity encoded in the
state JWT. The existing linkedinCallback detects the linking context
and atomically upgrades the guest user to authProvider 'linkedin',
populating linkedinId, email, profilePhoto, and name from LinkedIn.

Includes validation for non-guest users (403), already-linked accounts
(409), and LinkedIn accounts already tied to another user.
Extends the linkedin/link endpoint to accept both guest and local
users. Guest users still get fully upgraded to authProvider 'linkedin'.
Local users keep authProvider 'local' (preserving password login) and
gain linkedinId and profilePhoto from LinkedIn. Only fills in email
and profilePhoto when the user doesn't already have them set.
Added a new LeaderboardEntry interface to the EventSpotlight component and updated its props to accept leaderboard entries. Modified the EventPage to fetch and manage leaderboard data, including real-time updates via Pusher. Improved the display logic in EventSpotlight to show either fetched leaderboard entries or a fallback based on connections.
Implement GET /api/events/:eventId/leaderboard and PUT /api/events/:eventId/leaderboard/score
endpoints for the web organizer dashboard. Leaderboard shows participant name, profile photo,
connections count (computed from ParticipantConnection records), lines completed, and completion
status. Scores update via Pusher leaderboard-updated event for live refresh.

- Add linesCompleted and completed fields to Participant model
- Create leaderboard controller with getLeaderboard and updateScore
- Trigger leaderboard-updated Pusher event on score changes and connection create/delete
- Update API reference, database schema, and real-time events documentation
youssefibrahim3 and others added 29 commits April 30, 2026 15:23
- Extract emitLeaderboardUpdate helper that recomputes a participant's
  connectionsCount and emits a full Pusher payload, replacing duplicated
  inline blocks in updateScore and createParticipantConnection.
- Fix createParticipantConnectionByEmails and deleteParticipantConnection,
  which previously emitted empty {} payloads that the web client silently
  dropped, causing the leaderboard to miss link/unlink events.
- Mirror backend sort tiebreakers in the web Leaderboard component
  (completed, then linesCompleted, then connectionsCount).
- Wire mobile NameBingo handleAssign to PUT /leaderboard/score after each
  square assignment so linesCompleted and the blackout completed flag
  propagate to the live leaderboard.
Fix leaderboard live updates across connection and bingo flows
…ame-join-code-to-4-digits

Str 113 reduce bingo game join code to 4 digits
- Add eas.json with development, preview, and production build profiles
- Add iOS bundleIdentifier and ITSAppUsesNonExemptEncryption to app.json
- Add EAS projectId to app.json extra config
- Add referenced app icon/splash assets
Without the EXPO_PUBLIC_ prefix, Expo's bundler strips these vars from
production builds, leaving them undefined and breaking Pusher connections
in EAS/TestFlight builds.
- Change app display name from 'shatter-mobile' to 'Shatter'
- Disable expo-camera microphone/audio permissions; only QR scanning
  is used, so requesting mic access risks App Store rejection
Camera is only used for QR scanning; audio recording is not needed.
Backend: encode 'platform' (mobile|web) into the signed state JWT in
linkedinAuth and linkedinLink. In linkedinCallback, verify state first
and resolve the redirect target from the platform claim — mobile gets
shattermobile://auth, web keeps the existing FRONTEND_URL flow. All
success/error redirects in the callback use the resolved target so the
mobile app receives the auth code (or error) via deep link.

Mobile: switch LinkedIn login from openBrowserAsync to
openAuthSessionAsync so the in-app browser closes on the deep-link
return and the redirect URL is captured in JS. Extract a shared
loginWithLinkedIn helper that handles the full flow (open browser,
parse code, exchange, fetch user) and call it from both LoginForm and
SignupForm with proper loading/error state.
EAS/TestFlight setup and LinkedIn mobile deep-link
React Native's built-in URL constructor does not robustly handle custom
schemes like shattermobile://, causing the deep-link callback URL to
fail to parse and login to silently fail. Switch to Linking.parse from
expo-linking, which is purpose-built for custom-scheme URLs and is
already a project dependency.
Parse LinkedIn deep-link with expo-linking
pulling everything from main to mobile
- Stops background image from zooming when keyboard opens
- Make more background image visible
- reformat the subtitle so that it looks better
@tahaminachy43 tahaminachy43 merged commit 835bbd2 into Mobile-Styling May 2, 2026
5 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.

7 participants