Tuesday, 2 September 2026
Shipped
Login unblocked end to end, transactional email implemented
Put a real Android build on a physical device and drove the whole onboarding flow against the live API. That surfaced a bug which made login impossible for every user, now fixed and verified. On the backend, audited the legacy environment against the new one and replaced the email stub with a working SendGrid sender.
Mobile app crypto-hunters-mobile-app
- Compiled and installed the Android debug build on a physical device (TECNO KF6k, Android 11) through
./preview-app.sh, with Metro fast refresh attached. -
Fixed the auth gate that blocked every login.
The game backend keys users by
id, but the root navigator gates the app onuserdata._id. Login succeeded server-side and then silently dropped the user back on the sign-in screen. Added theid → _idbridge touseLoginanduseSignUp, matching whatuseLoginWithTokenalready did. -
Sign-up now establishes a real session.
It only wrote to the React Query cache and never dispatched to Redux, so a brand-new account stayed logged out and the follow-up
navigate("Dashboard")failed with “not handled by any navigator”. It now reusesapplyAuthSession, the same bootstrap login uses. - Verified on device:
[RootNavigator] isLoggedIn: true, dashboard reached, wallet and referral code generated for the new account. -
Chat still fails after login.
Client-side only — the backend chat token is fine (see below). The saga chains
.then()offgetSubscribedConversations()and dies with “Cannot read property 'then' of undefined”. Next up.
Game backend crypto-hunters-game-backend
-
Twilio needed no change.
Audited against the legacy backend. All four
TWILIO_*variables are already present on the server andPOST /api/user/generateChatTokenreturns200in production for a live user. The chat problem is entirely in the app. -
Implemented transactional email through SendGrid.
email.helper.tswas a placeholder that only printed the verification code to the console. It now sends through the SendGrid v3 REST API over axios — deliberately not the SDK, because the deploy script builds on the server without reinstallingnode_modules, so adding a runtime dependency would have broken the deploy. Falls back to logging when credentials are absent, so local development still works. - Ported
MAIL_SENDGRID_KEYandMAIL_SENDGRID_FROMfrom the legacy backend into the new config and the server environment. Sender address iscrh.game@crypto-hunters.io. - Password reset continues to go through Supabase Auth (
resetPasswordForEmail) and was left alone — the new SendGrid path covers the custom verification-code email instead. - Built, deployed and restarted under PM2; login smoke test returns
200with no errors in the process log. -
Twitter OAuth could not be carried over.
The new backend expects
TWITTER_CLIENT_IDandTWITTER_CLIENT_SECRET, but the legacy environment only held a scraped browser session cookie, which is not an OAuth app credential and would not work. Real credentials from the Twitter developer portal are needed.
Infrastructure
- Stood up this page — Cloudflare Pages project
readytohunt, deployed fromreadytohunt-dev-page/with a one-command publish script. - The test handset has no working internet of its own. Its Wi-Fi associates and takes a DHCP lease but never routes out, and the SIM has no data, so every API call failed as a network error. Worked around it by routing the phone's traffic through the development machine over USB. Worth fixing properly before wider device testing.
Test account shared
- raphaeltest01@minitok.live
- Password
- HunterRaph2026
- Nickname
- raphaelhunter
Disposable account created on 2 Sep 2026 for testing the live build — no progress, no balance. Treat it as public: anyone with this page can sign in as it. Never reuse this password anywhere else, and rotate or delete the account once device testing is finished.
Status at end of day
| Area | State | Detail |
|---|---|---|
| Registration | Working | Account created through the app against the live API. |
| Login | Fixed today | Reaches the authenticated dashboard. |
| Game API | Online | PM2, port 3002 behind nginx. |
| Chat token | Working | Backend returns 200. |
| Chat channels | Broken | Client-side saga error after login. |
| Implemented | SendGrid sender live; not yet wired to a route. | |
| Twitter OAuth | Blocked | Needs real OAuth app credentials. |
Screenshots — launch to authenticated session
Next
- Fix the Twilio conversation loading in the app so chat works after login.
- Wire the SendGrid sender to an endpoint, or drop the unused verification-code path if Supabase covers it.
- Obtain Twitter OAuth app credentials so account linking can be enabled.
- Give the test handset real network access instead of the USB workaround.