Language learning is fun and one of the hardest parts of learning some languages is finding a comfortable way to practice it. By practice, we don't mean drills or reading, but actual communication with another speaker (preferably native). A tried and true way of getting somebody to practice with is to get a pen pal who is a native speaker of the language you're learning that's trying to learn a language you know natively such that you can both practice well. There are a bunch of apps (and regular old real world ways) to find this kind of arrangement but they always leave the communication up to you. That can be a bit intimidating or unstructured for some people! So, instead, Amarna tells you what you're supposed to write by providing a lesson plan of increasingly difficult letters to send starting from simple introductions to philosophical discussions.

What it does

Amarna allows you to register as a user who knows one language and is looking to learn another language. After this, it pairs you with a person who's seeking the language you know and knows the language you want to learn. It then allows you to start messaging said person with a lesson plan guiding you through the message on the same page. If both you and your partner are ready to go on to the next lesson, to prevent one person from getting left in a lurch by a quick learner, both of you have to confirm with the system to proceed to the next lesson. After that, it's simply following the coursework of the system for as long as you want!

You can visit our website here. Feel free to sign in as gqo or amvasquez to test how to chat with the system!

How we built it

Amarna has three main components:

  • A frontend written in React to display user content to the browser
  • A backend written in Go to provide a RESTful API for the frontend to gather user data from
  • A MySQL database to provide the long term datastorage

Challenges we ran into

React presented perhaps too much of a framework to work with and become familiar with in this short amount of time. We did end up finishing a reasonable version of the website that was able to communicate well with the backend, but because not all of our team was familiar with it, it was hard to distributed work on the frontend.

Accomplishments that we're proud of

Our React messaging interface came out very nice for how difficult it was to implement. It looks just like a modern chat client!

Additionally, the separation of the frontend and backend allow for this application to be considerably more scaleable than a monolithic system. It also allows us the nice option of re-implementing either one in another language without affecting the other. Additionally, the backend is decoupled from the datastore via the use of Go interfaces so, without rewriting the business logic of our system to handle the REST API, we could easily swap the database implementation from MySQL to MongoDB to in-memory storage!

What we learned

We learned that to take on technical debt that has an unfamiliarity with the rest of the team isn't comfortable with can leave some people in a lurch and make it much harder to efficiently collaborate on a project.

What's next for Amarna

The match making system is rudimentary at this point and we would hope to improve it to allow for multiple known languages and multiple languages you want to learn such that you could use your English skill to learn French and your Spanish skill to learn Chinese.

Share this project: