Skip to content

mieweb/pulse

Repository files navigation

Pulse

Secure institutional knowledge sharing through short-form video content

Pulse Logo

React Native Expo TypeScript AVFoundation Media3

A React Native app for creating and sharing short-form video content with segmented recording, native video processing, and secure institutional knowledge sharing capabilities.

Features

  • Segmented Recording - Record multiple clips that combine seamlessly
  • Time Selection - Choose from 15s, 30s, 1m, or 3m recording durations
  • Native Video Processing - Hardware-accelerated video concatenation with AVFoundation
  • Deep Linking - Custom pulsecam:// URL scheme for direct app access
  • Cross-Platform - React Native with Expo for iOS and Android
  • Real-Time Progress - Live progress tracking and auto-save functionality

Installation

git clone https://github.com/mieweb/pulse.git
cd pulse
npm install

Setup

Prerequisites

  • Node.js 18+
  • Expo CLI
  • Xcode (for iOS development)
  • Android Studio (for Android development)

Development Setup

# Install dependencies
npm install

# Start Expo development server
npx expo start

# For iOS development
npx expo prebuild
cd ios
pod install
open pulse.xcworkspace
# Build and run in Xcode

# For Android development
npx expo run:android

Required Permissions:

  • Camera Access
  • Microphone Access
  • Storage Access

Configuration

Recording Settings

const defaultSettings = {
  maxIndividualDuration: 60, // Maximum duration for a single recording segment
  holdDelay: 500, // Delay before hold recording starts (ms)
  progressUpdateInterval: 100, // Progress update frequency (ms)
};

Video Stabilization

The app includes cross-platform video stabilization controls:

  • iOS: Full range of stabilization modes (off, standard, cinematic, cinematicExtended, auto)
  • Android: Simple on/off control
  • Control: Tap to cycle modes, long-press for mode picker
  • Platform Mapping: iOS-specific modes automatically map to "on" on Android

For detailed information, see VIDEO_STABILIZATION.md.

Time Options

const timeOptions = [
  { label: "15s", value: 15 },
  { label: "30s", value: 30 },
  { label: "1m", value: 60 },
  { label: "3m", value: 180 },
];

Video Concatenation

interface RecordingSegment {
  id: string;
  duration: number;
  uri: string;
  inMs?: number; // Optional start trim point
  outMs?: number; // Optional end trim point
}

// Usage
const outputUri = await VideoConcatModule.export(segments);

Development

CodeQL Configuration

This project includes automated CodeQL security analysis for Swift/iOS code. The CodeQL workflow is configured to build the React Native iOS project with the following settings:

  • Workspace: ios/pulse.xcworkspace
  • Scheme: pulse
  • SDK: iPhone Simulator SDK
  • Configuration: Debug build with code signing disabled

Updating Xcode Configuration

If you need to update the workspace name or scheme used by CodeQL:

  1. Workspace Changes: If you rename the Xcode workspace file, update the -workspace parameter in .github/workflows/codeql.yml:

    -workspace YourNewWorkspace.xcworkspace \
  2. Scheme Changes: If you rename the app scheme, update the -scheme parameter in .github/workflows/codeql.yml:

    -scheme YourNewScheme \
  3. Target Changes: If you add new Swift files or targets, ensure they are included in the main app scheme for CodeQL analysis.

The CodeQL analysis requires:

  • CocoaPods dependencies installed (pod install)
  • Code signing disabled (CODE_SIGNING_ALLOWED=NO)
  • Metro bundler skipped (RCT_NO_LAUNCH_PACKAGER=1, SKIP_BUNDLING=1)
  • iPhone simulator build target

Project Structure

pulse/
├── app/                    # App router screens
├── components/            # Reusable UI components
├── modules/               # Native modules
│   └── video-concat/      # Video concatenation module
├── hooks/                 # Custom React hooks
├── constants/             # App configuration
└── package.json           # Dependencies

Building

# Run linting
npm run lint

# Type checking
npx tsc --noEmit

# Build for production
eas build --platform ios --profile production
eas build --platform android --profile production

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes and test on both iOS and Android
  4. Commit your changes: git commit -m 'feat: add amazing feature'
  5. Push to your branch: git push origin feature/amazing-feature
  6. Open a Pull Request

Acknowledgments

Special thanks to Medical Informatics Engineering, Inc. and Doug Horner for supporting this project. Doug's passion for short-form content and knowledge sharing directly inspired the development of secure institutional video capabilities that make complex information accessible and engaging.

Core Developer: Priyam

License

MIT


Made with ❤️ for content creators everywhere

About

Secure institutional knowledge sharing through short-form video content.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6