A native mobile application for iOS and Android that provides remote control for Demo Time presentations with haptic feedback support.
- Cross-Platform: Runs on both iOS and Android devices
- Haptic Feedback: Enhanced user experience with tactile feedback on navigation buttons
- Real-time Updates: Automatic polling to keep demo state synchronized
- Native Performance: Built with Expo and React Native for smooth performance
- Persistent Connection: Remembers your server URL for quick reconnection
- Node.js (v16 or later)
- npm or yarn
- Expo CLI (
npm install -g expo-cli) - For iOS: macOS with Xcode
- For Android: Android Studio with Android SDK
# Install dependencies
cd apps/expo-mobile
npm installStart the Expo development server:
npm startThen:
- Scan the QR code with your phone using the Expo Go app
- Press
ifor iOS simulator (macOS only) - Press
afor Android emulator
For iOS:
npm run iosFor Android:
npm run androidFor production builds, you'll need to set up EAS (Expo Application Services):
# Install EAS CLI
npm install -g eas-cli
# Configure EAS
eas build:configure
# Build for Android
npm run build:android
# Build for iOS
npm run build:iosThe app connects to the Demo Time VS Code extension's API server to control your presentation remotely.
- Connection: Enter the URL of your Demo Time API server (e.g.,
http://192.168.1.100:3000) - Navigation: Use the Previous/Next buttons to navigate through demo steps
- Haptic Feedback: Feel tactile feedback when pressing navigation buttons
- Direct Selection: Tap any demo step to jump directly to it
This app uses Expo's Haptics API to provide tactile feedback:
- Medium Impact: Triggered when pressing Next/Previous buttons
- Light Impact: Triggered when selecting a specific demo step
The haptic feedback enhances the user experience by providing physical confirmation of button presses, especially useful during presentations.
The app communicates with the Demo Time VS Code extension API:
GET /api/demos- Fetch current demo stateGET /api/next- Trigger next demo stepGET /api/previous- Trigger previous demo stepGET /api/runById?id={stepId}- Run a specific demo step
The app follows the same patterns as the PWA:
- Hooks:
useApifor API communication - Context:
BringToFrontContextfor shared state - Screens:
ConnectionScreenandDemoScreen - Types: Shared TypeScript interfaces for API data
| Feature | PWA | Mobile App |
|---|---|---|
| Platform | Web browsers | iOS & Android native |
| Haptic Feedback | ❌ Not available | ✅ Supported |
| Installation | Add to home screen | App stores |
| Performance | Good | Better (native) |
| Offline capability | Service workers | Native storage |
Contributions are welcome! Please ensure your changes:
- Follow the existing code style
- Work on both iOS and Android
- Include appropriate error handling
- Maintain haptic feedback functionality
MIT License - see the root LICENSE file for details