No description
Find a file
wilson 26ce12f69f
Some checks failed
/ test (push) Has been cancelled
feat: [content] Initialise the content module
2026-04-18 20:07:13 +01:00
.forgejo/workflows feat: add the 'tests' module to the project 2026-04-07 07:55:57 +01:00
api feat: [script] Fix how non-verb words are imported, as they were missing 2026-04-18 17:27:32 +01:00
content feat: [content] Initialise the content module 2026-04-18 20:07:13 +01:00
dictionaries feat: Build the bilingual dictionary data 2026-04-08 20:26:26 +01:00
frontend fixup: [frontend] Send through the root path server file 2026-04-18 20:06:06 +01:00
tests feat: [frontend] Refactor the packs admin interface 2026-04-17 09:39:42 +01:00
.env.example feat: Create the email_verification_token entity, and both scaleway and 2026-04-11 06:56:50 +01:00
.gitignore chore: add pycache to gitignore 2026-03-29 08:54:42 +01:00
docker-compose.test.yml feat: add the 'tests' module to the project 2026-04-07 07:55:57 +01:00
docker-compose.yml feat: Create the email_verification_token entity, and both scaleway and 2026-04-11 06:56:50 +01:00
Makefile Chore: fix the import-dictionary makefile line 2026-04-18 16:28:54 +01:00
README.md docs: Update root README.md with more project information 2026-03-29 08:55:22 +01:00

Language learning app

Language Learning App is a set of software packages that deliver a language learning experience for second+ language learners to help boost fluency through exposure to realistic-looking text.

Thesis statements

  1. Presentation of novel, realistic looking text and accompanying audio provide an engaging, motivating chance for language learners to increase their fluency of another language.

  2. Interacting with a language in non short-form text (i.e. more than one sentence at a time) is more complex, and more beneficial, that interacting with single sentences.

  3. Language learning should focus on the most "useful" words first. Traditional grouping of words (e.g. items of clothing, hobbies) used in traditional education are too abstract. Providing some level of personalisation of topic, and selection of words is important to engagement and motivation.

Description of product

Although spaced repetition is an effective mechanism to better remember words, showing words in context remains an important "before" step. This app adds value by providing the user with realistic-looking written and audio content in the language(s) they are learning at an appropriate level. From there, the user can identify vocabulary that they are unfamiliar with, and would like to commit to memory.

Additionally, Language Learning App treats the text-audio pair as important. Language learners don't just want to be able to read and write a language, they need to know how words sound

At present, the app doesn't have a solution to recognising speech, another important part of language learning.

Technical Specifics

This is an app designed to help people learn a second(+) language. Initially from English. The app will start with French, Spanish, Italian, and German as the target languages. With English as the only source language.

The application has a back-end written in python (fastapi), because of the Python ecosystem around data and machine learning.

In the future, the API will generate XML endpoints for postcast-playing app integration (as it's an audio-first medium).

The application has a web-based front end written in Svelte Kit. It will adopt progressive web app standards, to allow offline use. Due to technical complexity, and limitations, there are no plans for native app development.

The app relies on containerisation and docker to orchestrate moving parts. In production, there will be a need to consider Content Delivery Networks (CDNs) as high bandwidth is expected.

Content generation relies heavily on asynchronous jobs.

The app should rely on self-hostable infrastructure as much as possible. Vendor-specific queueing and messaging protocols (e.g. AWS's SNS) are a liability.

Communication between the two is through HTTP, authenticated with JWT tokens.

Technical Design

This application must remain self-hostable. It should not rely on proprietary infrastructure (e.g. AWS Lambda functions) to run. It should use Docker Compose and Makefiles to build projects and deploy them onto a local server or a VPS.

The main components so far are:

  • Backend server (fastapi)
  • Front end (SvelteKit), yet to be built
  • Object storage (Ceph), yet to be built