r/reactnative

▲ 14 r/reactnative+1 crossposts

I built a virtual slider to test nail polish before going to the salon.

u/rxwriting — 8 hours ago

My React Native app got 498 downloads in 2 days w/ 59% conversion rate 🥹

App Store Connect screenshot: https://imgur.com/a/HgXdjOa

Thanks to React Native I was able to reuse my experience as a web dev to build an iOS app in just a few days. If I had to learn a tool like Swift, it would most likely took me a lot more time to ship it because of the learning curve.

It's a simple app that blocks apps until you reframe a negative thought into something positive. I built the app for myself to train my mind to be an optimist and thought it might also be useful for others so I published it on the App Store but I didn't expect that it will get this much traction.

Nothing crazy since it's only a few hundred of downloads but it's very motivating to me that it gained that many users in just a short period of time and lots of people are providing feedback that they love the idea and also sending feature requests which will help me improve the app for the next version that I will release.

It's free and I'd really appreciate it if you can give it a try and I would love to hear your feedback! Happy to answer any questions if there's any.

u/john200ok — 11 hours ago
▲ 3 r/reactnative+2 crossposts

Shipped my first production app with Expo for reading habit tracker, here's what worked and what didn't

Just launched BookStreak, a reading habit tracker built entirely with Expo managed workflow. Figured I'd share what worked and what didn't in case it's useful for anyone considering Expo for a production app.

Stack: Expo SDK 52, expo-sqlite for offline-first storage, Supabase for cloud sync, RevenueCat for subscriptions, React Navigation with a 4-tab bottom bar.

What worked well:

  • expo-sqlite is solid for offline-first. Every feature works without network, sync is additive. Way simpler than I expected.
  • EAS Build + EAS Update for OTA patches. Shipped 2 hot fixes in launch week without going through App Store review.
  • Expo managed workflow handled everything I needed. Never had to eject. WidgetKit and Live Activity via config plugins.

What was harder than expected:

  • Import/export (Goodreads CSV, StoryGraph CSV) had way more edge cases than I planned for. Every export format has quirks.
  • RevenueCat + StoreKit 2 on sandbox was flaky. Worked fine in prod though.
  • Dynamic Island / Live Activity required a config plugin and a native extension target. Doable but not well documented for Expo yet.

What I'd skip next time:

  • Over-designing the onboarding flow. Users just want to add a book and start. 3 screens max.

For the App Store preview video, I built a separate tool (AppShot) that generates videos and screenshots from React/Remotion components instead of screen recording. Saved me from learning CapCut, Canva and the output is pixel-perfect and reproducible. It's open source if anyone wants to try it: https://github.com/trunghaiy/appshot

Happy to answer questions about the architecture, Expo gotchas, or the App Store submission process.

App Store: https://apps.apple.com/us/app/bookstreak-reading-tracker/id6767014813

u/trunghaiy — 15 hours ago
▲ 9 r/reactnative+5 crossposts

Finally launched

I kept ignoring my own reminders so I built something that would actually bother me.

Every notification is AI-generated for your specific task. So instead of "Don't forget: do laundry!" you get something that actually makes you laugh (and then do the thing).

Added "do laundry" as a test task. It reminded me: "Your clothes have been in that hamper longer than most people stay in relationships."

It's free, no account, no subscription. Just add a task and wait for the notification to clown on you.

Built with React Native + a Cloudflare Worker proxying OpenAI for the notification text. Just shipped a UI redesign tonight so the app finally looks as good as the notifications are mean.

https://apps.apple.com/us/app/get-it-done-smart-tasks/id6760387046

Curious if anyone else actually finds it funny or if I'm just easily amused by my own app.

u/Melodic_Key_5227 — 20 hours ago
▲ 8 r/reactnative+2 crossposts

A new app for immersive storytelling looking for early writers/beta testers

https://preview.redd.it/v8967azrub2h1.png?width=1526&format=png&auto=webp&s=4504841363a00948cd01d711723eb0ce5f621c35

Hi everyone, Quentin Merabet here.

Disclaimer: this is NOT an ad. I'm not selling anything.

I’m currently building Loreum, a new app for immersive storytelling, and I’m looking for a small group of early writers and beta testers to help shape it.

The idea really started from a simple feeling: stories on the internet haven’t really evolved in years. Most platforms still treat stories like plain text on a page (+ ugly ads), even though creators today grow up with sound, video, games, fandom culture, TikTok, YouTube, interactive media, etc.

Not even talking about the opaque monetization system and the reading experience full of ads.

With Loreum, writers can create stories using:

  • text
  • images
  • sounds/music
  • videos
  • choices (routing to different chapters)
  • questions (routing to different chapters based on good/bad answer)

Imagine a horror story with cracking sounds while the character hides in the dark. Or readers choosing what a character says next in a romance scene. Or hiding clues in a thriller through interactive questions.

The goal is NOT to replace pure writing. It’s to give writers new "building blocks" while keeping stories fast, emotional, and easy to read on mobile.

I’ve worked as an actor, director, and screenwriter before starting this project, and I genuinely believe online storytelling is still at day one. (not sure you should google me tho 😭)

The beta is completely free. No ads (never will, ads are ugly).

If you’d like to try it early:

🍎 iPhone users → Here's the testflight link (that's the app Apple use for testing) : https://testflight.apple.com/join/4FrpfH2r

🤖 Android users → send an email to contact@loreum.co using the email associated with your Google Play account so I can send you the invite!

Would genuinely love to have some of you involved this early ✨

Thanks a lot! Here to answer ANYTHING. Please don't hesitate!

reddit.com
u/QuentinMerabet — 1 day ago
▲ 19 r/reactnative+19 crossposts

I just launched my first app after ~3 weeks of nonstop vibe coding and somehow survived like 10 App Store rejections 😭

The app is called Puplytics.

Before this project I had basically zero real coding experience. I went from not understanding app structure at all to learning React Native / Expo workflows, App Store Connect, subscriptions, AI APIs, privacy compliance, camera permissions, TestFlight builds, backend deployment, and debugging random production issues at 2am.

Honestly the hardest part wasn’t even building the app — it was getting through Apple review.

I got rejected for:
• subscription flow issues
• missing legal links
• camera permission wording
• AI consent flow compliance
• metadata problems
• purchase restore handling
• sandbox purchase behavior
• UI edge cases on iPad
…and probably more I’m forgetting lol.

The app itself is a dog wellness tracking app focused on digestive health and daily wellness tracking.

Features include:
• AI stool scan analysis
• symptom tracking
• food logging
• sleep & mood tracking
• AI wellness chat
• trend analysis
• downloadable vet reports
• multi-pet support
• reminders and history timelines

The original idea came from dealing with recurring stomach issues with my own dog and constantly forgetting what food changes or symptoms happened during vet visits.

So I basically built the app I wished existed.

The craziest part is realizing how much you can actually build now if you’re willing to learn while moving fast.

Would genuinely love feedback from other builders / vibe coders:
• UI/UX thoughts
• onboarding feedback
• feature ideas
• App Store screenshots
• monetization thoughts
• anything that feels confusing or broken

Still improving it daily. (As of right now it’s been live for about 20 minutes lol)

The app is called Puplytics on the App Store if anyone wants to roast/test it 🙏

reddit.com
u/ORPH_APE — 1 day ago
▲ 2 r/reactnative+2 crossposts

Built my first production iOS app with Expo, would love feedback on the improved onboarding flow

Hey everyone, I’ve been building Logly, an AI food and progress tracker for iOS.

I recently redesigned the onboarding to make it feel smoother and less overwhelming for first-time users. The goal is to explain the value quickly: write what you ate, get calories/macros estimated, then track weight, measurements, water, and progress over time.

I’d really appreciate feedback on:

- does the onboarding feel too long?
- is the value clear in the first few seconds?
- would you show the paywall before or after the first AI food log?
- anything that feels too generic or not native enough?

Not trying to spam, just looking for honest feedback from other Expo devs.

u/Knuckleclot — 1 day ago

Expo + Dependabot?

I was wondering if anyone has come up with a solution to dependabot and expo compatibility, I have dependabot currently configured for minor/patches but most the time these fail the expo-doctor check. I know its easy enough to just use expo doctor etc. and remove dependabot but would be nice to be able to have dependabot for packages while also filtering out ones that are not compatible with the current expo version I am on etc.

reddit.com
u/Prize-Maintenance659 — 24 hours ago

How can I build an orb like this ?

I want to build a feature in my app that has this giant AI orb that glows in a very beautiful way, but what I was able to achieve is the other screen.
How can I reach this level of beauty? I'm already using Shopify, Skia, and react native reanimated, but it seems very hard. Am I missing something?

u/HossamElshall — 1 day ago
▲ 1 r/reactnative+1 crossposts

I got tired of hardcoding API paths in my React Native app, so I built a CLI to fix it

Hey r/reactnative 👋 You know that feeling when you're 3 sprints deep into a project and your codebase is littered with stuff like this?

const res = await fetch('/roles/42/buttons/7', { method: 'GET' });

And then the backend team renames a route. And you have to grep through 40 files. Yeah. That. I got fed up enough to build something about it — a little CLI called typeoapi.

What it does

Point it at your OpenAPI spec (local file or a live URL) and it generates two TypeScript files automatically:

  • schema.ts — all your types for paths, components, operations, the whole schema
  • api.ts — the part I actually care about day to day:
  • A typed ApiRoute enum (no more magic strings)
  • A buildRoute() helper for path params
  • *_Payload types wired directly to each endpoint's request body

Using it is literally two questions

npx typeoapi
? OpenAPI schema source: https://api.example.com/openapi.json
? Output directory: ./src/api

No flags. No config files. Just two answers and you're done.

What you end up with

import { ApiRoute, buildRoute } from './api/api';
import type { Post_Gender_Payload } from './api/api';
// Static route — just use the enum
const res = await fetch(ApiRoute.PostGenders, {
method: 'POST',
body: JSON.stringify(payload satisfies PostGenderPayload),
});
// Dynamic route — path params handled safely
const url = buildRoute(ApiRoute.RolesRoleIdButtonsButtonId, {
role_id: 42,
button_id: 7,
});
// → '/roles/42/buttons/7'

If the backend renames a route, your TypeScript just breaks at compile time. Which is exactly what you want — catch it early, not in production.

The React Native specific bit

A lot of similar tools use const enum which Metro bundler chokes on. This one uses regular enum throughout, so it works out of the box with React Native — no extra babel plugins, no workarounds.

Other things worth knowing

Works with Swagger 2.0, OpenAPI 3.0 and 3.1

Accepts JSON or YAML, local file or remote URL

Auto-singularizes path segments (/genders/ → PostGenderPayload)

All types are zero runtime cost — fully erased at compile time

Built on top of the amazing openapi-typescript by @drwpow — huge credit to him

Try it

npx typeoapi

📦 npm: npmjs.com/package/typeoapi

GitHub: github.com/KarthiKeyan05046/openapi-ts-gen It's still early days so if something breaks or a use case isn't covered, open an issue — I'm actively working on it. And if you find it useful, a ⭐ on GitHub genuinely goes a long way. Happy to answer any questions below 🙌

reddit.com
u/Prudent-Tangelo2640 — 1 day ago
▲ 14 r/reactnative+2 crossposts

Shipped my first React Native/Expo app coming from a React frontend background

I recently shipped my first mobile app built with React Native + Expo, and it’s now live on both the App Store and Google Play.
This was actually my first time properly touching React Native.

My background is mostly frontend React/Next.js, so a lot felt familiar at first — components, state, props, hooks — but I quickly realized mobile has its own learning curve.

Things that were new to me:
EAS builds
iOS certificates and provisioning profiles
TestFlight
Google Play testing/release tracks
native-feeling gestures
offline-first behavior
in-app purchases
testing on real devices
app store review/submission

I also leaned heavily on Claude/Codex while building, especially when understanding mobile-specific setup and debugging things I hadn’t dealt with before as a web developer.

Expo made the transition from web to mobile much less intimidating, but the whole release process still taught me a lot.

The app itself is called Kumustahan — a conversation card app — but the main milestone for me was going from “I only know React for web” to actually shipping a React Native app cross-platform.

For other frontend React devs here who are thinking about trying Expo: it’s very approachable, but expect the store/distribution side to be a separate learning curve.

Happy to share what I learned if anyone is going through the same path.

If you want to see, visit kumustahan.app

u/skylarknexus — 1 day ago
▲ 1 r/reactnative+1 crossposts

Finding a Firebase Project Team Member

I am NOT asking for partners or consults or referrals directly here.

I have created a project using React Native, multiple Firebase products including authentication and Firestore, Resend, Stripe, and a few other products/APIs. I have a solid product but the concepts of the release process for App and Play Stores basically terrify me. It feels like the initial deployment is the most critical part of the entire process and I can't afford to screw it up with a ton of one star reviews, right?

I'm hoping someone can help me nail down a description of exactly what I AM looking for. If I were to make a job posting for this role, what would it look like? What's the name of the role? Release Manager is one I've seen that might fit.

Unless someone recommends otherwise I'm thinking of hiring via something like Upwork, Toptal, Freelancer, or similar.

Thanks!

reddit.com
u/Admirable_Gold_9133 — 1 day ago

REALLY DESPERATE, notification works perfectly in emulator, once on real phone breaks. HELP NEEDED.

expo-notifications on Android — Failed to schedule the notification. org.json.JSONObject — crashes on physical Xiaomi but not on emulator, surviving all fix attempts

We've been chasing a persistent org.json.JSONObject crash in expo-notifications@0.32.17 for three app versions. Looking for anyone who's actually resolved this.

What we're building: A React Native (Expo, CNG) app that schedules local push notifications. Users set recurring reminders; we call scheduleNotificationAsync once per date slot.

The error — identical every time:

Failed to schedule the notification. org.json.JSONObject

Appears in logcat and Sentry. org.json.JSONObject is the Java class name, not a message string — meaning a JSONException escapes ArgumentsNotificationContentBuilder.getBody() uncaught, because the catch block only handles NullPointerException.

Reproduction pattern:

  • ✅ Works fine: Android emulator (stock AOSP)
  • ❌ Fails: Physical Xiaomi device (MIUI, Android 13)
  • ❌ Fails: EAS production build from Google Play
  • ✅ Works: Local gradlew assembleRelease

Our actual scheduling code:

slotBuilder.ts — builds the payload, coerces all data values to strings:

typescript

function toSafeData(obj: Record<string, unknown>): Record<string, string> {
  const out: Record<string, string> = {};
  for (const [k, v] of Object.entries(obj)) {
    if (v == null) continue;
    out[k] = typeof v === 'string' ? v : JSON.stringify(v);
  }
  return out;
}

// data passed to scheduler:
data: toSafeData({
  reminderId: reminder.id,    // string
  style:      reminder.style, // string
  locale:     reminder.locale,// string
})

scheduler.ts — the actual scheduleNotificationAsync call:

typescript

const notifId = await Notifications.scheduleNotificationAsync({
  content: {
    title: slot.title,   // string
    body:  slot.body,    // string
    data:  slot.data,    // Record<string, string> — fully guarded above
    sound: true,         // ← boolean — our current suspect
    ...(Platform.OS === 'android' && { channelId: REMINDER_CHANNEL_ID }),
  },
  trigger: {
    type: Notifications.SchedulableTriggerInputTypes.DATE,
    date: slot.fireDate,
  },
});

What we've already tried:

  1. patch-package to widen the Java catch block to also catch JSONException → patch applies to source on EAS server but bytecode in the final APK is unchanged (expo-notifications resolves as a pre-built AAR from Maven, not compiled from source)
  2. EAS_BUILD_DISABLE_MAVEN_CACHE=1 → patch still doesn't apply
  3. toSafeData() guard on the entire data field → error persists

Current hypothesis: toSafeData() correctly sanitizes the data sub-object. The only remaining non-string value in the content object is sound: true — a boolean at the top level of content, not inside data. Our Android channel (setupChannel()) already sets sound: null (device default), making sound: true in the content object completely redundant on Android. We suspect MIUI's modified notification stack does a secondary JSONObject serialization pass over the full content object, and the boolean is what triggers the exception. Stock AOSP (emulator) tolerates it.

Questions:

  1. Has anyone actually resolved org.json.JSONObject from expo-notifications on a physical Android device?
  2. Is sound: true in notification content (not channel) known to cause issues on MIUI or other OEM ROMs?
  3. Is there any documented difference in how expo-notifications serializes the content object between stock Android and MIUI?
  4. Are there other non-string fields in NotificationContentInput that could cause this on certain ROMs?
  5. Any known issues on expo-notifications?
  6. Or even investigation ideas or direction?
  7. we do have a icon transparent png, for notification icon, but i think this is unlikely.

Any help and pointer is appreciated. been literally trying to fix for over a week, however with no results, and now not even much direction or ideas.

reddit.com
u/nelvincheung — 1 day ago
▲ 1 r/reactnative+1 crossposts

Looking for Remote/Hybrid Lead or Senior position

Hey everyone 👋

Senior/Lead Mobile Engineer here. It's been months and I'm still looking for opportunity, a little bit of my background

- 8+ YOE in Mobile engineering with React Native

- 3+ years leading teams/projects

- 20+ go live projects

- Strong React Native + Expo background. Experienced with Flutter, KMP, TypeScript, AWS, CI/CD, and full-stack development

- Worked on production apps across FinTech, betting, logistics, healthcare, social, and eCommerce... domains

Main stack/tools:

React Native, Expo, TypeScript, GraphQL, TanStack Query, Reanimated 3, Firebase, Supabase, RevenueCat, Jest, Detox, Fastlane, EAS, CircleCI, Turborepo/Nx, MMKV, Realm, AWS Serverless, Shopify, Sentry, Segment/Braze,...

Also heavily using AI-assisted workflows with Claude Code, Codex, Gemini, Windsurf.

I'm open to Remote or Hybrid role in Asia and EU

- Senior/Lead React Native roles

- Mobile Architect opportunities

- Full-stack capable positions

- Remote / hybrid / international teams

Feel free to DM me if your team is hiring 🙌

Please no fake job/recruits 😭😭 I've faced many of them, really a waste of time 🙇

reddit.com
u/Active-Leg5918 — 1 day ago
▲ 10 r/reactnative+1 crossposts

would love feedback on this progress journey flow i built in react native

hey everyone, i’m building a food/progress tracking app and i’ve been working on the progress side of it.

the idea is that it shouldn’t only be about calories. users can also track their journey over time with weight, measurements, progress photos and timeline entries.

i’m trying to make it feel motivating without making it feel toxic or too focused on before/after photos.

would love some honest feedback on the flow/design:

does the timeline make sense?
would it be better to keep photos and measurements together or separate?
does anything feel cluttered?
would this kind of feature actually help users stay consistent?

screenshots use demo data/photos just to show the flow.

u/Knuckleclot — 1 day ago

Has anyone tried Better Auth with React Native via jwt plugin

I have tried better auth with expo via expo plugin and works fine with limitations but have anyone tried better auth with react native via jwt or via any other ecosystem. I am very confused whether to go with RN or expo( I dont want to use expo since it is too limited) and I have already web and backend attached with better auth and wanted to integarte mobile as well

reddit.com
u/Many_Bench_2560 — 1 day ago

Found 4 unused Android permissions in my AAB right before Play Store submission — turned out to be expo-screen-capture

Almost shipped my note-taking app to Google Play with 4 sensitive permissions I didn't need. Sharing in case it saves someone else the same surprise.

What happened

I was reviewing the merged AndroidManifest.xml before submitting my AAB for closed testing, and noticed 4 permissions I never asked for:

  • READ_MEDIA_IMAGES
  • DETECT_SCREEN_CAPTURE
  • READ_EXTERNAL_STORAGE
  • WRITE_EXTERNAL_STORAGE

For a local-first note-taking app, none of these made sense. Google Play also flags some of these as sensitive in the Data Safety form, so leaving them in would have meant explaining usage I couldn't justify.

Where they came from

Traced it back to expo-screen-capture in package.json. The library declares these permissions in its own AndroidManifest.xml, and the Manifest Merger pulls them into the final app manifest — even though I had zero imports or calls to it in my own code.

The fix

Added tools:node="remove" to my app's AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" tools:node="remove" />
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" tools:node="remove" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />

Rebuilt the AAB, checked the merged manifest, all 4 gone. App still works fine.

Lesson

If you have a managed Expo project and you're about to submit to Play Store, it's worth checking what permissions actually end up in your final merged manifest, not just what you think you declared. Transitive permissions from libraries you're not even using is a real thing.

Yes, the cleaner fix is to just remove the library from package.json — I'll do that in the next release. The tools:node="remove" approach is the fast unblock when you're about to ship.

reddit.com
u/mrmemo_dev — 2 days ago

I brought Android's "Show Taps" and "Pointer Location" dev overlays to React Native — works on iOS too

Ever wanted Android's developer overlay on iOS? Or a clean way to record demos / bug reports with visible touches without digging through dev settings on every device?

I built react-native-pointer-location — replicates both Show Taps and Pointer Location on iOS and Android, toggleable at runtime from JS.

Show Taps

  • Semi-transparent circle at every active touch
  • Multi-touch

Pointer Location

  • Data bar with live touch metrics: pointer count, X/dX, Y/dY, X/Y velocity, pressure, contact size
  • Full-screen crosshairs at the primary touch
  • Velocity-colored gesture trail — red (slow) → blue (fast), per finger
  • Touch contact area indicator (rotated ellipse on Android, circle on iOS)

Under the hood

  • All drawing in native (Kotlin Canvas / Swift Core Graphics) — no Fabric views, no per-frame bridge traffic
  • Global overlay that never consumes touches — your app behaves exactly the same with it on
  • Safe-area aware, handles rotation, multi-finger

Repo: https://github.com/maitrungduc1410/react-native-pointer-location

Hope to receive your feedback 🙏

https://reddit.com/link/1tiijto/video/quiuwwu70a2h1/player

reddit.com
u/mtd1410 — 1 day ago

how do you keep reactnative projects scalable?

hey everyone, as RN apps grow, things like state, navigation, and API logic start getting messy fast, what’s the one thing that helped you most to keep your codebase clean and production ready architecture, state management, folder structure, or something else?

curious to hear how you handle scaling

reddit.com
u/Obvious-Treat-4905 — 2 days ago
▲ 9 r/reactnative+1 crossposts

What's your stack for a local-first field service app? Expo's guide lists the options but doesn't help me choose

Building a field service app and trying to pick a stack before going too deep. Would love recommendations from people who've shipped something similar.

What I'm building:

  • Web app for the office team — creating jobs, assigning technicians, tracking progress
  • Mobile app for field technicians — accepting tasks, updating statuses, adding notes

The hard constraint: Technicians regularly work in areas with zero connectivity. Offline isn't a degraded mode — it needs to feel fully functional, with changes syncing back when they reconnect.

What I've read so far:

Expo has a local-first guide (https://docs.expo.dev/guides/local-first/) that lists a bunch of tools — Legend-State, TinyBase, RxDB, LiveStore, Turso, Jazz, PowerSync, ElectricSQL — but it's more of a survey than a recommendation. It even notes that "the tools available today are still in their early stages" which isn't exactly reassuring.

What I'm trying to figure out:

  1. Which of these tools is actually production-ready for a use case like mine? I need reliable bidirectional sync, not just local persistence.
  2. Is conflict resolution something any of these handle well out of the box, or will I always end up rolling my own?
  3. Is there anything the Expo guide doesn't mention that I should be looking at?
  4. Any regrets? What did you start with that you later had to replace?

Not looking for the perfect answer — just want to hear what's worked for people who've been through it.

u/derdak — 2 days ago