Open Issues of Interesting (SG) React Native Education (LMS) tutorial app (mobile and web) with public repos but not open source

Last updated on 27 Nov 2025
This post is related to my post: Interesting React Native Education (LMS) tutorial app (mobile and web) with public repos but not open source; Possibilities of open source equivalent. The related app is my slightly modified version of a tutorial app associated with this tutorial video: Simon Grimm: Build Your Own MASTERCLASS clone in React Native, https://www.youtube.com/watch?v=fO3D8lNs10c , 4 hrs. 42 mins, Mar. 2025.

The app - my slightly modified version - does have some issues most of which I think will be there in the base tutorial version too, when used with Strapi Cloud free-tier backend and also when used for Android. But the app is a tutorial app, where some such issues are perhaps to be expected. I invested time to fix some issues which I felt were critical for my learning and demonstration needs. But I ignored some less critical or minor issues.

Those who try out the app may want to know about the open issues that I have noticed. So I compiled that list which is given below. CG below refers to ChatGPT.

Open Issues

  • In web app, after login, the login screen was shown for noticeable amount of seconds making me wonder whether I need to login again. Then I was shown home screen. Future patch may be to use Activity Indicator on Login screen while this loading process is going on.
  • In Android app, playing a video using full screen and then rotating phone to landscape mode played current video using full landscape screen correctly. But autoplay of next video showed blank video with some audio being heard IFIRC. 
    • Trying to get back to lesson screen resulted in app closure, IFIRC. 
    • As per CG, Autoplay should be disabled on Android. It removes a class of known Android video fullscreen/orientation issues and gives a stable user experience.
    • When I next modify the app, I should disable autoplay on Android. Note that on web autoplay is either not enabled or does not work. So fullscreen ends automatically on video end and and shows user the lesson screen where he can move forward to next lesson. That works as expected.
  • In Android app, from the 'Start/Purchase/Continue course' screen, switching to another app and then coming back to this app, results in app restart or a bug message (followed by app restart, IFIRC).
    • Related Metro error message (when using debug APK) is: java.lang.IllegalStateException: Fragment already added: ScreenStackFragment{...
    • As per CG, this is a known issue and documented as: "Fragment already added errors often happen on Android during activity recreation when multiple navigation containers exist."
    • CG's first suggested solution did not work out. I chose not to invest further time on this as it is non-critical.
  • In web app, I started beginner's course and directly clicked on first lesson in left drawer. The lesson showed but the video did not show nor play! Refreshed page after which the video showed and played properly. 
  • In Android app, after login, a blank screen is shown very briefly, followed by login screen which is also is very briefly shown followed by home screen. Minor issue and so ignoring it. A professional app. would show an Activity Indicator.
  • In Android, in one app open, only the top part of bottom tabs was shown. Closing and reopening app fixed the issue. But this is very rare. As per CG:
    • Even large production apps (e.g., with Expo Router + bottom tabs) occasionally see this one-off, first-launch-only visual glitch on older Android devices.
    • Samsung M21 (Android 12) is known to sometimes introduce delayed inset availability on cold boot.
    • As it happens rarely and only on app open and not during navigation, and reopen fixes it, CG's view was, "this is considered within normal Android behavior."
  •  In web app, Elevate Course showed short (inner screen) loading message for long (beyond typical one minute 'Cold start' time) 
    • I refreshed the page (https://sg-eduapp-lms.expo.app/course/advanced-yoga). Loading message showed briefly and then image, text and purchase button showed correctly.
  • User is signed up to Clerk but not added to Strapi
    • In one case, the Android app added user to Clerk but failed to add user to Strapi backend (perhaps due to poor network connectivity issues). At that time it showed a black screen (in dark mode) display. Perhaps that was due to some failure condition which was not caught properly by the app and so no message was shown to user. But on restarting the app, it worked fine even without that user in Strapi user collection. That's probably because the code for the main functionality is ClerkId based which is supplied by Clerk auth on successful login of user.

Implementation To Do Issues

These are not related to usage of the app. But these issues would be relevant to a developer going through this app.
  • app.json -> plugins -> expo-router -> origin entry has to updated to production web app
    • As I was making app.json changes, I saw the entry:
      •     "plugins": [
      •       [
      •         "expo-router",

      •         {
      •           "origin": "https://fake-devonly-lms.expo.app"
      •         }
      •       ],
      • ----
    • and another such entry.
    • I think SG said that before production deployment, above origin has to be changed to deployed production url.
    • I think me not doing that may have led to the api failing from release Android app, which I fixed with a new env. variable and related code.
      • EXPO_PUBLIC_WEB_API_URL=https://sg-eduapp-lms.expo.app
    • If needed, I can consider reverting above point's code and setting expo-router origin to deployed web app, and then testing that.
    • CG said that such an origin change in app.json may fix the api issue without EXPO_PUBLIC_WEB_API_URL code being used.
    • CG recommends changing the origin in app.json for production for other reasons as well. But as app is working now, that change can be postponed to next code changes I make to the app.
    • CG also gave some interesting approaches to manage different app.json setup needed for development and production: app.config.js approach and also app.json combined with app.development.json and app.production.json. I plan to go deeper into it when needed (like if I modify this app's code).

Issues Fixed In 24 Nov. 2025 (v20251124) Release

  • At times in Android app, 'Start course' button has to be tapped two to three times before it changes to Activity Indicator.
    • Update: Fixed mainly by making NewArch false in app.json i.e. using Old Arch. This seems to be a known issue when using Pressable component inside an Animated.ScrollView.
    • In one case, I was able to Start Beginner's course But had to tap 'Start Course' 3 times. I have faced it earlier too with this Release APK.
    • I deleted Strapi entries and tried 'Start Course' again. This time it needed a single tap!
    • Later when I faced this slow response on first tap on 'Start Course' in Android release app, I waited for some time to see if after some time it shows Activity Indicator. It did not. I checked from Expo web deployment log that it did not recieve any API request. In the CG chat mentioned above, CG raised the possibility that onPress event did not get triggered even though TouchableOpacity tap showed tap effect.
  • Course description data is sometimes not shown
    • Update: Fixed by using our own code (StrapiBlocksRenderer.tsx) for rendering Strapi rich text 'notes' field in lesson and course screens. Home screen (HomeBlock.tsx component) is relatively simple and works with Strapi BlocksRenderer and 'use dom'. So that code was not changed.
    • Recently as I was working on some other aspects of the app, I noted Metro's message when using the dev app on Android : 
      • Using experimental DOM Components API. Production exports may not work as expected.
    • I had seen the message earlier but I had not paid much attention to it. Now it seems significant, given the lesson and course screen problems I faced with BlocksRenderer and 'use dom' which got resolved with StrapiBlocksRenderer custom rendering solution.
    • On discussing above with CG, it said, 
      • That Metro warning is exactly the root cause of the production-only failures you saw.
      • Expo docs may not always mark experimental status, especially for new RN Web bridging features. [Note that Expo docs for 'use dom' only state that passings Refs is experimental and not other aspects of 'use dom'.]
      • Metro warnings must be taken seriously, especially if they mention:
        • "experimental"
        • "unstable"
        • "may not work in production"
    • On Android app, once in a while, Course Overview page (of Beginner's course as well as Elevate course) shows image and title but content below that (course description) is blank. However Start Course button is shown at the bottom.
    • On closing and reopening the Android app, the course description was shown at times!
    • On web app, I think I saw it happen once or twice but I am not sure. I dimly recall one case which got resolved by refresh of web page but I don't know if I am confusing it with something else.
    • App data for user not being reset on sign out
      • Update: Fixed by clearing cache of react-query on sign out.
      • In debug APK on phone, I signed out as dG user and signed in as eklavya. Eklavya is a new user at this stage. But after sign in, I was shown one course in My Courses tab ! It should have been 0 courses. I checked Strapi cloud backend. Its data did not shown a user-course entry for eklavya. 
      • I closed the app and reopened it. Now Eklavya was auto signed in but this time, My Courses was showing 0 courses. So looks like there is bug in app related to reset of app data when user signs out which manifests if user then signs in with another user's crendentials without closing the app.

      Comments