[object Object]

← 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

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 →