← Back to Skills

moai-domain-mobile-app

modu-ai
Updated Today
92 views
424
78
424
View on GitHub
Testingmobilereact-nativefluttercapacitorioniccross-platformtestingdeployment

About

This Claude Skill provides enterprise mobile development expertise for React Native 0.76+, Flutter 3.24+, and Capacitor 6.x cross-platform frameworks. It focuses on implementing robust patterns, comprehensive testing, and CI/CD automation for production-ready mobile applications. Use this skill for guidance on mobile architecture, performance optimization, and deployment strategies.

Quick Install

Claude Code

Recommended
Plugin CommandRecommended
/plugin add https://github.com/modu-ai/moai-adk
Git CloneAlternative
git clone https://github.com/modu-ai/moai-adk.git ~/.claude/skills/moai-domain-mobile-app

Copy and paste this command in Claude Code to install this skill

Documentation

moai-domain-mobile-app

Enterprise Mobile Development Excellence

Version: 4.0.0 (React Native 0.76+, Flutter 3.24+) Technology Stack: Modern async mobile development with CI/CD automation Focus: Cross-platform strategies, performance optimization, production deployment


πŸ“– Progressive Disclosure

Level 1: Quick Reference (Core Concepts)

Purpose: Enterprise mobile development covering React Native, Flutter, Capacitor with modern patterns.

Core Stack (2025 Stable):

  • React Native: 0.76+ (New Architecture default)
  • Flutter: 3.24+ (Dart 3.5+)
  • Expo: 52.x (EAS Build/Submit)
  • Navigation: React Navigation 6.x, Flutter Navigator 2.x
  • State: Provider 6.x, GetX 4.x, Redux Toolkit
  • Testing: Detox 20.x (E2E), Jest 30.x (Unit)
  • CI/CD: GitHub Actions, fastlane 2.x, EAS Build

Quick Setup Patterns:

React Native App Structure:

// Main app with modern navigation
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import AsyncStorage from '@react-native-async-storage/async-storage';

export const AppNavigator = () => (
  <NavigationContainer>
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
      <Stack.Screen name="Profile" component={ProfileScreen} />
    </Stack.Navigator>
  </NavigationContainer>
);

Flutter App Structure:

import 'package:flutter/material.dart';
import 'package:flutter/services/navigation.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter App',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: MyHomePage(),
      routes: {
        '/': (context) => MyHomePage(),
        '/profile': (context) => ProfilePage(),
      },
    );
  }
}

When to Use:

  • βœ… Native iOS/Android app development
  • βœ… Cross-platform apps with shared business logic
  • βœ… Web app deployment (Capacitor/Ionic)
  • βœ… Performance optimization and battery management
  • βœ… E2E automation and CI/CD integration

Level 2: Practical Implementation (Essential Patterns)

Pattern 1: React Native Architecture (0.76+)

Modern Setup:

npx react-native@latest init MyApp --template
cd MyApp
npm install @react-navigation/native @react-native-async-storage @react-native-community/netinfo

Async Data Management:

const [products, setProducts] = useState<Product[]>([]);
const [loading, setLoading] = useState(false);
const [isOnline, setIsOnline] = useState(true);

// Load from cache first, then API
const loadProducts = useCallback(async () => {
  try {
    setLoading(true);

    // Try cache first
    const cached = await AsyncStorage.getItem('products');
    if (cached) {
      setProducts(JSON.parse(cached));
    }

    // Fetch fresh data if online
    if (isOnline) {
      const response = await fetch('https://api.example.com/products');
      const data = await response.json();
      setProducts(data);
      await AsyncStorage.setItem('products', JSON.stringify(data));
    }
  } finally {
    setLoading(false);
  }
}, [isOnline]);

Pattern 2: Testing Strategy

Detox E2E Testing:

// detox/e2e/app.config.js
module.exports = {
  testEnvironment: 'node',
  testRunner: 'jest',
  setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
};

Component Testing:

// Component Testing with React Testing Library
import { render, screen, fireEvent } from '@testing-library/react-native';
import { renderHook } from '@testing-library/react-native');

it('should render correctly', () => {
  render(<HomeScreen />);
  expect(screen.getByText('Welcome')).toBeTruthy();
});

Pattern 3: Performance Optimization

Image Optimization:

const OptimizedImage = ({ uri, style, resizeMode, width, height }) => {
  return (
    <Image
      source={{ uri }}
      style={style}
      resizeMode={resizeMode}
      width={width}
      height={height}
      onLoad={handleImageLoad}
      onError={() => console.log('Image failed to load')}
    />
  );
};

Level 3: Advanced Integration (Complex Scenarios)

Pattern 1: Capacitor Plugin Development

Plugin Structure:

// capacitor-plugin/src/index.ts
import { registerPlugin } from '@capacitor/core';

export interface CustomPluginPlugin {
  echo(options: { value: string }): Promise<{ value: string }>;
  openNativeScreen(): Promise<void>;
}

export const CustomPlugin = registerPlugin<CustomPlugin>('CustomPlugin', {
  web: () => import('./web').then(m => new m.CustomPluginWeb()),
});

React Native Integration:

// capacitor.config.ts
import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  plugins: [
    {
      name: 'Camera',
      plugins: ['camera', 'filesystem']
    }
  ]
};

export default config;

Pattern 2: Cross-Platform Business Logic

Shared Service Architecture:

// services/user-service.ts
export class UserService {
  async getUserProfile(userId: string): Promise<UserProfile> {
    // Shared implementation across platforms
    return await this.apiCall(`/users/${userId}`);
  }
}

Platform-Specific Implementations:

// services/platform-specific/web-service.ts
export class WebUserService implements UserService {
  async getUserProfile(userId: string): Promise<UserProfile> {
    const response = await fetch(`/api/users/${userId}`);
    return response.json();
  }
}

// services/platform-specific/mobile-service.ts
export class MobileUserService implements UserService {
  async getUserProfile(userId: string): Promise<UserProfile> {
    const user = await this.realm.objects.get(userId);
    return user.profile || null;
  }
}

Pattern 3: Advanced Production Features

Sentry Integration:

import * as Sentry from '@sentry/react-native';
import { ReactNode } from 'react';

Sentry.init({
  dsn: 'https://@[key]@[domain].ingest.sentry.io/[projectId]',
  tracesSampleRate: 1.0,
  environment: __DEV__ ? 'development' : 'production',
  integrations: [
    new Sentry.BrowserTracing(),
    new Sentry.ReactNavigationRoutingInstrumentation()
  ]
});

Custom Metrics:

import Analytics from 'analytics-react-native';
import { MetricsCollector } from './metrics';

const AppAnalytics = Analytics.getAnalytics({
  trackAppSessions: true,
  trackScreen: true,
  trackUserProperties: true,
  trackExceptions: true
});

Analytics.track('screen_view', { screen: 'Home', platform: platform });

🎯 Decision Matrix

ScenarioBest ChoiceWhy
Dashboard AppTabler Icons (5900+)Optimized for admin UI
Tailwind ProjectHeroicons (official)Native integration
Multiple WeightsPhosphor (6 weights)Design flexibility
200K+ IconsIconify (universal)Complete coverage
Compact UIRadix Icons (~5KB)Minimal bundle

πŸ“Š Technology Comparison

FrameworkIconsBundle SizeUse CaseType System
React Native1000+Native appsTypeScriptMedium
Flutter800+Cross-platformDartHigh
Capacitor500+Hybrid appsWeb + nativeMedium
Ionic1300+Hybrid appsAngular/ReactMedium

πŸ”— Related Skills

  • Skill("moai-domain-frontend") – UI/UX integration patterns
  • Skill("moai-domain-testing") - Mobile testing strategies
  • Skill("moai-domain-devops") - CI/CD and deployment
  • Skill("moai-domain-backend") - API integration and data management

Version: 4.0.0 Enterprise Last Updated: 2025-11-13 Status: Production Ready Stack: React Native 0.76+, Flutter 3.24+, Capacitor 6.x

GitHub Repository

modu-ai/moai-adk
Path: .claude/skills/moai-domain-mobile-app
agentic-aiagentic-codingagentic-workflowclaudeclaudecodevibe-coding

Related Skills

evaluating-llms-harness

Testing

This Claude Skill runs the lm-evaluation-harness to benchmark LLMs across 60+ standardized academic tasks like MMLU and GSM8K. It's designed for developers to compare model quality, track training progress, or report academic results. The tool supports various backends including HuggingFace and vLLM models.

View skill

webapp-testing

Testing

This Claude Skill provides a Playwright-based toolkit for testing local web applications through Python scripts. It enables frontend verification, UI debugging, screenshot capture, and log viewing while managing server lifecycles. Use it for browser automation tasks but run scripts directly rather than reading their source code to avoid context pollution.

View skill

finishing-a-development-branch

Testing

This skill helps developers complete finished work by verifying tests pass and then presenting structured integration options. It guides the workflow for merging, creating PRs, or cleaning up branches after implementation is done. Use it when your code is ready and tested to systematically finalize the development process.

View skill

content-collections

Meta

This skill provides a production-tested setup for Content Collections, a TypeScript-first tool that transforms Markdown/MDX files into type-safe data collections with Zod validation. Use it when building blogs, documentation sites, or content-heavy Vite + React applications to ensure type safety and automatic content validation. It covers everything from Vite plugin configuration and MDX compilation to deployment optimization and schema validation.

View skill