This is a React Native template project with:
- Expo: Easy way to run React Native apps
- TailwindCSS: For styling
- Supabase: For Google, Apple, and Email/OTP login
- Atomic Design structure: Atoms → Molecules → Organisms
- Layered architecture: UI → ViewModel → Store → Service
If you just bought a laptop, you’ll need some tools:
- Download & install: https://nodejs.org
- Check installation:
node -v npm -v
- Install:
npm install -g expo-cli
- Learn more: [https://docs.expo.dev/get-started/installation/]
- Download & install: [https://git-scm.com/downloads]
- Check:
git --version
- Download: From App Store
- Learn: [https://developer.apple.com/xcode/]
- Download: [https://developer.android.com/studio]
- Ensure: Android SDK & Emulator are installed.
git clone [https://github.com/Softaims/rn-starter-template]
cd rn-templatenpm install- iOS (Mac only):
npx expo run:ios
- Android:
npx expo run:android
- Or start Expo for both:
expo start
We use IconKitchen to create proper icons for iOS and Android.
- Website: [https://icon.kitchen]
- Copy downloaded icons (except versioned folders) into
android/app/src/main/res/. - Update
AndroidManifest.xmlto remove old launcher icon strings if needed.
- Open
.xcworkspacein Xcode. - Go to Project → Images → App Icon.
- Drag your icons from downloads into Xcode.
We use Ape Tools: [https://apetools.webprofusion.com]
- Export splash image from Figma (3x PNG) and put it in
./assets/. - Open
app.jsonand update:"splash": { "image": "./assets/splash-icon.png" }
- Run:
npx expo run:ios
- Restart the app to see your splash screen.
- Expo + Supabase: [https://docs.expo.dev/guides/using-supabase/]
- Supabase Social Login: [https://supabase.com/docs/guides/auth/social-login/auth-google]
- Go to Google Cloud Console.
- Create OAuth Client IDs for:
- iOS
- Android
- Web
- Add Client IDs to
.env:GOOGLE_WEB_CLIENT_ID=<your-web-client-id> GOOGLE_IOS_CLIENT_ID=<your-ios-client-id> GOOGLE_ANDROID_CLIENT_ID=<your-android-client-id>
- Get SHA-1 fingerprint:
keytool -list -v -keystore ./android/app/debug.keystore
- Password:
android(or your custom password)
- Password:
- Copy
applicationIdfromandroid/app/build.gradle. - Add Android client ID in
android/app/src/main/res/values/strings.xml:<string name="server_client_id">YOUR_ANDROID_CLIENT_ID_HERE</string>
- Copy iOS Client ID from Google Cloud Console into
.env.
- Apple Developer Account needed: [https://developer.apple.com]
- In Xcode → enable Apple Sign-In capability.
- Get Bundle ID:
grep -r "PRODUCT_BUNDLE_IDENTIFIER" ios/ - Create Apple Client ID in Apple Developer account.
- Add Apple client ID and web client secret to Supabase → Authentication → Providers.
- Update
app.json:"ios": { "usesAppleSignIn": true }, "plugins": [ "expo-apple-authentication" ]
final plugins may look something like this
"plugins": [
[
"@react-native-google-signin/google-signin",
{
"iosUrlScheme": "com.googleusercontent.apps.1034133353106-b2iq7gc68nulq1ifn080igj1jr3p9296"
}
],
"expo-apple-authentication",
"expo-router",
"expo-secure-store"
]
- Go to Supabase → Authentication → Providers.
- Add all Google and Apple client IDs.
- Add Redirect URLs:
host.exp.Exponent(Expo testing)com.yourbundleid.app(Your actual bundle ID)
Your project now supports:
- Google & Apple Login via Supabase
- Custom Splash Screen
- Scalable folder structure
- React Native + Expo Setup: [https://docs.expo.dev/get-started/]
- TailwindCSS in React Native: [https://tailwindcss.com/docs/guides/react-native]
- Supabase Auth: [https://supabase.com/docs/guides/auth]
- Xcode Basics: [https://developer.apple.com/xcode/]
- Android Studio Basics: [https://developer.android.com/studio/]
- Keep
.envsafe; don’t share your keys. - If stuck, Google the exact error—you’re not alone!
Hey, I’m still learning this stuff (aka pressing buttons until it works 🤓). If you spot something broken or weird, don’t roast me—help a fellow coder out!
Together we can make this template less “why is this error happening??” and more “wow, it just works!” 🎉