This is a React Native AI Captions Editor using Convex for real-time data synchronization, ElevenLabs for text-to-speech, Clerk for user authentication and Sentry for error tracking.
Additional features:
- Expo Router file-based navigation
- Convex Database for data storage
- Convex File Storage for file storage
- Sentry for error tracking
- Clerk Passkeys for passwordless authentication
- Haptics for haptic feedback
- Jotai for state management
- NativeWind for styling
- Expo Secure Store for secure storage
- Expo Image Picker for image picking
- Expo Video for video playback
- Expo Audio for audio playback
Watch and build this AI Captions Editor step by step:
TODO: Add video
Make sure you have the Expo CLI installed.
For the best development experience, you should have Android Studio and Xcode (Mac only) installed. For more information on setting up your development environment, refer to the Expo documentation for Android Studio and the React Native documentation for Xcode.
To build the app, follow these steps:
- Clone the repository
- Run
npm install
- Run
npx expo prebuild
- Run
npx expo run:ios
ornpx expo run:android
- Create an account on Convex
- Run
bunx convex dev
to start the development server
To export the video with burned in captions we need an environment with ffmpeg
installed (you can do this locally).
- Go into the
/microservice
folder - Run
npm install
to install the dependencies - Run
npm run dev
to start the microservice
You then have to add the URL to the Convex environment variable MICROSERVICE_URL
. I recommend using something like ngrok to test the microservice locally.
npx convex env set MICROSERVICE_URL <your-microservice-url>/transcode
Make sure to add your EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY
to the .env
file.
Create a Clerk account and project, then update the convex/auth.config.js
file with your domain
and applicationID
.
export default {
providers: [
{
domain: 'https://your-clerk-domain.clerk.accounts.dev',
applicationID: 'your-clerk-application-id',
},
],
};
You also need to connect Convex and Clerk with a JWT template. For this, cehck out the video and Convex docs.
You need to set up a webhook in Clerk to handle the user creation and update events.
- Go to Clerk and select your project
- Go to API and select Webhooks
- Add the following webhook, which should point to your Convex instance and include the
user.created
anduser.deleted
events:
- Create an account on ElevenLabs
- Get an API key from ElevenLabs
- Add the key to Convex by running
bunx convex env set ELEVENLABS_API_KEY=<your-api-key>
- Create a new project on Sentry
- Use the
npx @sentry/wizard@latest -s -i reactNative
command to setup Sentry for your project
Take a shortcut from web developer to mobile development fluency with guided learning Enjoyed this project? Learn to use React Native to build production-ready, native mobile apps for both iOS and Android based on your existing web development skills.