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