I was inspired to create this project after I saw how much my mother struggled trying to get my sister to practice her handwriting. Handwriting has always been a difficult skill to teach, but now during this time of quarantine, that difficulty is compounded. Preschoolers like my sister, aren't able to receive online education, forcing the burden of teaching handwriting onto working parents. This struggle inspired me to create an application that would help children to practice handwriting in a fun and engaging way.
What it does
My project is a mobile app that helps children to practice their handwriting in a fun and engaging way. By taking advantage of Google Cloud's Firebase, the app provides user management, authentication, and data storage ensuring that the app can easily scale up. When the application is launched the user is prompted to log in with their account if they don't have one they can create one using the registration page. Once the user logs in they are redirected to a menu where they can enter the game. In the game, the user copies an individual letter onto a canvas. Once the user's finger is lifted, the canvas input is converted from bitmap to an image and fed into a Google Cloud's Text Recognition API which searches the image for any text. If text is not present or the identified text does not match the target text then the text is marked as incorrect and the user is prompted to try again. If the identified text matches the target text then the text is marked as correct, the user moves on and they are awarded one "credit". Once the user has accumulated enough credits they can purchase a marker from the in-game store. The marker that the user has determines the color of their brush stroke on the canvas. Thus the user feels compelled to practice their letters so they can earn more credits and purchase more markers. This makes practicing handwriting fun for both the parent and the child.
How I built it
This application was built with Android Studio and utilizes Firebase Authentication, Firebase Firestore, as well as Google Cloud Text Recognition API.
Challenges I ran into
I ran into several challenges while building this application, here are two of the biggest ones I faced:
1. Integrating Firebase Firestore in my Application Prior to this hackathon, I have had some experience with Firebase Realtime Database and it would have been relatively easy for me to integrate that into the application. However, after reviewing the pros and cons of Firebase Realtime Database and the newer Firebase Firestore, I decided to step out of my comfort zone and learn how to use Firestore. Compared to the Realtime Database, Firestore was pretty unintuitive. Realtime Database is structured like a file system. There is one main folder containing elements with both a title and a value. On the other hand, Firestore is structured more like a table. Adapting to this new structure was pretty challenging.
2. Building a Drawable Canvas I have had no experience with Android Studio's canvas prior to this hackathon and so using it was pretty difficult for me. It did not help that creating a drawable canvas is pretty convoluted, to begin with. For one, you need an external script to control a drawable canvas and check for touches. This means that I had to use Fragments something that was pretty new to me also. On top of this, I needed to create two canvases, one would have a bitmap that I could access and write to and the other would be the actual instance of the canvas which I would draw the illustrations on. All of this made building a drawable canvas confusing and in general a challenge.
Accomplishments that I'm proud of
Building a fully functional product in such a short amount of time is an accomplishment that I am extremely proud of. This is a product that has rich UI/UX components as well as cloud data storage and API integration making this a full stack development product.
What I learned
I learned how to use Google Cloud Text Recognition APIs, Firebase Firestore, Firebase Authentication, and Android Studio's canvas element
What's next for WriteRight
In the future, I plan to make this application work with more languages, not just English. Google's Text Recognition API already supports multiple languages, given the limited time I was unable to experiment with that feature.