← back to Homesonspec
fix(homesonspec-mobile): add missing app/index.tsx to fix infinite splash hang on real device (TK-11155)
e44f3a5f5e2028dfd3a65e5ac50c15d4d405bb16 · 2026-09-03 13:58:56 -0700 · Steve
Root cause: expo-router had no route matching the root path ("/"), so
resolving the initial deep link (homesonspec:///) fell through to the
internal "+not-found" fallback - which has no screen actually registered
in the root Stack (app/_layout.tsx only declares the "(tabs)" group).
React Navigation's NavigationContainer never reaches a resolvable ready
state, so it renders its `fallback` (null) forever and the native splash
screen (SplashScreen.hideAsync() never gets a chance to matter) never
clears. No JS error, no crash - a silent, permanent hang confirmed via
device syslog breadcrumbs tracing execution through registerRootComponent
-> ExpoRoot -> getInitialURL -> getStateFromURL (resolved to "+not-found")
and then nothing further for 60+ seconds.
Fix: add app/index.tsx that <Redirect>s "/" to "/(tabs)/browse", giving
the router an always-resolvable initial route. Verified on a physical
iPhone (from-source Release build): app now reaches Browse tab with real
homesonspec.com content and Map tab with live Apple Maps pins.
Files touched
A apps/mobile/app/index.tsx
Diff
commit e44f3a5f5e2028dfd3a65e5ac50c15d4d405bb16
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Sep 3 13:58:56 2026 -0700
fix(homesonspec-mobile): add missing app/index.tsx to fix infinite splash hang on real device (TK-11155)
Root cause: expo-router had no route matching the root path ("/"), so
resolving the initial deep link (homesonspec:///) fell through to the
internal "+not-found" fallback - which has no screen actually registered
in the root Stack (app/_layout.tsx only declares the "(tabs)" group).
React Navigation's NavigationContainer never reaches a resolvable ready
state, so it renders its `fallback` (null) forever and the native splash
screen (SplashScreen.hideAsync() never gets a chance to matter) never
clears. No JS error, no crash - a silent, permanent hang confirmed via
device syslog breadcrumbs tracing execution through registerRootComponent
-> ExpoRoot -> getInitialURL -> getStateFromURL (resolved to "+not-found")
and then nothing further for 60+ seconds.
Fix: add app/index.tsx that <Redirect>s "/" to "/(tabs)/browse", giving
the router an always-resolvable initial route. Verified on a physical
iPhone (from-source Release build): app now reaches Browse tab with real
homesonspec.com content and Map tab with live Apple Maps pins.
---
apps/mobile/app/index.tsx | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/apps/mobile/app/index.tsx b/apps/mobile/app/index.tsx
new file mode 100644
index 00000000..a5afc4ab
--- /dev/null
+++ b/apps/mobile/app/index.tsx
@@ -0,0 +1,17 @@
+import { Redirect } from 'expo-router';
+
+/**
+ * Root path ("/") entry point.
+ *
+ * Without an explicit `app/index.tsx`, expo-router has no route to match
+ * the app's initial URL (`homesonspec:///`) and falls back to the internal
+ * "+not-found" route - which has no actual screen registered in the root
+ * Stack (app/_layout.tsx only declares the "(tabs)" group), leaving
+ * navigation permanently unresolved behind the native splash screen.
+ *
+ * Redirect straight into the Browse tab so the app always has a real,
+ * matchable initial route.
+ */
+export default function Index() {
+ return <Redirect href="/(tabs)/browse" />;
+}
← 3a545346 auto-data-snapshot: 2026-09-03T13:47:49 (2 data files) — app
·
back to Homesonspec
·
auto-data-snapshot: 2026-09-03T14:29:24 (1 data files) — app febf413e →