πŸ“š Boilerplate Documentation

Main Index

πŸš€ Quick Start

DocumentDescription
QUICKSTART⭐ Start here - Quick changes in 5 minutes
FEATURESπŸ“± Complete list of implemented features

πŸ“ Fundamental Guides

DocumentDescription
ARCHITECTUREProject structure, patterns and conventions
COMPONENTSComplete guide to reusable components
STATE_MANAGEMENTState management with React Query and Context
NAVIGATIONNavigation system with Expo Router
STYLINGDesign system, colors and styles
ADDING_FEATURESStep-by-step guide to add features

πŸ”§ Reference Guides

DocumentDescription
HOOKSπŸͺ Custom hooks and usage patterns
CONTEXTS🌐 Available contexts (Theme, I18n, App, Toast)
UTILSπŸ”§ Utility functions (formatting, haptics, etc.)
TYPESπŸ“ TypeScript reference
MOCKS🎭 Mock data for development
TESTINGπŸ§ͺ Unit tests, E2E tests with Jest and Maestro

πŸ”Œ Integration Guides

DocumentDescription
AUTHENTICATIONπŸ” User authentication system
DATABASEπŸ—„οΈ Database integration
PAYMENTSπŸ’° Payments and subscriptions with RevenueCat
NOTIFICATIONSπŸ”” Push and local notifications
ANALYTICSπŸ“Š Analytics and event tracking
AIπŸ€– AI features
REVENUECATπŸ’³ RevenueCat technical reference
I18N🌍 Internationalization and translations
DEEP_LINKINGπŸ”— Deep links and universal links
ERROR_TRACKINGπŸ› Error tracking and crash reporting

πŸš€ Store Submission

DocumentDescription
STORE_SUBMISSIONπŸ“± App Store & Google Play submission guide
STORE_ASSETS🎨 Icons, screenshots and marketing assets

πŸš€ Included Features

UI Components

ComponentDescriptionLocation
ButtonButton with variants (primary, secondary, outline, ghost, gradient)components/Button.tsx
CardCard with variants (default, horizontal, compact)components/Card.tsx
InputInput field with validationcomponents/Input.tsx
AvatarAvatar with image or initialscomponents/Avatar.tsx
SearchBarSearch bar with animationcomponents/SearchBar.tsx
FilterModalAnimated filter modalcomponents/FilterModal.tsx
SkeletonLoaderAnimated loading placeholderscomponents/SkeletonLoader.tsx
ToastTemporary notificationscomponents/Toast.tsx
EmptyStateEmpty state with actioncomponents/EmptyState.tsx
CategoryChipSelectable category chipscomponents/CategoryChip.tsx
StatCardStatistics cardcomponents/StatCard.tsx
SettingsRowSettings rowcomponents/SettingsRow.tsx
IconButtonIcon-only buttoncomponents/IconButton.tsx

Contexts and State

ContextDescriptionLocation
AppContextMain state (user, favorites, settings)contexts/AppContext.tsx
ThemeContextTheme system (light/dark/system)contexts/ThemeContext.tsx
ToastContextToast notification systemcontexts/ToastContext.tsx
I18nContextInternationalization and translationscontexts/I18nContext.tsx
AuthContextUser authenticationcontexts/AuthContext.tsx
NotificationsContextPush and local notificationscontexts/NotificationsContext.tsx
AnalyticsContextEvent tracking and analyticscontexts/AnalyticsContext.tsx
PurchasesContextIn-app purchases with RevenueCatcontexts/PurchasesContext.tsx

Screens (Tabs)

ScreenDescriptionRoute
HomeDashboard with stats and recent items/(tabs)/(home)
ExploreItem list with search and filters/(tabs)/explore
FavoritesItems saved as favorites/(tabs)/favorites
ActivityActivity feed/(tabs)/activity
MessagesMessaging system/(tabs)/messages
ProfileUser profile and settings/(tabs)/profile

Screens (Modals/Stack)

ScreenDescriptionRoute
Item DetailItem details/(tabs)/(home)/item-detail
Edit ProfileEdit user profile/(tabs)/profile/edit-profile
ChatIndividual conversation/(tabs)/messages/[chatId]
NotificationsNotifications list/notifications
OnboardingWelcome screen/onboarding

πŸ› οΈ Quick Modification Guide

Add a New Screen

// 1. Create file in app/(tabs)/my-tab/index.tsx
import { View, Text, StyleSheet } from 'react-native';
import { useTheme } from '@/contexts/ThemeContext';

export default function MyTabScreen() {
  const { colors } = useTheme();
  
  return (
    <View style={[styles.container, { backgroundColor: colors.background }]}>
      <Text style={[styles.title, { color: colors.text }]}>My Tab</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, padding: 16 },
  title: { fontSize: 24, fontWeight: 'bold' },
});

// 2. Create _layout.tsx in the same folder
import { Stack } from 'expo-router';

export default function MyTabLayout() {
  return (
    <Stack>
      <Stack.Screen name="index" options={{ title: 'My Tab' }} />
    </Stack>
  );
}

// 3. Register in app/(tabs)/_layout.tsx
<Tabs.Screen
  name="my-tab"
  options={{
    title: 'My Tab',
    tabBarIcon: ({ color, size }) => <Icon size={size} color={color} />,
  }}
/>

Show a Toast

const { showToast } = useToast();
showToast('Success message', 'success');
showToast('There was an error', 'error');

Change Theme

const { setTheme, isDark, colors } = useTheme();
setTheme('dark'); // 'light' | 'dark' | 'system'

Change Language

const { setLanguage, t, language } = useI18n();
setLanguage('en'); // 'es' | 'en'
const text = t.common.save;

Favorites

const { toggleFavorite, isFavorite } = useApp();
toggleFavorite(itemId);
const isFav = isFavorite(itemId);
const router = useRouter();
router.push('/explore');
router.push({ pathname: '/(tabs)/(home)/item-detail', params: { id: '123' } });
router.back();

πŸ“‚ File Structure

β”œβ”€β”€ app/                    # Screens and navigation (Expo Router)
β”‚   β”œβ”€β”€ (tabs)/            # Tab navigation
β”‚   β”‚   β”œβ”€β”€ (home)/        # Home tab with internal stack
β”‚   β”‚   β”œβ”€β”€ explore/       # Explore tab
β”‚   β”‚   β”œβ”€β”€ favorites/     # Favorites tab
β”‚   β”‚   β”œβ”€β”€ activity/      # Activity tab
β”‚   β”‚   β”œβ”€β”€ messages/      # Messages tab
β”‚   β”‚   └── profile/       # Profile tab
β”‚   β”œβ”€β”€ _layout.tsx        # Root layout
β”‚   β”œβ”€β”€ notifications.tsx  # Notifications modal
β”‚   └── onboarding.tsx     # Welcome screen
β”œβ”€β”€ components/             # Reusable components
β”œβ”€β”€ contexts/               # Global state (Context + React Query)
β”œβ”€β”€ constants/              # Colors, spacing, configuration
β”œβ”€β”€ mocks/                  # Test data for development
β”œβ”€β”€ types/                  # TypeScript definitions
β”œβ”€β”€ utils/                  # Helper functions
└── docs/                   # This documentation

πŸ”§ Useful Scripts

# Start development
npx expo start

# Clear cache
npx expo start -c

# Check TypeScript types
npx tsc --noEmit

# Check ESLint
npx eslint .

πŸ“– Learning Path

If you're new:

  1. ⭐ Start with QUICKSTART - Learn to make basic changes
  2. πŸ“± Read FEATURES - Discover all features
  3. πŸ—οΈ Review ARCHITECTURE - Understand the structure

For development:

  1. 🧩 Check COMPONENTS - Available components
  2. πŸͺ Learn HOOKS - Custom hooks
  3. 🌐 Understand CONTEXTS - State system
  4. ✨ Follow ADDING_FEATURES - Add features

For reference:

  1. πŸ“ Types: TYPES - TypeScript reference
  2. πŸ”§ Utils: UTILS - Utility functions
  3. 🎭 Mocks: MOCKS - Development data
  4. πŸ§ͺ Testing: TESTING - Unit and E2E tests

For integrations:

  1. πŸ” See AUTHENTICATION - User system
  2. πŸ—„οΈ See DATABASE - Persistence and databases
  3. πŸ’° See PAYMENTS - Monetization with subscriptions
  4. πŸ”” See NOTIFICATIONS - Push notifications
  5. πŸ“Š See ANALYTICS - Analytics and tracking
  6. πŸ€– See AI - AI features
  7. 🌍 See I18N - Translations and localization
  8. πŸ”— See DEEP_LINKING - Deep links configuration
  9. πŸ› See ERROR_TRACKING - Error tracking setup

For store submission:

  1. πŸ“± See STORE_SUBMISSION - Submit to stores
  2. 🎨 See STORE_ASSETS - Create store assets

πŸ“Š Documentation Summary

CategoryDocumentsPurpose
StartQUICKSTART, FEATURESGet started quickly
ArchitectureARCHITECTURE, NAVIGATION, STATE_MANAGEMENTUnderstand structure
DevelopmentCOMPONENTS, HOOKS, CONTEXTS, ADDING_FEATURESCreate features
ReferenceTYPES, UTILS, MOCKS, STYLING, TESTINGQuick reference
IntegrationAUTH, DATABASE, PAYMENTS, NOTIFICATIONS, ANALYTICS, AI, I18N, DEEP_LINKING, ERROR_TRACKINGConnect services
StoreSTORE_SUBMISSION, STORE_ASSETSPublish to stores

Total: 25 reference documents