GithubHelp home page GithubHelp logo

simjanos-dev / linguacafe Goto Github PK

View Code? Open in Web Editor NEW
840.0 9.0 25.0 91.28 MB

LinguaCafe is a self-hosted software that helps language learners read foreign languages.

Home Page: https://simjanos-dev.github.io/LinguaCafeHome/

License: GNU General Public License v3.0

PHP 34.94% Vue 60.27% Blade 1.08% Python 3.44% Shell 0.12% Batchfile 0.14%
language-learning anki dictionary japanese jellyfin jmdict language self-hosting translation

linguacafe's Introduction

LinguaCafe

GitHub Release Static Badge Discord Static Badge Static Badge Static Badge

LinguaCafe is a free self-hosted software that helps language learners acquire vocabulary by reading. It provides a set of tools to read, look up unknown words and review them later as effortlessly as possible.

You can read about all the features of LinguaCafe on the overview GitHub Page, and on the user manual GitHub Wiki page.

   

Library

Reader

Review

Vocabulary

Language support

Supported languages: Chinese, Croatian, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Italian, Japanese, Korean, Latin, Macedonian, Norwegian, Polish, Portuguese, Romanian, Russian, Slovenian, Spanish, Swedish, Thai, Turkish, Ukrainian, Welsh.

You can find a detailed list about what level of support different languages have on the GitHub Wiki page.

Supported platforms:

  • x64, which includes most desktop computers made in the last decade.
  • Mac users with Apple silicon must perform an additional step, see the 'Installation' section for details

Other Armv8 devices such as Raspberry Pis 3 and newer do not work at the moment.

Memory usage

LinguaCafe uses RAM based on how many and which languages do you use. If you use every language, the RAM usage can be over 2GB.

Installation

Step 1: Install docker desktop.

Important

On MacOS you might need actual Docker Desktop instead of just basic Docker, because it allows you to use Rosetta to run images without support for Arm64 like our Python image, which uses Spacy models that only work in Amd64.

Step 2: Create linguacafe folder and download the docker-compose.yml file.

Create a folder for linguacafe, and a storage subfolder. Then download the docker-compose.yml file, and place in inside your linguacafe folder. Your folder structure should look like this:

.
├── linguacafe
│   ├── storage
│   ├── docker-compose.yml

If you want to change the default MySQL database and user, you can create a .env file inside your linguacafe folder and add these lines to it before starting your servers for the first time:

DB_DATABASE="linguacafe"
DB_USERNAME="linguacafe"
DB_PASSWORD="linguacafe"

You can also use a remote MySql server. In this case, you must create the database itself before starting the server.

DB_HOST="linguacafe-database-host"
DB_PORT=3306

MacOs users with Apple silicon must also create a .env file, and add the following line:

PLATFORM="linux/amd64"

Step 3: Run this command to download the docker images and start your server:

docker compose up -d

Windows:

For Windows, you can download this installation script and run it instead of running any of the commands yourself. Since this is a .bat file, Windows defender will warn you about it being potentially a malware.

Step 4: Admin settings

Your server now should be running and accessible on http://localhost:9191.

Although your server is set up and functional, please read the user manual, because there are a few additional steps before you can use linguacafe, like installing languages and importing dictionaries.

Install error troubleshooting

Mysql error while running the `docker compose up -d` command.

Some Apple silicon users have encountered error messages like these:

[+] Pulling 1/3 on
✘ mysql Error context canceled 1.0s
⠏ webserver [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.0s
⠏ python Pulling 1.0s
no matching manifest for linux/arm64/v8 in the manifest list entries

We do not know why, but pulling the images individually fixes this error.

Run these commands, then run docker compose up -d again:

docker pull --platform linux/arm64 ghcr.io/simjanos-dev/linguacafe-webserver:latest
docker pull --platform linux/amd64 ghcr.io/simjanos-dev/linguacafe-python-service:latest

Updating to the latest version

Please backup linguacafe before updating, otherwise you can lose your data if anything goes wrong. You can read more about backups in the user manual.

If you are below v0.9, please use the migration guide provided here instead of this command.

If you are below v0.12 and using Linux or MacOS, please run this command from your linguacafe directory (this won't be neccessary anymore in the future):

sudo chmod -R 777 ./storage

Run these commands to update and start your server:

docker compose pull
docker compose up -d

If you are below v0.12 and using Windows please delete these folders after updating, then restart your server. You will have to install your languages again if you had any installed.

linguacafe/storage/logs
linguacafe/storage/framework
linguacafe/storage/app/model

If you run into any problem updating, please contact me on discord, I will try to help.

Windows

On Windows, you can run again the installation script to update to the latest version, or run the commands separately.

Active development disclaimer

Note

LinguaCafe is still in active development, you might encounter some bugs while using the software. Please test it before you start actively using it, and make sure it is up to your expectations. At this time only one user/server is supported.

Contact information

Discord invite

Discord user: linguacafe_47757

Subreddit: /r/linguacafe

E-mail: [email protected]

Attributions

LinguaCafe uses many public resources. I am very thankful for these projects and for all the people who were working on them. They helped me greatly to create LinguaCafe.

Spacy tokenizer

License: MIT license

Spacy website

Spacy github

Spacy license

Pykakasi

License: License: GNU General Public License 3

Pykakasi website

Pykakasi license

Pinyin

License: MIT license

Pinyin website

Pinyin github

Pinyin license

Newspaper3k

License: MIT, Apache-2.0

Newspaper3k github

Newspaper3k license

EbookLib

License: GNU Affero General Public License v3.0

EbookLib github

EbookLib license

JMDict dictionary file

License: Creative Commons Attribution-ShareAlike 4.0 International

JMDict Project website

JMDict license information

JMDict license

KANJIDIC2 kanji file

License: Creative Commons Attribution-ShareAlike 4.0 International

JMDict Project website

KANJIDIC2 license information

KANJIDIC2 license  

CC-CEDICT dictionary file
License: Creative Commons Attribution-Share Alike 3.0 License

CC-CEDICT website CC-CEDICT license  

HanDeDict dictionary file
License: Creative Commons Attribution-ShareAlike 2.0 Germany License

HanDeDict website HanDeDict license  

Kengdic dictionary file
License: GNU Library General Public License, version 2.0

Kengdic github Kengdic license  

Eurfa dictionary file
License: The GNU General Public License 3

Eurfa download website Eurfa bitbucket Eurfa creator's website Eurfa license  

Wiktionary

License: Creative Commons Attribution-ShareAlike 3.0 Unported License

Wiktionary website

Wiktionary license

The specific wiktionary files that LinguaCafe uses have been downloaded from this GitHub repository.

Dict.cc

LinguaCafe has no dict.cc dictionaries packaged in the software. It only provides a link to the dict.cc website.

Dict.cc license

RADKFILE/KRADFILE

License: Creative Commons Attribution-ShareAlike 4.0 International

JMDict Project website

KRADKFILE license information

KRADKFILE license

DMAK kanji drawing library

License: MIT license

DMAK github project

DMAK license

KanjiVG License: Creative Commons Attribution-ShareAlike 3.0 Unported

KanjiVG website

KanjiVG github

KanjiVG license

linguacafe's People

Contributors

2600box avatar harabat avatar imavazq avatar jacovanc avatar mateuszmrw avatar mitch-briner avatar rominf avatar sergiolaverde0 avatar simjanos-dev avatar systemcrash avatar tlaborde avatar uzluisf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

linguacafe's Issues

Javascript errors when following install instructions

Hi there.

I followed the instructions to install on Linux (on main, commit f120a47) and the page http://localhost:9191/login is blank with some console errors:

On Firefox:

TypeError: c.primary is undefined
TypeError: t.$vuetify.theme.currentTheme is undefined

On Brave:

TypeError: Cannot read properties of undefined (reading 'base')
TypeError: Cannot read properties of undefined (reading 'background')

Edit: I have the exact same behavior on f120a47 (v0002).

Hover over vocabulary box.

A separate, optional and simplified version of the popup vocabulary box, that appears when the user hovers the mouse over a word or phrase and disappears when the mouse leaves the word or phrase.

Admin page dictionary color picker.

Dictionary color picker on the dictionaries admin page has white background in dark theme mode. (resources/js/components/Admin/AdminDictionarySettings.vue)

Text reader continuous reading mode.

A new optional mode for text reader, that loads the previous and next chapters, and allows users to scroll through them, and they won't have to click on a link to go to the next chapter.

Multiple user support.

I wrote everything in LinguaCafe with multiple user support in mind and it probably already works. Other than the admin page all code was written in a way that users can only interact with their own data, but it hasn't been tested yet.

These tasks should be done in order to allow this feature:

  • Remove disabled state from add user button on the admin page.
  • Test all functionality with multiple users.
  • Only allow access to admin page and its back-end for admin users.
  • Jellyfin integration should probably be an option that can be disabled and hidden when there are multiple users, because it does not make sense in some cases, like an instance of LinguaCafe hosted online for many people to use.
  • Add Anki support for multiple users. Right now the back-end is connected to Anki. An option should be added that changes the functionality, and connects the browser to an Anki instead.
  • In the language selection dialog replace the Manage languages button for regular users with a line that says that only admins can install additional languages. This UI element is currently only in the features/language-install branch, it will be merged into dev when it's finished.
  • #242 (this can be done later on as well)

More sources for importing.

Add support for imports from:

  • plain text
  • text file
  • youtube
  • jellyfin subtitle
  • subtitle files
  • website
  • RSS feed
  • PDF files
  • mpv player
  • manga
  • OPDS #171

If you have an other source you would like to use, please make a request here, and I'll add to the list if it's possible.

Browser plugin.

Browser plugin that allows the user to import any text from the browser, or use popup vocabulary right there on the websites as they were in LinguaCafe's library.

Add image for words and phrases.

A feature that allows users to search the internet for pictures, which they can add to their words and phrases from the vocabulary popup box.

Jellyfin support for movies.

I haven't finished Jellyfin support completely for subtitles. Right now Jellyfin only supports “TV show” type libraries, if there is a movie being played and the user goes to the Media player page, it will result in javascript errors.

It is just a problem on the javascript side I think, I will fix this issue in the near future.

Jellyfin listening statistics.

Jellyfin has a playback report plugin that can give information about playback times.

I want to add goals that can track immersion learning time in Jellyfin automatically, specifically listening to audiobooks and podcasts.

Not able to close window depending on where/when you click on certain elements

Hi,

I am using Firefox LTS on Ubuntu LTS. When I open a document, and select a word,

image

if I don't close the pop-up (clicking outside) and click on the beginning of a paragraph, for instance,

Screenshot 2024-01-08 at 22-44-18 LinguaCafe

Then if I click outside the pop-up, or on the close button, nothing happens. The only way to close it is clicking on other word (assuming there's another word on the screen), and then the close button works. There are other error messages on the JS console, but here's what I get when I click on the close button in that state:

TypeError: n is undefined
    saveWord http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    unselectAllWords http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Jn http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    n http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Jn http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    $emit http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    click http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Jn http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    n http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    _wrapper http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Rs http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    ve http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    zs http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    g http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    h http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Pa http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    _update http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    i http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    get http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    t http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    mount http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    $mount http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    $mount http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    init http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    h http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    h http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    m http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    h http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    m http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    h http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Pa http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    _update http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    i http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    get http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    t http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    mount http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    $mount http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    $mount http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    init http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    h http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    h http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    M http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    M http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Pa http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    _update http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    i http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    get http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    run http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Yn http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    oi http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    ni http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    promise callback*Xn http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    oi http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Vn http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    update http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    notify http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    set http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    finishSelection http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    mouseup http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    Jn http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    n http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
    _wrapper http://localhost:9191/js/app.js?id=b3cf576fd2bf5a53610286a3e715e3f8:2
app.js:2:874595

User settings page.

A user settings page, where the logged in user can change their own password. Will be extended with more pages in the future. The password change dialog is already implemented, this is just only needs UI work.

Plain text mode.

There is a plain text mode button in the text reader ("resources/js/components/TextReader/TextReader.vue"). It is the last button on the bottom of the toolbar. If it's active, the text should function as plain text, and be selectable and copyable by the user.

  • When plain text mode is active, there are still visual changes to words when the user hovers over them.
  • If a selection starts while the mouse over a word, the text does not become selected. It only works if the selection starts on an empty space.
  • It should have a title "Plain text mode", so users know what it does.

Example sentence column deletion.

There is an example_sentence column in the encountered_words table, it should be deleted. Example sentences have been moved into a separate table.

Vocabulary import.

Add an option to import vocabulary from a .csv. It should be next to the export menu button on the vocabulary search page. Should only allow single words without spaces at first. Will add phrase support in a different Issue later on, as they are more complex.

New words should be imported into the encountered_words database table.

Auto import cover.jpg if in the same directory of the ebook?

Hi!

I have just installed LinguaCafe, thank you! I found that when importing epub files from my Calibre library, I had to always a) upload, b) type detalis, c) save, d) change cover and select the cover.jpg.

The cover.jpg appears automatically as the browser remembers the last used directory. But maybe LinguaCafe could try to import cover.jpg (maybe ask user if s/he wants to import an automatically found cover?)?

Thanks

What is needed to add additional languages?

This project is very interesting, i am wondering what i need to do to add an additional language to it, in my case i want to use it for Finnish.

Maybe, if we have a list of task needed for a new language, it might be possible to add more dynamically or in bulk.

Activity timeline.

A timeline where users can see all the activity they did in LinguaCafe.

Long chapter titles are overflowing onto the main text.

When the user opens a chapter to read, and the chapter title is too long, then it flows onto the text.

The issue is in this file: "resources/js/components/TextReader/TextReader.vue".

Chapters are named "lessons" in the code, this will be changed in the future.

gitbug

Delete dialog's delay animation.

On some delete dialog's there is a delay animation so the user cannot delete things accidentally without reading the dialog. It is done with multiple setTimeout calls, but should be changed to css animation and one setTimeout call to make sure it takes the same time on every client.

Japanese writing practice sheets.

A separate page that allows users to create practice sheets for Japanese writing. They could practice writing kanji and words with a touch device, or print out the sheet and do it on paper.

Phrase review spaces.

When reviewing a phrase, the phrase is displayed with spaces between every token in non Japanese and Chinese languages. It should not have a space before characters like question marks, punctuation marks and commas. It should be displayed the same way as it is in the text reader.

It is also a problem on the vocabular search page's edit dialog.

It is difficult to fix, and not a priority because most phrases won't have commas, punctuation marks or similar characters.

Is there a way to make everything non-yellow?

I know a lot of Spanish words, but that's because it's very similar to Portuguese (my native language). I imported a book, and was planning to use it to go through the words that I do not understand. But with so many yellow words it becomes very hard to read it, and to mark the words that I am comfortable with (most due to PT & ES similarities).

Would it be possible to toggle everything non-yellow and then set the unknown words to some level, please?

Thank you!

Text reader sentence mode.

A new mode for text reader, that allows users to read a long text sentence-by-sentence.

I didn't add "no pull request" tag, but please if you would like to work on this leave a comment. I would like to design the UI for this myself.

Word and phrase read counts.

There is a read_count column in the database for counting how many times unique words(encountered_words in the db) and phrases have been read by the user, however it is not implemented yet.

  • Display read_count on vocabulary popup box.
  • Display read_count on vocabulary search page's edit dialog.
  • Increase read_count when a chapter has been finished reading.
  • Increase read_count when a review card has been read.

import-jmdict: Symfony Maximum execution time of 600 seconds exceeded

On my current host I'm running the jmdict import by signing in then navigating to :9191/jmdict/import-jmdict
the count reaches 18700 then encounters a Symfony FatalError due to maximum execution time.

May impact slower machines with the current 600 second max execution time, (mine ended up being a bit under 20 minutes to complete) I worked around manually by changing the uploads.ini with sed since I already had it deployed, for others that may be concerned about it can edit the docker/PhpDockerfile and set it to a higher value or 0 to set to unlimited (not recommended just in case something goes awry)

RUN printf 'max_execution_time = 600\n' >> /usr/local/etc/php/conf.d/uploads.ini

This may not be something that needs to be changed unless it affects a significant amount of people as 10 minutes should be a pretty good number, but in case anyone else runs into it while importing the dictionary files, there's a quick fix.

Thanks!

Text reader page's dialog title bars do not look the same as other title bars.

There are 3 dialogs on the text reader page:

  • Settings (resources/js/components/TextReader/TextReaderSettings.vue)
  • Chapters (resources/js/components/TextReader/TextReaderChapterList.vue)
  • Glossary (resources/js/components/TextReader/TextReaderGlossary.vue)

They were created a long time ago, and do not have proper title bars with close buttons. They should be identical to other dialogs like "resources/js/components/Dialogs/ThemeSelectionDialog.vue".

Manga reader.

A feature that allows users to upload manga files, run OCR on them and read them with LinguaCafe's dictionary toolset just like any text.

User deletion on admin page.

There is a button on admin page to delete a user, but the functionality is still missing. When a user is deleted, all of that user’s data must be also deleted.

If there's only one admin account left, it should not be deletable.

Persistent vocabulary box.

An option for large screens that makes the vocabulary box be always visible on the right side of the screen, and take up the height of the window. Editing inputs should also be visible all the time without having to click on a button to get there.

Flashcard system.

A fully customisable flashcard system inside LinguaCafe with multiple flashcard decks.

Word review missing lemma.

When reviewing a word and the sentence mode is active on the toolbar, the lemma of the word is not visible on the front of the card. It should look the same way as on the back of the card.

(resources/js/components/Review/Review.vue)

Github development

Hi!

Can someone please help me with some github basics?

I've created a dev branch, which I plan to use to for development, and I only push working versions for the main branch with a new version number each time.

I've got this message on github:

Your main branch isn't protected
Protect this branch from force pushing or deletion, or require status checks before merging.

I clicked on it, and created the default ruleset that github offered me.

Can someone explain it to me what it is, and what should I be looking out for? Is there anything else important I should set up in github?

Calendar review goal bug.

There is a bug in the calendar in dark theme mode, when viewing “Review“ goals, and a day has 0/0 reviews. The text is dark instead of light, and is not readable.

gitbug

Rename lessons to chapters in the code

In the code chapters are referred as lessons. It is a legacy term that I renamed later. All of them should be changed to chapter. They must preserve their lowercase or uppercase states after the changes. They should also be renamed in the database if any table has a column name that contains "lesson" word in it.

Update Node and MySQL to supported versions

Currently, two of the major foundations of this project run on severely outdated versions that throw warnings when building see (#50) and expose users to bugs and vulnerabilities solved long ago. This should be updated as soon as possible, even if it requires introducing breaking changes or refactoring sections of code. The longer this is left undone, the harder it will be to do.

  • Update Node to a supported version.
  • Update MySQL to a supported version.
  • Update to Vue 3.
  • Update to Laravel 11.
  • Update PHP to the latest supported by Laravel 11.

Separate goal logic to a service class.

There are goal tracking related logic codes in different controllers. They should be separated into a service class, and the controllers should use that service class instead.

Add support for font types.

  • Add a directory to the deploy branch for fonts.
  • Add a default font type for: Japanese, Chinese and one for every other language.
  • Add a UI to the admin page, where the admin can assign fonts to languages.
  • Let users select font types in the text reader and review, and save it locally.
  • If a font type was deleted, fall back on the default font on the text reader and review pages.

Use github ghcr.io for Docker images

There are a few pages which document this. Keeping everything on github is really clean and easy. Not everyone is aware github has this feature.

Here is an example Github workflow that could be used as a template: https://github.com/porjo/ytdl-web/blob/master/.github/workflows/build-and-push.yml . The only thing that should need changing is to replace:

on:
  push:
    tags:
      - "*"

with

on:
  release:
    types: [created]

The repository owner would first need to create a PAT with permissions repo, workflow, write:packages and add it to the repository's secrets.

Bookmarks.

Bookmarks for books, that allow users to continue their reading where they stopped.

Support for adding audio to words.

  • Add support for uploading and saving an audio for words and phrases.
  • Add support for text to speech on chrome and other clients where possible.

In the future it would also be possible to generate TTS with AI models and save it on the server.

Windows installation process.

Can someone please write an installation and update process guide in the readme file for windows, using the latest method in the dev branch? I only have access to one windows machine, and I couldn't get docker working on it.

It would also be great, if all the commands could be run by clicking on a single install.bat and update.bat file, because there are many people in the language learning community who do not use CMD at all, and it would make it a lot easier for them. I don't know if this is possible or not.

Import subtitles from Jellyfin option.

An option to import subtitles from Jellyfin on the Media player page, and save it in the Library. This will also helps later to easily implement importing subtitles from other sources.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.