SkinFirts Navigation Architecture and Screen Hierarchy
How SkinFirts structures navigation using React Navigation — a root NativeStack with a nested bottom tab bar and sub-stacks for doctors and appointments.
Use this file to discover all available pages before exploring further.
SkinFirts uses React Navigation to manage all in-app routing. The entire screen hierarchy is rooted in a single NavigationContainer rendered by StackNavigator, which creates a native-stack navigator set to open on the Splash screen. From there, authenticated users are directed into MainTabs — a floating bottom tab bar — while auth-flow screens (Register, Login, SignUp, SetPassword) and utility screens (profile settings, payments) live at the root stack level so they can be reached from anywhere in the app without nesting concerns.
StackNavigator wraps NavigationContainer and acts as the single entry point for the whole app. All screens are defined in a screens array that is mapped to Stack.Screen elements at render time, keeping the JSX compact. Global screenOptions disable the default header (headerShown: false) so each individual screen can mount its own CustomHeader component with full control over appearance.
TabNavigator is rendered as the MainTabs screen inside the root stack. It creates a bottom-tab navigator with four tabs, each backed by either a nested stack navigator or a single screen component.
Icons come from the react-native-vector-icons/Ionicons library. Each tab’s icon is resolved at render time by looking up route.name in the icons object:
The Home tab hosts its own NativeStack navigator so the user can drill from the home screen into doctor listings, a specific doctor’s profile, and then the scheduling flow — all within the same tab, preserving tab state when switching away and back.
Every navigator sets headerShown: false in its screenOptions. Individual screens mount a CustomHeader component directly in their JSX, giving each screen full control over the back button, title text, and any action icons without being constrained by React Navigation’s built-in header API.
Root Stack
headerShown: false globally via screenOptions. Per-screen headers are rendered as in-component UI elements.
Tab Navigator
headerShown: false — the floating pill is the only persistent chrome; screens own their own top bars.
DoctorStackNavigator
headerShown: false — consistent with the root; CustomHeader is rendered inside each doctor/schedule screen.
AppointmentStackNavigator
headerShown: false — appointment screens manage their own navigation headers.