regularity-app

Regularity Race Timer - Expo Mobile App

A mobile-first Expo React Native version of the Regularity Race Timer web application. This app helps track lap times for regularity racing, where consistency is more important than speed.

Features

Core Functionality

Lap Type System

Statistics & Analytics

Data Management

Installation

Standard Setup (Expo Go - Limited Features)

  1. Install dependencies:
    cd regularity-app
    npm install
    
  2. Run with Expo Go:
    npm start
    

    Scan the QR code with Expo Go app on your device.

    Note: Volume button functionality is NOT available in Expo Go.

Development Build (Full Features - Volume Buttons)

For volume button lap recording, you need to build a custom development client:

  1. Install dependencies:
    cd regularity-app
    npm install
    
  2. Build development client:
    # For iOS (requires Mac with Xcode)
    npx expo run:ios
    
    # For Android (requires Android SDK and Java)
    npx expo run:android
    
    # Or use EAS Build (cloud-based, no local setup needed)
    npm install -g eas-cli
    eas build --profile development --platform android
    
  3. Run the dev server:
    npx expo start --dev-client
    

The development build will connect to your dev server with full native module support.

Project Structure

regularity-app/
├── context/
│   └── AppContext.tsx          # Global state management
├── screens/
│   ├── TimerScreen.tsx         # Main timer and lap recording
│   ├── DriversScreen.tsx       # Driver management
│   ├── StatsScreen.tsx         # Statistics display
│   └── SettingsScreen.tsx      # App settings
├── navigation/
│   └── AppNavigator.tsx        # Tab navigation
├── utils/
│   └── calculations.ts         # Lap calculations and formulas
├── constants/
│   └── theme.ts               # Light/dark theme colors
├── types/
│   └── index.ts               # TypeScript interfaces
└── App.tsx                    # Entry point

Usage

Timer Tab

  1. Select a driver from the tabs
  2. Press Start to begin the timer (or use volume buttons with dev client)
  3. Press Lap button or Volume Up/Down when crossing the finish line
  4. The lap is automatically classified and recorded
  5. Alternatively, enter lap times manually in seconds or MM:SS.mmm format
  6. Lap Guard (if enabled) prevents accidental presses outside target range
  7. Safety Car Support - Laps significantly over target are automatically allowed

Drivers Tab

Stats Tab

Settings Tab

Advanced Features

Volume Button Controls (Dev Client Only)

Lap Recording Guard

Prevents accidental lap recording with smart filtering:

Normal Laps: Accepted within ±range of target time

Safety Car Laps: Automatically allowed when significantly over target

Rejected Laps: Shows message with allowed ranges

Audio & Haptic Feedback

Audio Warnings (configurable):

  1. Before Target Time: Single beep X seconds before target (default: 10s)
  2. After Lap Start: Double beep X seconds after lap start (default: 15s)

Haptic Feedback:

3-Lap Signal System

The app provides visual coaching based on the last 3 regular laps:

Lap Type Values

Customize how much each lap type is worth in Settings:

Winton Goal Laps Formula

Goal laps are calculated using the Winton formula:

For each driver:
  teamTotal = sum of all drivers' (base + changeover laps)
  driverTotal = driver's (base + changeover laps)
  percentage = driverTotal / teamTotal
  goalLaps = (percentage × sessionDuration × 60 / targetTime) × 2

Data Persistence

All data is automatically saved to AsyncStorage:

Technologies Used

Key Dependencies

{
  "expo": "~54.0.12",
  "react": "19.1.0",
  "react-native": "0.81.4",
  "expo-dev-client": "^6.0.13",
  "react-native-volume-manager": "^2.0.8",
  "react-native-gesture-handler": "^2.28.0",
  "expo-audio": "^1.0.13",
  "expo-print": "^15.0.7",
  "victory-native": "^41.20.1",
  "@react-navigation/native": "^7.1.17",
  "@react-native-async-storage/async-storage": "^2.2.0"
}

Recent Updates

Version 1.2 (Current)

Version 1.1

Future Enhancements

Planned features for future versions:

Privacy Policy

Your privacy is important to us. Regularity Race Timer is designed with privacy at its core:

No Data Collection

Local Storage Only

All your data stays on your device:

You Control Your Data

Permissions

The app only requests permissions needed for core functionality:

Support Development

This app is completely free with no ads or subscriptions. If you find it valuable, consider supporting development: Buy Me a Coffee

For the complete privacy policy, see PRIVACY_POLICY.MD.

License

MIT

Credits

Based on the original Regularity Race Timer web application.