Language learning App

Project Description

A language learning application designed to meet personal needs not seen in existing product

Note: This page is under construction and is slowly being updated with code snippets and design choices.

Project Goals

  • Primary goal - Gain familiarity of key technologies
  • secondary goal - Create a tool that is useful to me.

Status

  • Currently in development
  • Modified weekly, however this has been mostly put to the side to focus on other programming and life priorities

Code:

  • Prospective employers may reach out to see code
  • The code for this project is currently not available
  • Not ready for production yet
  • Prefer not to share due to security
  • A link to the code of an out of data version can be found here

Code Ownership

  • The earlier code for this project was developed mostly without AI
  • It is based heavily with some copying from the follow resources

Key Features

  • Spaced repetition flash cards
  • Easy keyboard bindings that make mouse-less navigation easy {insert image here}
  • Built in language to language dictionary sourced from publicly available data {insert image here}
  • Extraction of content from youtube videos, text.
  • Shows word usage frequency of extracted content sourced from web sources
  • Allows for easy creation of exercises based on extracted content. Currently Flash cards. Panned creation of other activities in future version. (In development phase)

Technology Decisions

  • SQL (postgres) with Django OR
    • SQL makes sense for entities with many joins and OLTP systems in general
    • Postgres: due to familiarity
  • Python (scripting, backend)
  • I wanted to work in python for this project as it was a language I knew. I would probably choose a compiled language if restarting
  • Django
  • It was the more popular python frame work between that and Flask that I saw in job listings
  • Nginx ( reverse proxy)
  • Simple with easy config and I was not focusing on learning API gateway, or distributed services when I started on this project
  • React frontend
  • I wanted to work with react and learn it more
  • Redux
  • There are a few redux components. I am mostly not using it, but I wanted to learn about it
    • See Authenticated sections
  • Typescript
  • Chosen over javascript because I am a fan of types
  • Message queues - (Celery with Redis)
  • Message queue set up for async tasks
    • Email for mailing notifications
  • Redis is currently only used for message queues and not caching in this phase
  • Github Actions - for CI pipelines
  • Chosen because it is easy to learn, set up, and concepts roll over to other platforms such as Jenkins
  • S3 for blob storage
  • Chosen over GCP or Azure due to familiarity
  • SwaggerAPI
  • For easy documentation and formal specification
  • Simple to add
  • JWT based Authentication
  • I had previously worked with cookie based tokens and wanted to learn more about web tokens
  • Docker containers
  • Make Files
  • Git
  • Git follows "Git Flow" patterns, as this is what I have worked with in the past

Demonstrates usage of the following concepts

  • Creation of CRUD REST APIs
  • Many of these were created Pre AI
  • AI generated ones normally follow specific JSON format that I wanted.

  • Unit testing

  • Many prototyping areas have less unit testing. These are more exploratory areas and change often
  • JWT based authentication
  • Transactional database operations and database querying
  • Consuming of several external API, both on the client and server sides, where most appropriate
  • Logging
  • Design choices based on pricing and usability
Back to projects