A production-ready React Native Expo application with Firebase Authentication, API integration, custom UI components, Ming Cute icons, and dark/light theme support.
- π Firebase Authentication (Email/Password)
- π¨ Custom UI components (Button, Input, Dropdown, Tabs, AppBar, PhoneInput)
- π― Ming Cute icons integration
- π Dark/Light mode theme with system preference detection
- π± React Navigation (Stack & Tab navigators)
- ποΈ Zustand state management
- π Axios API client with interceptors
- πΎ AsyncStorage & SecureStore for data persistence
- π TypeScript support
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI (
npm install -g expo-cli) - Firebase project setup
- iOS Simulator / Android Emulator or physical device
- Clone the repository:
git clone <repository-url>
cd PulseExpoApp- Install dependencies:
npm install- Set up environment variables:
cp .env.example .env- Edit
.envfile with your Firebase and API credentials:
EXPO_PUBLIC_API_URL=https://your-api-url.com
EXPO_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
EXPO_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
EXPO_PUBLIC_FIREBASE_APP_ID=your_app_id
- Create a Firebase project at Firebase Console
- Enable Email/Password authentication in Authentication section
- Copy your Firebase config values to
.envfile - For iOS: Download
GoogleService-Info.plistand add toios/directory - For Android: Download
google-services.jsonand add toandroid/app/directory
npm startThen press:
ifor iOS simulatorafor Android emulatorwfor web browser
npm run ios # iOS simulator
npm run android # Android emulator
npm run web # Web browserSee APP_STRUCTURE.md for detailed project structure documentation.
- expo: ~54.0.31
- react-native: 0.81.5
- @react-navigation/native: ^6.1.9
- firebase: ^10.7.1
- axios: ^1.6.2
- zustand: ^4.4.7
Note: Ming Cute Icons are integrated directly from SVG files. The icon library is included in the project at src/components/ui/Icon/mingcute-icons/.
import { Button, Input, Dropdown, Tabs, AppBar, PhoneInput, Text } from '@/components/ui';
// Button
<Button variant="primary" onPress={handlePress}>
Click Me
</Button>
// Input
<Input
label="Email"
placeholder="Enter email"
value={email}
onChangeText={setEmail}
/>
// Dropdown
<Dropdown
label="Select Option"
options={options}
selectedValue={selected}
onValueChange={setSelected}
/>
// Tabs
<Tabs
items={tabItems}
defaultActiveKey="tab1"
onTabChange={handleTabChange}
/>
// AppBar
<AppBar
title="Screen Title"
onBackPress={() => navigation.goBack()}
/>
// PhoneInput
<PhoneInput
value={phoneNumber}
onChangeText={setPhoneNumber}
onChangeCountry={setCountryCode}
/>
// Text (with global font styling)
<Text style={{ fontSize: 16 }}>Custom styled text</Text>import { Icon } from '@/components/ui';
import { ICONS } from '@/constants/icons';
<Icon name={ICONS.HOME} size={24} color="#000" />import { useTheme } from '@/hooks/useTheme';
import { useThemeStore } from '@/store/slices/themeSlice';
function MyComponent() {
const { colors, spacing } = useTheme();
const { mode, setMode } = useThemeStore();
// Change theme mode
setMode('dark'); // or 'light' or 'system'
}import { signIn, signUp, signOut } from '@/services/firebase/auth';
// Sign in
await signIn({ email: 'user@example.com', password: 'password' });
// Sign up
await signUp({ email: 'user@example.com', password: 'password' });
// Sign out
await signOut();import { api } from '@/services/api/client';
// GET request
const response = await api.get('/users');
// POST request
const response = await api.post('/users', { name: 'John' });- Configure API Endpoints: Update
src/services/api/endpoints.tswith your actual API endpoints - Customize Theme: Modify colors in
src/constants/styles.tsto match your brand - Add Features: Start building features in the
src/features/directory - Extend UI Components: Customize and extend UI components in
src/components/ui/as needed
npm start -- --reset-cachecd ios && pod install && cd ..cd android && ./gradlew clean && cd ..- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
MIT License
For issues and questions, please open an issue on GitHub.