A React Native (Expo) app with essential travel tips for Japan, featuring swipeable category cards, dark mode, and offline support.
japan-tips-app/
βββ App.tsx # Entry point
βββ app.json # Expo config
βββ eas.json # EAS Build & Submit config
βββ package.json
βββ tsconfig.json
βββ src/
βββ components/
β βββ CategoryCard.tsx # Grid card on home screen
β βββ TipCard.tsx # Swipeable tip detail card
β βββ SwipeIndicator.tsx # Dot pagination
βββ data/
β βββ tips.json # All tips data (edit this to add content!)
βββ hooks/
β βββ useTips.ts # TanStack Query hooks
βββ navigation/
β βββ AppNavigator.tsx # Stack navigator
β βββ types.ts # Navigation param types
βββ screens/
β βββ HomeScreen.tsx # Category grid
β βββ CategoryScreen.tsx # Swipeable tips within a category
βββ theme/
β βββ index.ts # Light/Dark theme system
βββ types/
βββ index.ts # TypeScript interfaces
npm install -g expo-clinpm install -g eas-clicd japan-tips-app
npm install
npx expo start
Scan the QR code with Expo Go (Android) or Camera app (iOS).
Edit src/data/tips.json. Each category follows this structure:
{
"id": "unique-slug",
"title": "Category Name",
"icon": "π",
"color": "#HEX",
"tips": [
{
"id": "tip-slug",
"title": "Tip Title",
"emoji": "π‘",
"content": "Tip description text..."
}
]
}
Thatβs it β no code changes needed when adding tips!
In app.json, update:
ios.bundleIdentifier β your reverse domain (e.g., com.yourcompany.japantips)android.package β same formatIn eas.json, update:
submit.production.ios β your Apple ID, ASC App ID, Team IDsubmit.production.android β path to your Google Play service account JSON# iOS
eas build --platform ios --profile production
# Android
eas build --platform android --profile production
# iOS β App Store Connect
eas submit --platform ios
# Android β Google Play Console
eas submit --platform android