Deep DivesApp

Development

Local development guide for the RawStack App component.

Running the App locally

The App is built primarily with React Native. JavaScript and TypeScript code is served through the Metro bundler, while iOS and Android builds are run through the native platform tooling.

If you are new to the mobile stack or want more detail on project structure, native setup, and platform workflows, the official React Native documentation is worth reading before you dive deeper.

To get started locally, install dependencies and create a local environment file:

cd apps/app
npm install
cp .env.dist .env

For iOS development, you will need macOS with Xcode installed. The first time you set the project up, install the Ruby dependencies and CocoaPods as well:

cd ios
bundle install
bundle exec pod install
cd ..

For Android development, you will need Android Studio, the Android SDK, and either an emulator or a physical device connected through ADB.

Once the project is configured, start Metro:

npm start

Then, in a separate terminal, run the App on the target platform:

# iOS
npm run ios

# Android
npm run android

Environment configuration

Environment variables are managed through react-native-config. For local development, create a .env file and point API_URL at the local API.

The quick start uses:

API_URL=http://localhost:3001/v1

Project structure

The App is organised around shared React Native code in src, with separate native projects for each platform.

  • src/navigation: React Navigation configuration
  • src/screens: screen-level components
  • src/components: shared UI building blocks
  • src/hooks: reusable hooks for data access, storage, and app behaviour
  • src/lib: utilities and shared configuration
  • src/types: shared TypeScript types
  • ios: native iOS project
  • android: native Android project

Useful scripts

  • npm start: start the Metro bundler
  • npm run ios: build and run the app in the iOS Simulator
  • npm run android: build and run the app in the Android Emulator
  • npm run test: run Jest tests once
  • npm run test:watch: run Jest in watch mode
  • npm run lint: run ESLint