GithubHelp home page GithubHelp logo

arnevogel / listudy Goto Github PK

View Code? Open in Web Editor NEW
264.0 264.0 43.0 4.09 MB

Listudy - chess training server

Home Page: https://listudy.org

License: GNU Affero General Public License v3.0

Elixir 41.77% CSS 7.00% JavaScript 22.86% HTML 27.26% SCSS 0.63% Python 0.30% Shell 0.19%
chess spaced-repetition

listudy's People

Contributors

aclonegeek avatar alessandrodalbello avatar arihol avatar arnevogel avatar blombard avatar dependabot[bot] avatar fedemengo avatar flavourdave92 avatar forerosantiago avatar fraga avatar ingridmorstrad avatar joelgritter avatar lucasgenova avatar lultima avatar minot1 avatar n3bojs4 avatar olleeriksson avatar sampma309 avatar seanyeh avatar vasilije2448 avatar vogelibr 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  avatar  avatar  avatar  avatar  avatar  avatar

listudy's Issues

Add arrows, move annotations, and eval annotations

Hi, this is a super awesome tool - thank you! That said, I have a couple suggestions:

  • As of right now arrows + circles drawn on lichess studies aren't imported over. Would it. be possible to implement this?
  • Move annotations also cannot be seen (e.g ?! and ?? and !!). Perhaps this could be implemented with a move list on the side?
  • Eval annotations such as (+- or -+) are often useful at the end of opening lines. Could this be implemented? (Perhaps similarly with a move list)

Thank you so much!

Remember Lichess study URL

Hi,

First of all, thanks for listudy. I was looking for a way to use spaced repetition to study opening studies I made in lichess and listudy solves this problem perfectly.

The one small annoyance I have is that I update these lichess studies quite frequently. It would be awesome if it could auto-update or if that is not possible remember the URL in the edit page, so we can easily update the study.

Another possible solution could be logging in with lichess (the same way openingtree does). That way we can also maybe enable access to private lichess studies, but from a technical standpoint that does sound more complicated.

Stuck in endless cycle if you always play the same move of multiple in the study

Steps to reproduce:

  1. Play this study or create a study with the following PGN: 1. e4 e5 2. Nf3 Nf6 3. Bc4 Nxe4 4. Nxe5 d5 5. Bb3 (5. Qf3 Be6 (5... f6 6. Qh5+ g6) 6. Bb3 Qg5) 5... Qg5 *
  2. When you have the option to play 5... Be6 or 5... f6 always play Be6
  3. After some time, White always goes into the line where you play Be6 because Listudy wants you to play f6

You can get out of the endless cycle by playing f6 but why should you memorize two lines if you are free to choose one?

A workaround is to not include multiple options for the side the study is meant for.

Typo in homepage <title>

"Improve you chess game with spaced repetition" should be "Improve your chess game with spaced repetition".

No time to review final position before board resets

When "you reached the end of this line", the study automatically restarts to the starting position. This doesn't give you much time to look at it. In other words: I'd like to be able to review the final position in the line before resetting the board.

Perhaps a "continue" / "next" button could be added that triggers the board reset? Even just a 3-4 second delay would be helpful, if you don't want to change the interface.

PS: Really enjoying Listudy, have wanted (and mused about making) something similar for a long time. Thanks!

Global study options

The options that are adjustable on each study page don't seem to be persisted throughout the use of the platform. It would be great if those could be saved globally per user

Sign-in Issue

Registered w/ two different accounts successfully but I am unable to sign back in after logging out.
Credentials and passwords are correct. Tried clearing caches and cookies w/o success.

Add tactical motif to each puzzle

I don't know what your goals for this project are, but it would be awesome if it tried to do what chesstempo does very well, tactics!

It would be nice if one could seriously train tactics on listudy. To do that, one should be able to select a particular tactical motif, between a given rating range, and solve it, with spaced repetition enabled.

Example:

Say I am not good with basic forks and I want to train them. I would log into listudy, create a new "set" with only forks rated between 500 and 1250. I would then solve the puzzles. Hopefully, listudy already supports spaced repetition.

To do this, each puzzle needs to be tagged with both a rating and tactical motifs. Each puzzle can have more than 1 tactical motif, and those motifs should be voted out by the community.

Blind Tactics that are not checkmates

Hey, first of all: The work you are doing here is really amazing!
It would be great if the blind tactics were not only checkmate tactics, but also e.g. tactics that lead to a material advantage. Knowing that one only has to look for a checkmate makes things much easier.

Use Leitner system more effectively - show information on variations in study mode

Thanks for building listudy, the GUI and interface is great! I also think using the Leitner system is a great idea for spaced repetition!

In order to make studying with the Leitner system more effective, it would be useful to get some details about the studies, which have been marked as favorites.

Feature request:
In order to know how many variations have been trained and which variations are in which "box", it would be useful to display this information when opening the study.

I.e.:
Total variations: 100
Variations unseen (box 1): 60
Variations in box 2: 26
Variations in box 3: 14
Variations in box 4: 20

How many boxes does listudy use?

As a further step, one could configure a time, when the respective boxes are due for learning again.

I.e. allow times to be set for the boxes
Box 1: Due for learning now, since they are unseen
Box 2: Due in x hours
Box 3: Due in y days/hours
etc.

Study search frequently resets

In Chrome on Android 8.0, the search page resets the search when I hit enter, and also at other seemingly random points of time while I'm searching. Gets pretty frustrating when trying to find studies.

Underpromotion move recognized but not permitted

Uploaded a PGN with under promotion to knight with check.
In the PGN : fxg1=N+
PGN attached, mainline 7th move for black (last line in file)
PGN created with Scid vs. MAC

The arrow shows in the study as the desired move but when move is attempted the message indicates that this move is not part of the study.
AlbinCounterGambitPGN.txt

Great App. thank you.

Chess clicker erroneously resets progress

not sure exactly what triggers the reset, it seems to be happening randomly

user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:84.0) Gecko/20100101 Firefox/84.0

`(ArithmeticError) bad argument in arithmetic expression` when spinning up server

Hello,

Following the instructions in the README and when I try to run mix phx.server and then load up localhost:4000 I get this error:

Server: localhost:4000 (http)
Request: GET /en
** (exit) an exception was raised:
    ** (ArithmeticError) bad argument in arithmetic expression
        :erlang.rem(2632897, 0)
        (listudy 0.1.0) lib/listudy_web/controllers/tactic_controller.ex:205: ListudyWeb.TacticController.daily_id/0
        (listudy 0.1.0) lib/listudy_web/controllers/tactic_controller.ex:198: ListudyWeb.TacticController.daily_tactic/0
        (listudy 0.1.0) lib/listudy_web/controllers/page_controller.ex:13: ListudyWeb.PageController.index/2
        (listudy 0.1.0) lib/listudy_web/controllers/page_controller.ex:1: ListudyWeb.PageController.action/2
        (listudy 0.1.0) lib/listudy_web/controllers/page_controller.ex:1: ListudyWeb.PageController.phoenix_controller_pipeline/2
        (phoenix 1.5.7) lib/phoenix/router.ex:352: Phoenix.Router.__call__/2
        (listudy 0.1.0) lib/listudy_web/endpoint.ex:1: ListudyWeb.Endpoint.plug_builder_call/2
        (listudy 0.1.0) lib/plug/debugger.ex:132: ListudyWeb.Endpoint."call (overridable 3)"/2
        (listudy 0.1.0) lib/listudy_web/endpoint.ex:1: ListudyWeb.Endpoint.call/2
        (phoenix 1.5.7) lib/phoenix/endpoint/cowboy2_handler.ex:65: Phoenix.Endpoint.Cowboy2Handler.init/4
        (cowboy 2.8.0) /home/andrew/Coding/listudy/deps/cowboy/src/cowboy_handler.erl:37: :cowboy_handler.execute/2
        (cowboy 2.8.0) /home/andrew/Coding/listudy/deps/cowboy/src/cowboy_stream_h.erl:300: :cowboy_stream_h.execute/3
        (cowboy 2.8.0) /home/andrew/Coding/listudy/deps/cowboy/src/cowboy_stream_h.erl:291: :cowboy_stream_h.request_process/3
        (stdlib 3.14) proc_lib.erl:226: :proc_lib.init_p_do_apply/3```
        
This is my first time working in Elixir or Phoenix so I have no idea how to debug this. Any help you can give is greatly appreciated, thank you!

Feature req: Show PGN annotations

Hi Arne, thank you so much for this software.

I'd like to propose a feature to display PGN annotations for moves after they've been played.

Proposed feature
After a move has been played, if there is an annotation, display a box underneath the "✓ 3x Right move!" box displaying the move's PGN annotation.

Rationale
As written on the memorising chess openings article on your website, "not only the moves are important but also the concepts behind the moves. For this reason, the comments from the studies are shown, in which the reason for various moves can be explained."

Comments are useful, but they're not position or move-specific, so move-specific annotations I think are a better solution for understanding the concepts behind the moves. PGN files and editors already support these annotations, so they can be directly imported.

Annotations for moves that the computer plays would naturally serve as hints or prompts, e.g. "Here black plays Nf6 threatening the pawn on e4. How can white respond with a counter attack?" By contrast, annotations for moves that the player makes are concepts that the player wants to remember, e.g., "Correct. Ng6 threatens the fried liver attack."

Of course, users can annotate the games in whatever way they find the most useful.

Considerations

  • If the back end stores raw PGN data, there will likely already be annotations present, changing the expected behaviour of existing studies. In this case, annotations should be deleted in a migration.
  • Users may want to import PGN data with annotations but not want them to be displayed. A future feature could give the user a setting to strip annotations during PGN import.

Please let me hear any comments/feedback. If this is an acceptable feature, I can attempt an implementation and submit a pull request for review.

Opening tactics

Hi, I found the page for the ponziani tactics https://listudy.org/en/tactics/opening/ponziani-opening and I thought it was really intereesting, however when I tried to get a page like that for the evans gambit it didn't work. It looks like these are automatically generated, so could you consider adding a feature where you only train tactics in a specified opening?

Tactics don't work with promotion

This is an example of a tactic that would require promotion in order to be solved. As far as I can tell this isn't supported yet.

Thanks so much for the great software.

Reset password

I'm trying to sign-in at https://listudy.org/session/new

It says "The provided login details did not work. Please verify your credentials, and try again."

I'm using a password manager, so if the password is wrong, I can't really verify anything: I just need a new password. Normally on a login page there is a reset/forgot password link, but I can't see that here.

Accented characters don't display in variation comments

Hello! I've been using Listudy for a while now, but I've been encountering a problem.
I've been making studies with comments in my native language (French), but the accented characters don't show up (such as à, é, è, or î).
Below is a short PGN example to reproduce the issue

[Event ""]
[Site ""]
[Date "????.??.??"]
[Round ""]
[White ""]
[Black ""]
[Result "*"]

1.e4 e5 2.f4 {A à E é I î O ô U ù Y} *

On Listudy.org, the comment is displayed as "A E I O U Y", ignoring all accented characters. This creates typos in the comments, so reading through the comments becomes harder.
Accented characters display fine on the study title or the study description, so it seems the issue is related to the embedded PGN viewer.
Could it be possible to fix this?

Add a key moves feature similar to Chessable

The idea would be to start training at the first point the PGN has variations to avoid having to play the first few basic moves repeatedly.

I made an extremely simple proof of concept version here which appears to work: https://github.com/KerfuffleV2/listudy/tree/key_moves_feature

Since I don't actually know JavaScript and I'm not familiar with the codebase it's likely this isn't a good approach. The meat of it is in the tree_from_pgn.js:annotate_pgn function which adds a move_index value to each move and a first_variation to the head of the game. The toggle is not hooked up to the UI in that branch and currently always set to true.

It's implemented in study.js to just skip through the moves like you do when it's not the student's turn by calling play_move(ai_move(...)) when the toggle is set and there actually is a variation in the current chapter.

The annotated tree seems like it would also make implementing a maximum study depth feature relatively easy.

If I broke any etiquette, please forgive me. I don't contribute to projects on Github often.

SyntaxError at line: 1, character: 1; Unexpected: ""

I see 'SyntaxError at line: 1, character: 1; Unexpected: ""' in a red box when I navigate to this study: https://listudy.org/en/studies/3xdxc5-english-symmetrical-four-knights-master.

The console shows two messages:

{
  "message": "Expected \" \", \"*\", \".\", \"0-1\", \"1-0\", \"1/2-1/2\", \";\", \"O-O\", \"O-O-O\", \"[\", \"\\n\", \"\\r\", \"\\t\", \"\\x0C\", \"{\", [1-9], [NKQRB], or [a-h] but \"\" found.",
  "expected": [
    {
      "type": "literal",
      "text": " ",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\f",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\t",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\r",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\n",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": " ",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\f",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\t",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\r",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\n",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "{",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "{",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": ";",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": " ",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\f",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\t",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\r",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\n",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "[",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": " ",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\f",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\t",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\r",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\n",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "{",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "{",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": ";",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": " ",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\f",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\t",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\r",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\n",
      "ignoreCase": false
    },
    {
      "type": "class",
      "parts": [
        [
          "1",
          "9"
        ]
      ],
      "inverted": false,
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": " ",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\f",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\t",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\r",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "\n",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": ".",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "O-O-O",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "O-O",
      "ignoreCase": false
    },
    {
      "type": "class",
      "parts": [
        "N",
        "K",
        "Q",
        "R",
        "B"
      ],
      "inverted": false,
      "ignoreCase": false
    },
    {
      "type": "class",
      "parts": [
        "N",
        "K",
        "Q",
        "R",
        "B"
      ],
      "inverted": false,
      "ignoreCase": false
    },
    {
      "type": "class",
      "parts": [
        [
          "a",
          "h"
        ]
      ],
      "inverted": false,
      "ignoreCase": false
    },
    {
      "type": "class",
      "parts": [
        [
          "a",
          "h"
        ]
      ],
      "inverted": false,
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "1-0",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "0-1",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "*",
      "ignoreCase": false
    },
    {
      "type": "literal",
      "text": "1/2-1/2",
      "ignoreCase": false
    }
  ],
  "found": "",
  "location": {
    "start": {
      "offset": 0,
      "line": 1,
      "column": 1
    },
    "end": {
      "offset": 1,
      "line": 1,
      "column": 2
    }
  },
  "name": "SyntaxError"
}

and

Uncaught TypeError: trees.map is not a function
    at study-ec97f0a8f37dab4ffcae9af541bcc2f7.js?vsn=d:2
    at Module.<anonymous> (study-ec97f0a8f37dab4ffcae9af541bcc2f7.js?vsn=d:2)
    at n (study-ec97f0a8f37dab4ffcae9af541bcc2f7.js?vsn=d:2)
    at Object.<anonymous> (study-ec97f0a8f37dab4ffcae9af541bcc2f7.js?vsn=d:2)
    at n (study-ec97f0a8f37dab4ffcae9af541bcc2f7.js?vsn=d:2)
    at study-ec97f0a8f37dab4ffcae9af541bcc2f7.js?vsn=d:2
    at study-ec97f0a8f37dab4ffcae9af541bcc2f7.js?vsn=d:2

Spanish translation

Hello, I am interested in contributing to this project by making the Spanish translation.

Thank you!

Login failure

  1. I have registered a new account, added a study, did the studying etc.
  2. No confirmation e-mails were received.
  3. After I have logged out, I could no more log in. The site gives the following error:
    "The provided login details did not work. Please verify your credentials, and try again."

I am absolutely sure that my credentials are right. To double-check I have created one more account and it faced the same issue.

Creating a study with blank description crashes

At least on the live site, leaving the description field blank causes "Internal server error". Other fields like visibility, category, whether creating from PGN or Lichess study do not seem to affect this behavior. Interestingly enough, the site does seem to validate the description field when it's populated but doesn't have sufficient characters.

After doing a little digging, it seems that the form textarea tag has minlength defined to prevent submissions with length less than 20, however it lacks the required attribute so will still allow empty submissions. See https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fe-minlength

Solutions to Endgames

Currently there is no way to know the correct solutions to the Endgames. Some combination of hints and solution and explanation will be very nice addition.

Error when setting up listudy

On step 'mix setup' (ran the other steps, and phoenix server started successfully).

Stack trace follows:

The database for Listudy.Repo has already been created 20:25:34.457 [info] Already up [info] [Pow.Store.Backend.MnesiaCache] Mnesia cluster initiated on :nonode@nohost [debug] QUERY ERROR db=47.0ms idle=735.0ms INSERT INTO "users" ("email","password_hash","role","username","inserted_at","updated_at") VALUES ($1,$2,$3,$4,$5,$6) RETURNING "id" ["[email protected]", "$pbkdf2-sha512$100000$j7PasHrv6LMbGdCqpYVrTA==$A3+0bz2XFCmQx7OMssNE1nmp+KRUKusLy3ZDV09yut6QCfZwXewEmyXY9RRJH2Z09LVH84uiRRGk/ioaeBKoSQ==", "admin", "Arne", ~N[2020-09-06 03:25:36], ~N[2020-09-06 03:25:36]] ** (Ecto.ConstraintError) constraint error when attempting to insert struct: * users_email_index (unique_constraint) If you would like to stop this constraint violation from raising an exception and instead add it as an error to your changeset, please call unique_constraint/3on your changeset with the constraint:nameas an option. The changeset has not defined any constraint. (ecto 3.4.4) lib/ecto/repo/schema.ex:700: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3 (elixir 1.10.3) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2 (ecto 3.4.4) lib/ecto/repo/schema.ex:685: Ecto.Repo.Schema.constraints_to_errors/3 (ecto 3.4.4) lib/ecto/repo/schema.ex:666: Ecto.Repo.Schema.apply/4 (ecto 3.4.4) lib/ecto/repo/schema.ex:263: anonymous fn/15 in Ecto.Repo.Schema.do_insert/4 (ecto 3.4.4) lib/ecto/repo/schema.ex:164: Ecto.Repo.Schema.insert!/4 (listudy 0.1.0) lib/listudy/seeds.ex:68: Listudy.Seeds.call/0 (elixir 1.10.3) lib/code.ex:926: Code.require_file/2 (mix 1.10.3) lib/mix/tasks/run.ex:145: Mix.Tasks.Run.run/5 (mix 1.10.3) lib/mix/tasks/run.ex:85: Mix.Tasks.Run.run/1 (mix 1.10.3) lib/mix/task.ex:330: Mix.Task.run_task/3 (mix 1.10.3) lib/mix/task.ex:364: Mix.Task.run_alias/3 (mix 1.10.3) lib/mix/task.ex:292: Mix.Task.run/2 (mix 1.10.3) lib/mix/task.ex:364: Mix.Task.run_alias/3 (mix 1.10.3) lib/mix/task.ex:292: Mix.Task.run/2 (mix 1.10.3) lib/mix/cli.ex:82: Mix.CLI.run_task/2

Feature req: Adjustable computer move delay

Hi Arne, thanks for your hard work.

Feature proposal
Have a user setting to adjust a variable time delay between the user placing his/her move and the computer replying with its move.

For example the following settings could be used:

  • Instant: the computer replies instantly (default setting - current behaviour)
  • Fast: the computer replies between 1 and 2 seconds
  • Medium: the computer replies between 2-5 seconds
  • Slow: the computer replies between 5-10 seconds

Rationale
I've been using Listudy the past few days to build and practise my openings repertoire. One aspect I'd love to be able to tweak is how fast the computer plays its response move. Currently the computer makes its reply instantly, which is great if I've already learnt my response by heart, but it's very fast when first learning and practising. By having an adjustable delay, the user could practise at a pace they're comfortable with and increase their training speed over time. A variable delay would make the training feel more similar to playing against a real person. A time delay would also provide a space for the user to naturally think about what reply might be made, reinforcing understanding of the lines being practised.

Please let me know your thoughts!

Random page reloads during tactic puzzles

Page reloads randomly while doing tactics and blind tactics on mobile (safari). This does get annoying when you do the first move to a puzzle then it reloads. Especially if it is blind chess then you don’t know why your move is suddenly wrong/not working because the position reset

Generate opening studies from database

Would it be possible to generate "official" openings trainings by iterating through an openings database? You could implement it like this:

  1. Generate a study for each 3-4 Move combination
  2. for each study, iterate through all the opening moves in the database and add them as variations
  3. ???
  4. profit!

Let me know what you think.

left/right arrow keys mapping

When in a study, I feel like the left arrow key should revert back to the previous position instead of changing chapter.
And the right arrow key should move the position forwards, but only if the left arrow key has been used.

More than once have I found myself changing chapter instead of moving the position back. It is very frustrating.

Dark mode is automatically deactivated in Endgame puzzles

Hello, I've found another bug on the website.
When Dark mode is toggled and I select any Endgame puzzles (such as Checkmating > Bishop + Bishop 5), dark mode is automatically toggled off.
Then, if I toggle it back on and return to the home page by clicking the Listudy logo, dark mode is automatically toggled off a 2nd time.
I tried navigating to multiple other pages : blog posts, Tactics section, Studies section, bottom page links (ToS, Copyright, ...), Achievements, etc... . But this problem seems to only happen with Endgame puzzles.
Could this be fixed please? Thanks in advance.

Blind tactics with no pieces on the board

So my idea is we only show board position in text for example:
White: King on b1, pawns on a2, b2 c2.
Black: Rook on h8, King on a8.
User can make move on an empty board or input moves by text.

Add support for non-opening studies?

Can non-opening studies like endgame positions be supported by listudy? When I import a study that doesn't start with the starting position, it shows me the starting position anyway.

[Question] Plans to import non-opening pgns

Hello, and thank you for your precious efforts for open source chess spaced repetition training!

I wanted to ask if there are any plans to add functionality to import non-opening pgns as well. For example one could import a tactics pgn study. This basically means that there shouldn't be a need to define "sides" when importing the pgn. The starting player for each position would be the one you train.

Sync study with Lichess

This will be really useful feature for many of us for incrementally building a repertoire. As a study changes with new lines, we won't have to reimport it and start from the beginning.

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.