A voice-first productivity tool for nautical carpentry workshops. Record voice notes hands-free and let AI extract structured tasks automatically.
- π€ Voice Recording - Hold-to-record button with visual feedback
- π€ AI Task Extraction - Automatic task extraction using OpenAI GPT-4o
- π Task Management - View, organize, and complete tasks by category
- π― Priority System - Color-coded priority indicators (High, Medium, Low)
- π Project Management - Organize tasks by project
- πΎ Persistent Storage - Local storage for preferences and settings
- Framework: React Native (Expo SDK 54)
- Language: TypeScript
- Navigation: React Navigation v6
- Audio: Expo AV
- Storage: AsyncStorage
- API: Axios
- Backend: Focus API
focus-mobile/
βββ src/
β βββ components/ # Reusable UI components
β β βββ RecordButton.tsx
β β βββ TaskList.tsx
β β βββ TaskItem.tsx
β β βββ ProjectSelector.tsx
β β βββ CategoryBadge.tsx
β β βββ LoadingOverlay.tsx
β βββ screens/ # Main app screens
β β βββ HomeScreen.tsx
β β βββ TasksScreen.tsx
β β βββ ProjectsScreen.tsx
β β βββ SettingsScreen.tsx
β βββ services/ # Business logic & API
β β βββ api.ts
β β βββ audio.ts
β β βββ storage.ts
β βββ types/ # TypeScript definitions
β β βββ index.ts
β βββ constants/ # App configuration
β β βββ Colors.ts
β β βββ Config.ts
β βββ utils/ # Helper functions
β βββ helpers.ts
βββ App.tsx # Root component
βββ app.json # Expo configuration
βββ package.json
- Node.js 18+ installed
- Expo CLI installed:
npm install -g expo-cli - iOS Simulator (Mac) or Android Studio (for emulator)
- Expo Go app on your physical device (optional)
-
Clone and navigate to the project
cd focus-mobile -
Install dependencies (already done)
npm install
-
Configure API endpoint
Update the API URL in
src/constants/Config.ts:export const API_BASE_URL = "https://your-railway-app.railway.app/api";
Or configure it in the Settings screen within the app.
-
Start the development server
npm start
- Install Expo Go on your iOS or Android device
- Scan the QR code displayed in the terminal
- App will load on your device
npm run iosnpm run android- Select a Project - Choose from the dropdown at the top
- Record Voice Note - Press and hold the large orange button
- Release to Submit - Recording automatically uploads to API
- View Extracted Tasks - Tasks appear in the "Recent Tasks" section
- View all tasks organized by category
- Tap checkbox to mark tasks complete
- Pull down to refresh task list
- Completed tasks shown at the bottom
- View all projects
- Create new projects with name and description
- Select active project for recordings
- Configure API endpoint URL
- Clear local cache
- View app version info
The app connects to the Focus backend API with these endpoints:
POST /api/process-voice- Upload and process voice recordingGET /api/todos- Fetch all tasksPATCH /api/todos/:id- Update task statusDELETE /api/todos/:id- Delete taskGET /api/projects- Fetch all projectsPOST /api/projects- Create new project
For Production (Railway):
export const API_BASE_URL = "https://your-app.railway.app/api";For Local Development:
- Start backend:
cd ~/repos/focus && npm run dev - Get your Mac's IP:
ifconfig | grep "inet " | grep -v 127.0.0.1 - Update API URL:
http://YOUR_IP:3000/api - Both devices must be on same WiFi
The app requires microphone access for voice recording:
- iOS: Automatically prompts on first recording attempt
- Android: Permission declared in app.json
Optimized for workshop environments with high visibility:
- Primary: Navy Blue (#003366) - Nautical theme
- Secondary: Orange (#FF6B35) - High visibility
- Priorities: Red (High), Orange (Medium), Green (Low)
- Categories: Purple (CNC), Blue (Assembly), Orange (Finishing), Brown (Carpentry)
- Check microphone permissions in device settings
- Restart the app after granting permissions
- Verify API URL in Settings
- Check network connectivity
- Ensure backend is running (for local dev)
- Pull down to refresh on Tasks screen
- Check API URL configuration
- Verify backend is accessible
- New Screen: Create in
src/screens/ - New Component: Create in
src/components/ - New API Method: Add to
src/services/api.ts - Update Navigation: Modify
App.tsx
npx tsc --noEmitiOS:
eas build --platform iosAndroid:
eas build --platform androidMIT
For issues or questions, refer to the backend repository: https://github.com/ChrisForti/focus