Files
ImgBotApp 1a4f4e8aa0 [ImgBot] Optimize images
*Total -- 391.49kb -> 351.99kb (10.09%)

/native-app/assets/images/splash-icon-dark.png -- 51.29kb -> 17.55kb (65.77%)
/native-app/assets/images/logo-white.svg -- 0.59kb -> 0.53kb (10.4%)
/native-app/assets/images/logo-brand.svg -- 0.59kb -> 0.53kb (9.9%)
/app/assets/logo.svg -- 0.60kb -> 0.54kb (9.82%)
/native-app/assets/images/icon.png -- 1.17kb -> 1.08kb (7.68%)
/native-app/assets/images/adaptive-icon.png -- 28.69kb -> 28.03kb (2.29%)
/native-app/assets/images/adaptive-icon-monochrome.png -- 28.69kb -> 28.03kb (2.29%)
/build/icon.png -- 139.01kb -> 136.80kb (1.59%)
/native-app/assets/images/splash-icon.png -- 140.86kb -> 138.89kb (1.4%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2026-04-23 20:52:56 +00:00
..
2026-04-23 20:52:56 +00:00
2026-02-13 23:46:09 +01:00
2026-02-13 23:46:09 +01:00
2026-03-19 21:27:13 +01:00

Helium Native (Expo + React Native)

Simple React Native streamer app that:

  • Authenticates with Clerk (@clerk/clerk-expo)
  • Fetches your Helium presets from /api/presets
  • Loads selected preset ICE servers from /api/presets/:id
  • Captures Android screen with getDisplayMedia()
  • Hosts a room on /ws/signaling and streams to connected viewers
  • Uses matching light/dark palette semantics from the Helium web app
  • Includes built-in i18n for English and Spanish based on device locale

Auth implementation notes (from Clerk docs via Context7)

This app follows Clerk Expo guidance:

  • Wrap app with ClerkProvider
  • Use secure tokenCache from @clerk/clerk-expo/token-cache
  • Configure EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
  • Use useSignIn() and setActive() for email/password sign-in
  • Use useAuth() for sign-out and auth state gating

Environment variables

Create native-app/.env:

EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxx
EXPO_PUBLIC_HELIUM_BASE_URL=https://helium.srizan.dev

Install

pnpm -C native-app install

Run on Android

react-native-webrtc requires native modules, so use a development build:

pnpm -C native-app prebuild
pnpm -C native-app android

Host signaling protocol wired

Implemented in native-app/src/hooks/useHeliumStreamer.ts:

  • send create-room
  • receive viewer-joined
  • create peer connection with selected preset iceServers
  • send offer for each viewer
  • receive answer
  • exchange ice-candidate
  • handle viewer-left
  • heartbeat with ping every 15s