Start hereCustomization

Mobile App Customization

This guide explains how to customize your React Native Supabase AI template using Gluestack UI and your app.json configuration. Learn how to manage environment variables, define app settings like identity and feature flags, and adjust styling and theming with TailwindCSS—all in one place.

1. App Configuration with app.json

This template uses app.json to define static app settings. Below is an annotated sample of the configuration—feel free to customize fields like name, slug, and others to match your app’s branding and requirements.

{
	"expo": {
		// This is the name you'll see on your phone's home screen
		"name": "react-native-supabase-ai-template",
 
		// A unique ID for your app used by Expo services
		"slug": "react-native-supabase-ai-template",
 
		// Your app's version number (like 1.0.0 for first release)
		"version": "1.0.0",
 
		// Locks the app to portrait mode (no landscape)
		"orientation": "portrait",
 
		// The icon shown on your phone's home screen
		"icon": "./assets/images/icon.png",
 
		// A special link for opening your app (used for deep links and sign-in)
		"scheme": "com.react-native-supabase-ai-template",
 
		// Automatically switches between light and dark mode
		"userInterfaceStyle": "automatic",
 
		// Enables the new React Native architecture for better performance
		"newArchEnabled": true,
 
		// Settings for the splash screen when your app loads
		"splash": {
			// Image shown while the app is loading
			"image": "./assets/images/splash-icon.png",
			// How the splash image fits on the screen
			"resizeMode": "contain",
			// Background color of the splash screen
			"backgroundColor": "#ffffff"
		},
 
		// Settings just for iOS devices
		"ios": {
			// Allows the app to work on iPads
			"supportsTablet": true,
			// Permissions for iOS (like accessing Wi-Fi info)
			"entitlements": {
				"com.apple.developer.networking.wifi-info": true
			}
		},
 
		// Settings just for Android devices
		"android": {
			// Icon settings for Android (adaptive icons for modern versions)
			"adaptiveIcon": {
				// The main part of the icon
				"foregroundImage": "./assets/images/adaptive-icon.png",
				// Background color for the icon
				"backgroundColor": "#ffffff"
			},
			// Unique ID for your app on Android
			"package": "com.usesaaskit.reactnativesupabaseaitemplate",
			// Allows your app to handle specific links (like invites)
			"intentFilters": [
				{
					"action": "VIEW",
					"data": {
						// The link format your app can open
						"scheme": "com.react-native-supabase-ai-template",
						"pathPrefix": "/accept-invite"
					},
					"category": ["BROWSABLE", "DEFAULT"]
				}
			]
		},
 
		// Settings for the web version of your app
		"web": {
			"bundler": "metro",
			"output": "static",
			"favicon": "./assets/images/favicon.png"
		},
 
		// Extra features your app uses (like navigation and secure storage)
		"plugins": ["expo-router", "expo-secure-store", "expo-image-picker"],
 
		"experiments": {
			"typedRoutes": true
		},
 
		"extra": {
			"router": {
				"origin": false
			},
			"eas": {
				"eas": {
					// Your Expo project ID (added automatically when using EAS CLI)
					"projectId": ""
				}
			}
		},
 
		// Your Expo account or organization name (added by EAS when you log in)
		"owner": ""
	}
}

2. Gluestack Configuration

The template uses Gluestack UI as the primary UI library, offering utility-based styling, built-in theming, and fully customizable components. You can adjust the design system by modifying the Gluestack configuration file.

Location

The Gluestack configuration is typically defined in:

/react-native/components/gluestack-ui-provider/config.ts

This file uses nativewind and vars to define CSS-style custom properties (tokens) that are used throughout the app for consistent styling.

Example Configuration

export const config = {
	light: vars({
		"--color-primary-0": "179 179 179",
		"--color-primary-50": "153 153 153",
		"--color-primary-100": "128 128 128",
		"--color-primary-200": "115 115 115",
		"--color-primary-300": "102 102 102",
		"--color-primary-400": "82 82 82",
		"--color-primary-500": "51 51 51",
		"--color-primary-600": "41 41 41",
		"--color-primary-700": "31 31 31",
		"--color-primary-800": "13 13 13",
		"--color-primary-900": "10 10 10",
		"--color-primary-950": "8 8 8",
		//...more,
	}),
};

Customizing Colors

You can customize your app's primary color palette by changing the values in this configuration file. Each color is defined using RGB format (space-separated, not comma-separated). This format is required by nativewind and is compatible with Tailwind-style utilities.

Important Notes:

Use space-separated RGB values only (e.g., "65 104 225") — do not include commas or rgba() syntax.

You can add additional design tokens (like --color-secondary-*, --color-background, etc.) based on your design system.

These tokens are accessible via Tailwind classes using nativewind.

For a deeper dive into customizing your Gluestack theme, check out the official guide: Gluestack Theme Configuration Guide

On this page