This project is a React Native To-Do List Application enhanced with Voice-to-Task and Voice Command Delete features.
It allows users to add tasks and delete tasks using voice commands for a seamless and hands-free experience.
- ✅ Add, search, toggle, and delete tasks with voice command
- 🗣️ Voice-to-Task functionality via Floating Action Button (FAB)
- ✂️ Automatic splitting of multiple dictated tasks (e.g. “Buy groceries and call mom”) into separate tasks
- 🌗 Dark and light mode toggle
- 🔔 Toast notifications when tasks are added
- 📅 Real-time task search by title, description, or date
When the Floating Action Button (FAB) is pressed, the app:
- Activates the microphone using
react-native-voice. - Transcribes spoken input into text.
- Parses and splits the text using common connectors like
and,then,also. - Adds each parsed segment as a new task to the task list.
- Displays a toast notification for each new task.
Voice Input: Buy groceries and call mom and water the plants
Parsed Tasks:
- Buy groceries
- Call mom
- Water the plants
The app listens for delete commands like:
- “Delete task name”
- “Remove task name”
- “Clear task name”
When detected, the corresponding task is removed from the list, and a toast message is displayed.
Voice Input: Delete buy groceries
Action:
✅ Task “Buy groceries” is deleted.
For speech recognition, I used:
react-native-voice— a lightweight and reliable speech-to-text library for React Native (iOS and Android).- This API provides real-time transcription of the user’s speech and exposes event listeners for starting, stopping, and receiving recognized text.
Why this API:
- It works offline (depending on device support).
- It’s simple to integrate and requires no external cloud API key.
- It provides continuous listening mode which is ideal for short to-do voice inputs.
The app uses a rule-based natural language parsing logic to interpret spoken commands intelligently.
- Convert the entire transcribed text to lowercase.
- Trim leading and trailing whitespaces.
- Normalize punctuation (e.g., remove trailing periods or commas).
-
If the text starts with a delete keyword such as:
deleteremoveclear
→ The parser extracts the text after the keyword as the task to delete.
Example:
- Input:
delete call mom - Detected Intent:
delete - Extracted Task:
call mom - Action: remove task
"Call mom"from the list.
-
If no delete keyword is found, the parser assumes the intent is to add tasks.
-
The text is split into multiple tasks using common natural connectors:
andthen- commas
, also
-
The resulting array is cleaned:
- Remove empty strings
- Trim whitespaces for each segment
- Capitalize the first letter for readability
Example:
- Input:
buy groceries and call mom, then clean the kitchen - Split →
["buy groceries", "call mom", "clean the kitchen"] - Final →
["Buy groceries", "Call mom", "Clean the kitchen"]
- Each parsed segment is added to the task list context individually.
- A toast notification confirms each addition: ✅ Task added: "Buy groceries"
- Support for fuzzy matching on delete (e.g., “Delete groceries” deletes “Buy groceries”).
- Handling more complex phrases (e.g., “Remind me to...” or “Set a task for...”).
- Multi-language support for task commands.
- React Native (Expo)
- TypeScript
- React Navigation (Stack)
- AsyncStorage for local persistence
- Context API + Hooks for state management
- React Native Voice for Speech-To-Text
- Node.js (>=16)
- Expo CLI (optional) or use npx expo commands
- Clone this repo
- cd
To-Do-List-App - npm install or yarn
- npx expo start (or expo start)
- Run on emulator or physical device using Expo Go