A cross-platform book library management application built with React Native, Expo, and TypeScript. Access and manage your digital book collection seamlessly across iOS, Android, and Web platforms.
- 📚 Multi-Platform Support: Native iOS and Android apps, plus a responsive web version
- 🌐 Calibre Integration: Connect to Calibre library servers and manage your book collection
- 🎨 Beautiful UI: Modern, responsive design using Gluestack UI components
- 🌍 Multi-Language Support: i18n support for multiple languages (English, Korean, Arabic, etc.)
- 🔄 Hot Reload: Fast Refresh enabled for rapid development feedback
- 📱 Responsive Design: Optimized layouts for tablets and desktops
- 🗂️ Advanced Search & Filter: Search books by title, author, category, and tags
- 📖 PDF Viewer: Built-in PDF viewer for reading books
- 🎯 Navigation & Organization: Intuitive navigation with bottom tab bar and side menu
- 💾 Persistent Storage: Async storage for local data persistence
- 🧪 Testing: Detox end-to-end tests and Jest unit tests
- Framework: React Native 0.73 with Expo 50
- Language: TypeScript 5
- State Management: MobX State Tree
- Navigation: React Navigation
- UI Components: Gluestack UI, Material Community Icons
- PDF Handling: react-native-pdf
- Forms: React Hook Form
- Internationalization: i18n-js
- Build Tools: Metro bundler, Webpack5 for Storybook
- Testing: Jest, Detox, Storybook
open-bookshelf
├── app/
│ ├── components/ # Reusable UI components
│ ├── config/ # Environment-specific configurations
│ ├── hooks/ # Custom React hooks
│ ├── i18n/ # Translation files and i18n setup
│ ├── library/ # PDF and other library utilities
│ ├── models/ # MobX State Tree models
│ ├── navigators/ # React Navigation configuration
│ ├── screens/ # Screen components
│ ├── services/ # API clients and external services
│ ├── theme/ # Theme configuration
│ ├── type/ # TypeScript type definitions
│ ├── utils/ # Utility functions
│ └── app.tsx # Main app entry point
├── assets/ # Images and static resources
├── android/ # Android native code
├── ios/ # iOS native code
├── .storybook/ # Storybook configuration (Web & Native)
├── test/ # Test setup and mocks
├── detox/ # End-to-end tests
├── app.config.ts # Expo configuration
├── babel.config.js # Babel configuration with React Refresh
├── metro.config.js # Metro bundler configuration
├── package.json # Project dependencies
└── tsconfig.json # TypeScript configuration
- Node.js 18+ and Bun
- Expo CLI:
bunx expo --version - For iOS: Xcode 15+
- For Android: Android Studio and SDK
# Clone the repository
git clone https://github.com/yourusername/open-bookshelf.git
cd open-bookshelf
# Install dependencies
bun install
# Optional: Link native dependencies
bun run patch# Start the web development server
bun run expo:web
# Build for production
GITHUB_PAGES=true bun run build:web# Run on iOS simulator
bun run expo:ios
# Or use React Native CLI
bun run ios# Run on Android emulator
bun run expo:android
# Or use React Native CLI
bun run android# Web Storybook
bun run storybook:web
# Native Storybook (with Expo dev client)
bun run storybook-native"start": "USE_EXPO_GO=true bunx expo start" // Start Expo Go
"start:dev-client": "bunx expo start --dev-client" // Start Expo dev client
"expo:web": "bunx expo start --web" // Start web development
"expo:ios": "USE_EXPO_GO=true bunx expo start --ios" // Start iOS simulator in Expo Go
"expo:android": "USE_EXPO_GO=true bunx expo start --android" // Start Android emulator in Expo Go
"build:web": "bunx expo export --platform web --output-dir dist" // Build web for production
"test": "jest" // Run unit tests
"test:watch": "jest --watch" // Run tests in watch mode
"lint": "eslint app test --fix" // Lint and fix code
"compile": "tsc --noEmit" // Type check
"storybook:web": "sb dev --config-dir .storybook/web" // Storybook web
"build-storybook": "build-storybook" // Build Storybook static
Deploy the web version to Github Pages:
# Setup: Configure Github Pages in repository settings
# Branch: gh-pages
# Folder: / (root)
# Automatic deployment on push to main branch
git add .
git commit -m "Deploy to Github Pages"
git push origin mainAfter deployment, access your app at: https://<your-username>.github.io/open-bookshelf/
For detailed deployment instructions, see GITHUB_PAGES_DEPLOY.md
Reusable UI components built with Gluestack UI:
Box,VStack,HStack- Layout componentsButton,ButtonGroup- Button variantsInput,InputField- Form inputsImage,ImageUploader- Image handlingBookImageItem,BookDescriptionItem- Domain-specific components- Custom themed components for consistent styling
MobX State Tree models for application state:
RootStore- Main application storeAuthenticationStore- User authentication stateCalibreRootStore- Calibre library managementSettingStore- Application settings
Screen components for different app pages:
LibraryScreen- Book library listingBookDetailScreen- Individual book detailsSearchScreen- Search functionalitySettingsScreen- Application settings
External service integrations:
api- REST API client with Calibre backend supportreactotron- Development tools integrationstorage- Async storage operations
Custom React hooks:
useConvergence- Handle data convergenceuseOpenViewer- Open book vieweruseDownloadBook- Download book managementuseOrientation- Device orientation handling
Configuration files are located in app/config/:
config.base.ts- Base configurationconfig.dev.ts- Development configurationconfig.prod.ts- Production configuration
Customize colors, spacing, and typography in app/theme/
Add or modify translations in app/i18n/:
en.ts- Englishko.ts- Koreanar.ts- Arabic
bun run test:unit
bun run test:watchbun run build:detox
bun run test:detoxSee Detox Setup for detailed instructions.
bun run storybook:web- Fast Refresh: Enabled in web and native development for instant feedback
- Reactotron: Redux DevTools-like debugging for MobX State Tree
- TypeScript: Full type safety across the codebase
# Start Expo Go with debugging enabled
bun run start -- --verbose- Responsive design for desktop and tablet
- Service worker support for offline functionality
- Optimized build size with code splitting
- Github Pages deployment ready
- Native gesture handling
- Safe area insets support
- iOS-specific navigation patterns
- Material Design compliance
- Android-specific permissions handling
- Hardware back button support
- Code Splitting: Automatic code splitting for web builds
- Tree Shaking: Dead code elimination in production builds
- Metro Transformer: Optimized JavaScript transformation
- Hermes Engine: Lightweight JavaScript engine for faster app startup (iOS/Android)
# Clear all caches and rebuild
bun run clean-all
bun install# Clear Metro cache for Expo Go
bun run start -- --reset-cache# Rebuild with verbose output
GITHUB_PAGES=true bun run build:web -- --verbose- Create a feature branch:
git checkout -b feature/your-feature - Commit changes:
git commit -am 'Add new feature' - Push to branch:
git push origin feature/your-feature - Open a Pull Request
- Formatter/Linter: Biome (configured in
biome.json)
Run formatting:
bun run formatRun linting:
bun run lintThis project is private and all rights are reserved.
For issues and questions:
- Check existing GitHub Issues
- Create a new issue for bug reports
- Reference the related documentation
- ✅ Fast Refresh enabled for web development
- ✅ Github Pages deployment automation
- ✅ Calibre library integration complete
- ✅ Multi-language support
- ✅ PDF viewer integration
- ✅ Type-safe state management with MobX State Tree