{"id":25802323,"url":"https://github.com/lhersey/expo-template","last_synced_at":"2026-04-10T11:02:11.469Z","repository":{"id":37093107,"uuid":"303230584","full_name":"lHersey/expo-template","owner":"lHersey","description":"Expo template with theme support, linter, husky, prettier, jest, and more","archived":false,"fork":false,"pushed_at":"2025-03-25T21:52:50.000Z","size":249,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-25T22:23:48.475Z","etag":null,"topics":["dev","expo","production","react-native","react-navigation","template"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lHersey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-11T23:22:14.000Z","updated_at":"2025-03-25T21:52:53.000Z","dependencies_parsed_at":"2025-02-27T17:34:03.692Z","dependency_job_id":null,"html_url":"https://github.com/lHersey/expo-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/lHersey/expo-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lHersey%2Fexpo-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lHersey%2Fexpo-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lHersey%2Fexpo-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lHersey%2Fexpo-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lHersey","download_url":"https://codeload.github.com/lHersey/expo-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lHersey%2Fexpo-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31639524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dev","expo","production","react-native","react-navigation","template"],"created_at":"2025-02-27T16:58:01.535Z","updated_at":"2026-04-10T11:02:11.444Z","avatar_url":"https://github.com/lHersey.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📱 Expo Template\r\n\r\nA modern React Native application template built with Expo, featuring a comprehensive setup for building production-ready mobile applications. This template includes theme handling, testing infrastructure, code quality tools, and optimized build configurations.\r\n\r\n## ✨ Features\r\n\r\n- 📱 **React Native with Expo** - Modern mobile app development framework\r\n- 🏗️ **TypeScript** - Type-safe code development\r\n- 🎨 **Theme System** - Light/dark mode with persistence\r\n- ✅ **Testing Framework** - Jest and React Native Testing Library setup\r\n- 🧹 **Code Quality** - ESLint, Prettier, TypeScript strict mode\r\n- 🔄 **Git Hooks** - Husky for pre-commit validation\r\n- 📦 **AsyncStorage** - Local data persistence\r\n- 🚀 **Multiple Build Types** - Development, Preview, and Production builds\r\n\r\n## 🛠️ Prerequisites\r\n\r\n- Node.js v22.14.0 (specified in .nvmrc)\r\n- Expo CLI\r\n- Yarn or npm\r\n\r\n## 🚀 Installation\r\n\r\n```bash\r\n# Clone the repo\r\ngit clone https://github.com/lhersey/expo-template.git\r\n\r\n# Navigate to the project folder\r\ncd expo-template\r\n\r\n# Install dependencies (Use yarn or any the package manager of your preference)\r\nnpm install\r\n```\r\n\r\n## 📋 Available Scripts\r\n\r\n```bash\r\n# Start Expo development server\r\nnpm run start\r\n\r\n# Start Expo for specific platforms\r\nnpm run android\r\nnpm run ios\r\nnpm run web\r\n\r\n# Linting\r\nnpm run lint\r\n\r\n# Testing\r\nnpm run test            # Run all tests silently\r\nnpm run test:ci         # Run tests in CI environment\r\nnpm run test:watch      # Run tests in watch mode\r\n\r\n# Code health\r\nnpm run doctor          # Run Expo Doctor for project health check\r\n\r\n# Building\r\nnpm run build:dev:android       # Build Android DEV client app\r\nnpm run build:dev:ios           # Build iOS DEV client app (Real device)\r\nnpm run build:dev:simulator     # Build iOS DEV client app (Simulator)\r\nnpm run build:preview:android   # Build Android preview\r\nnpm run build:preview:ios       # Build iOS preview\r\nnpm run build:prod:android      # Build Android production\r\nnpm run build:prod:ios          # Build iOS production\r\n```\r\n\r\n## 📁 Project Structure\r\n\r\n```\r\nexpo-template/\r\n├── .husky/                # Git hooks configuration\r\n├── assets/                # Static assets\r\n│   └── icons/             # App icons for different build types\r\n├── src/\r\n│   ├── screens/           # Screen components\r\n│   │   └── home-screen/   # Home screen component and tests\r\n│   ├── styles/            # Style configurations\r\n│   │   └── theme/         # Theme management system\r\n│   └── shared/            # Shared components and utilities\r\n├── App.tsx                # Main application component\r\n├── app.config.ts          # Expo configuration with dynamic environment settings\r\n├── babel.config.js        # Babel configuration\r\n├── eslint.config.mjs      # ESLint configuration\r\n├── jest.config.js         # Jest configuration\r\n├── metro.config.js         # Metro bundler configuration\r\n├── lint-staged.config.mjs # Lint-staged configuration\r\n└── tsconfig.json          # TypeScript configuration\r\n```\r\n\r\n## Configuration and Setup\r\n\r\n#### **Theme System**\r\n\r\nThe app includes a fully implemented theme system with light and dark modes. The theme state is persisted using `AsyncStorage` and automatically syncs with the device's preferred color scheme.\r\n\r\nLocated in `src/styles/theme/`\r\nUses ThemeProvider component to manage theme state\r\nIncludes custom hooks like `useStylesWithTheme` for applying themed styles\r\nSupports dynamic theme switching with proper TypeScript typing\r\nLight and dark themes with consistent color palette\r\n\r\n#### **Testing**\r\n\r\nTesting infrastructure is set up with Jest and React Native Testing Library:\r\n\r\n- Jest as the test runner with Expo preset\r\n- React Native Testing Library for component testing\r\n- Custom test utilities and mock implementations\r\n- Sample tests for components like HomeScreen\r\n\r\nRun tests with:\r\n\r\n```bash\r\nnpm test\r\n```\r\n\r\n## Code Quality Tools\r\n\r\n#### **ESLint**\r\n\r\nESLint is configured with best practices for React Native and TypeScript:\r\n\r\n- React/React Native specific rules\r\n- TypeScript strict checking\r\n- Import sorting with eslint-plugin-simple-import-sort\r\n- Promise handling rules with eslint-plugin-promise\r\n- Testing best practices with eslint-plugin-testing-library and eslint-plugin-jest\r\n\r\n#### **Prettier**\r\n\r\nCode formatting is automated with Prettier:\r\n\r\n- Consistent code style enforced across the project\r\n- Integration with ESLint via eslint-plugin-prettier\r\n- Single quotes, trailing commas, and 120 character line width as defaults\r\n\r\n#### **Husky and lint-staged**\r\n\r\n- Runs tests via pre-commit hook\r\n- Processes staged files with lint-staged\r\n- Enforces commit message conventions with commitlint\r\n\r\n## Build Configuration\r\n\r\nThe app uses Expo's configuration system to manage different build environments:\r\n\r\n- **Development**: Includes debugging tools and development features\r\n- **Preview**: Testing builds for QA and beta testing\r\n- **Production**: Optimized builds for release\r\n\r\nApp configuration is defined in app.config.ts with dynamic environment-based settings for:\r\n\r\n- App name and bundle identifiers\r\n- App icons and splash screens\r\n- Native configuration for iOS and Android\r\n\r\n## 📚 Documentation\r\n\r\nExplore the following documentation to learn more about the project and its features:\r\n\r\n- [Introduction to EAS Update](docs/updates/introduction.md)\r\n- [Theming](docs/themes/introduction.md)\r\n- [App icon generation and app variants](docs/app-icons/introduction.md)\r\n\r\n#### Documentation Links\r\n\r\n- [Expo Documentation](https://docs.expo.dev/)\r\n- [React Native Documentation](https://reactnative.dev/docs/getting-started)\r\n- [TypeScript Documentation](https://www.typescriptlang.org/docs/)\r\n- [ESLint Documentation](https://eslint.org/docs/latest/)\r\n- [Jest Documentation](https://jestjs.io/docs/getting-started)\r\n- [Testing Library Documentation](https://testing-library.com/docs/react-native-testing-library/intro/)\r\n- [AsyncStorage Documentation](https://react-native-async-storage.github.io/async-storage/docs/install/)\r\n- [Expo Application Services (EAS)](https://docs.expo.dev/eas/)\r\n- [Husky Documentation](https://typicode.github.io/husky/#/)\r\n- [lint-staged Documentation](https://github.com/okonet/lint-staged#readme)\r\n- [Expo Updates](https://docs.expo.dev/versions/latest/sdk/updates/)\r\n- [React Native Reanimated](https://docs.swmansion.com/react-native-reanimated/)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flhersey%2Fexpo-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flhersey%2Fexpo-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flhersey%2Fexpo-template/lists"}