Back to articles
Mobile Development

React Native: Building Cross-Platform Apps

Lessons from building Seleda, a platform with 28K+ downloads. Multi-theme support, SMS integrations, and performance optimization strategies.

December 20, 202511 min read

The Seleda Journey

When I joined Toptech IT Solution, we needed to build a marketplace app that worked on both iOS and Android. With limited resources and time, React Native was the obvious choice.

Why React Native?

Pros We Experienced

  • Single codebase for iOS and Android
  • Hot reload for rapid development
  • JavaScript/TypeScript (team already knew React)
  • Large ecosystem of libraries
  • Cons We Managed

  • Performance for complex animations
  • Native module integration complexity
  • Platform-specific bugs
  • Key Features Implemented

    Multi-Theme Support

    Users could switch between light and dark themes:

    const ThemeContext = createContext<ThemeContextType>(defaultTheme);

    export function ThemeProvider({ children }: { children: ReactNode }) {

    const [theme, setTheme] = useState<'light' | 'dark'>('light');

    const colors = theme === 'light' ? lightColors : darkColors;

    return (

    <ThemeContext.Provider value={{ theme, setTheme, colors }}>

    {children}

    </ThemeContext.Provider>

    );

    }

    SMS Integration

    For user verification and notifications:

    // Using react-native-sms

    import SendSMS from 'react-native-sms';

    const sendVerification = async (phone: string, code: string) => {

    await SendSMS.send({

    body: `Your Seleda verification code is: ${code}`,

    recipients: [phone],

    });

    };

    Performance Optimizations

    With 8K+ active users, performance was critical:

  • **FlatList optimization**
  • Implemented `getItemLayout` for fixed-height items
  • Used `removeClippedSubviews`
  • Windowed rendering for long lists
  • **Image optimization**
  • FastImage for caching
  • Progressive loading
  • Proper sizing to avoid memory issues
  • **Navigation**
  • Lazy loading screens
  • Minimal re-renders on navigation
  • Results

    After 18 months of development:

  • 28K+ downloads
  • 8K+ active users
  • 4.2 star rating
  • 80% of UI built by me
  • Architecture Decisions

    State Management

    We used Redux with Redux Toolkit:

  • Predictable state
  • DevTools for debugging
  • Middleware for side effects
  • API Layer

    Abstracted all API calls:

    const api = {

    products: {

    list: (params) => client.get('/products/', { params }),

    detail: (id) => client.get(`/products/${id}/`),

    create: (data) => client.post('/products/', data),

    },

    // ... other resources

    };

    Lessons for Future Projects

  • **Start with TypeScript** - We migrated later; should have started with it
  • **Design system first** - Create reusable components before building screens
  • **Test on real devices early** - Simulators hide performance issues
  • **Plan for offline** - Users expect apps to work without internet
  • React Native enabled us to ship a quality product with a small team. The trade-offs were worth it.