Inspiration
When trying to find an to work on for Make School, I had the idea of a simple pen pal service where people could volunteer themselves to talk to others in their native language. For example, I could sign myself up on the app as a native English speaker, and so I would talk to people trying to learn english and help them out. I quickly learned that this was an idea that had already been brought to an app, but there were some major flaws to it. First of all, a lot of the best features are paid for, and so it is hard to get a good experience being a free user. Furthermore, I realized that there was a better way that people could learn from each other, and this by having them both speak in their target languages to each other, so this way both people can benefit from the conversation.
What it does
The app asks you what languages you know natively and what languages you are trying to learn on sign up. Then, the user matches you with compatible user. Let's just say you are someone from Manhattan who is trying to learn Chinese. The app then matches you with someone who is fluent in Chinese and is trying to learn English. Assuming that you start talking to this person, the idea is that you will be correcting messages that they send, and they will be correcting messages that you send. There is also a built in "dictionary" feature, where users can input new words that they learn along the way.
How I built it
For the main component of the app, the actual messaging between users, I used a free library called JSQMessaging which made handling chatting with the app much easier. The app heavily relies on a backend database, which I use Firebase for. The rest is done in plain Swift with a few CocoaPods added such as SDWebImage, KingFisher, IQKeyboardManager, and SwiftKeychainManager.
Challenges I ran into
One of the challenges I ran into involved JSQMessaging. Because it is a deprecated library, some of the more advanced things that I wanted to do within the library were very difficult to implement. After looking through lots of forum posts and stack overflow, I was able to implement all of the chat features that I wanted to add. Also, I realized that my app should probably support multiple languages, considering it is suppose to be an app that anyone in the world can use to learn a new language. To do this, I basically had to manually translate the entire app into Japanese, Chinese Simplified, German, Spanish, French, Russian, and Italian. This was extremely tedious, but i'm glad my app now supports so many languages.
Accomplishments that I'm proud of
I am super proud of being able to fully ship my app without having to scope it down at all. I implemented every single feature I had originally planned to implement, and came out with a very completed app. I was a little bit worried in the beginning that I wouldn't be able to complete all of the goals I had set for my app, and so I am very happy that I was.
What I learned
I learned a lot about Swift, Xcode, and the process of actually shipping an app after you finish coding it. I think that the most important thing that I learned was that there is a lot of value of coding something the "right way". What I mean by this was that there is 10000 ways I could have programmed the app and have it come out the same way, but I am glad I worked hard to write the best code possible and really optimize the app.
What's next for Langex
I eventually want to develop Langex to be used by schools. I think it would be really cool to have a classroom in New York and a classroom in Berlin to use this app. With this, students in NY could talk in German to the students in Berlin, and vice versa. I think this system could allow for much more engaging language learning for students all across the world.
Log in or sign up for Devpost to join the conversation.