todo-fire is a realtime & offline-first, todo mobile app for android and iOS built using react-native & firebase.
It syncs data in realtime across multiple devices, so you can "jump" between devices
without worrying about syncing.
Syncing is enabled through gRPC remote procedure calls and bi-directional streaming over the database connection under the hood
todo-fire is made with high availability and high consistency, It's made possible to achieve both through the underlying Spanner DB see paper...
todo-fire has authentication built-in through firebase email-password method.
- Displays a list of tasks
- Includes a form or input field where users can add a new task to the list
- Each task haa a title, due_at(optional), note(optional) and status (completed or not)
- Users should be able to mark tasks as completed or uncompleted by tapping on them
- Users should be able to delete tasks from the list
- Highly Available - Available both online and offline (reads and writes are both supported through firestore db)
- Highly Consistent - When online, this is acheieved by real-time syncing eliminating eventual consistency
- Fault Tolerant - Writes are appended to firestore's commit log on disk and not lost if the app crashes or device runs out of power
https://drive.google.com/drive/folders/1g0J_0Anij7LxkeuT5JrmIaMfV3t9TzGL?usp=sharing
todo-fire can be installed as follows:
-
Development Environment Setup
You will require your environment setup for mobile development(skip if already done), please setup instructions.
-
Install, Build, Run
To start using todo-fire and build it locally:
Run the following command to install the app and link dependencies from root directory
> npm install
> npm run ios
For Android: populate
sdk.dir
in /android/local.properties (create file) to contain Android SDK path (https://stackoverflow.com/a/43626724/14795040)> npm run android
Packages | Description |
---|---|
react-native | Cross-Platform native framework |
expo | react-native supporting framework ecosystem |
react-navigation | Native routing & navigation |
react-native-paper | Cross-Platform Material Design framework. |
react-native-firebase | Firebase impl for using auth & firestore |
valtio | Proxy based State Management |
typescript | Adding type-safety to vanilla JS |