Ready-to-use React Native boilerplate for technical interviews at Shurutech
This boilerplate is pre-configured with TypeScript, Navigation, Redux, and everything you need to start building features immediately.
npm installcd ios && pod install && cd ..# For Android
npm run android
# For iOS
npm run iosβ If you see "Shurutech RN Boilerplate" and can navigate to Details, you're ready!
Before starting, make sure you have:
- β Node.js 18 or higher
- β Android Studio (for Android) OR Xcode (for iOS, Mac only)
- β
CocoaPods installed (for iOS:
sudo gem install cocoapods)
Need help setting up? Follow the React Native Environment Setup
β
React Native 0.80.2
β
TypeScript (strict mode)
β
React Navigation (Stack & Tabs ready)
β
Redux Toolkit + Redux Persist
β
Axios (API client)
β
Path aliases (@components, @screens, etc.)
β
Environment variables (.env support)
β
ESLint + Prettier
β
Sample screens & components
src/
βββ components/ # Reusable UI components
βββ screens/ # App screens (Home, Details)
βββ navigation/ # Navigation setup
βββ services/ # API services
βββ store/ # Redux store & slices
βββ types/ # TypeScript definitions
βββ constants/ # Colors, configs
βββ utils/ # Helper functions
βββ hooks/ # Custom hooks
βββ assets/ # Images, fonts
npm start # Start Metro bundler
npm run android # Run on Android
npm run ios # Run on iOSnpm run typecheck # TypeScript type checking
npm run lint # Check code quality
npm run lint:fix # Auto-fix issues
npm run format # Format with Prettiernpm start -- --reset-cache # Clear Metro cache
npm run android:clean # Clean Android build
npm run ios:clean # Clean iOS build// β
Use this
import HomeScreen from '@screens/Home/HomeScreen';
import { api } from '@services/api';
import { colors } from '@constants/colors';
// β Instead of this
import HomeScreen from '../../../screens/Home/HomeScreen';Change API URL: Edit .env file β API_BASE_URL=your-url
import { useNavigation } from '@react-navigation/native';
const MyComponent = () => {
const navigation = useNavigation();
const goToDetails = () => {
navigation.navigate('Details', { id: '123' });
};
return <Button onPress={goToDetails} title="Go" />;
};import { useSelector, useDispatch } from 'react-redux';
const MyComponent = () => {
const data = useSelector(state => state.yourSlice);
const dispatch = useDispatch();
dispatch(yourAction());
};1. Create the file:
mkdir -p src/screens/Profile2. Add to navigation types:
// src/types/navigation.ts
export type RootStackParamList = {
Home: undefined;
Details: { id: string };
Profile: undefined; // Add this
};3. Register in navigator:
// src/navigation/AppNavigator.tsx
<Stack.Screen name="Profile" component={ProfileScreen} />1. Create slice:
touch src/store/slices/yourSlice.ts2. Add to store:
// src/store/index.ts
import yourReducer from './slices/yourSlice';
const rootReducer = combineReducers({
your: yourReducer,
});- β
Verify app runs:
npm run androidornpm run ios - β
Check no errors:
npm run typecheck && npm run lint - β Test navigation works
- β Familiarize yourself with folder structure
- π€ Think before coding - Plan your approach
- π Write clean code - Use TypeScript, handle errors
- π¬ Communicate - Explain your thinking
- β Ask questions - When stuck or unclear
npm start -- --reset-cache# Restart TypeScript server in VS Code
Cmd+Shift+P β "TypeScript: Restart TS Server"cd android && ./gradlew clean && cd ..
npm run androidcd ios && rm -rf Pods Podfile.lock && pod install && cd ..
npm run ios- Read the error message carefully
- Google the exact error
- Check React Native Docs
- Ask your interviewer!
Run this before your interview:
# 1. Update dependencies
npm install
# 2. Update iOS pods (Mac only)
cd ios && pod install && cd ..
# 3. Verify no TypeScript errors
npm run typecheck
# 4. Verify no linting errors
npm run lint
# 5. Test the app
npm run android # or npm run ios
# 6. Test navigation
# Click "Go to Details" β Should work
# Click "Go Back" β Should work
# All β
? You're ready! πimport { View, Text, StyleSheet } from 'react-native';
import { useNavigation } from '@react-navigation/native';
import { useSelector, useDispatch } from 'react-redux';
import { api } from '@services/api';
import { colors } from '@constants/colors';import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { colors } from '@constants/colors';
const MyScreen: React.FC = () => {
return (
<View style={styles.container}>
<Text style={styles.text}>Hello World</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: colors.background,
},
text: {
color: colors.text,
},
});
export default MyScreen;- π± React Native
- π§ React Navigation
- ποΈ Redux Toolkit
- π TypeScript
Learn more at https://shurutech.com/
- Before interview: Contact your interview coordinator
- During interview: Ask your interviewer
- Technical setup: Check troubleshooting section above
Good luck! π
This boilerplate is designed to help you focus on solving problems, not fighting configuration.