The server now holds dictionaries for everyone: `dictionary_entry` and `dictionary_source`, reference data owned by no one, never synced. It loads the dictionary files in its `dictionaries` folder at every start, those whose SHA-256 changed: in the background, each source replaced in one transaction, so searches meanwhile find the old entries; a file it can't read is logged and left out. All of JMdict loads in under half a minute. On an instance the folder is deploy/dictionaries, mounted read-only (compose.yaml); the server's README says how. DictionaryEndpoint (signed in): the dictionaries with their credits; a search (exact key, exact loose key, key starting with the query, loose key starting with it, each in the source's order; katakana as hiragana, macrons written out), some 150-450 ms over all of JMdict; and the entries with a label, counted and a page at a time (all JLPT N5 words). The curator now keeps spellings that aren't quite right apart, as `looseKeys` (romaji with long vowels typed once): "sushi" finds 寿司 before 数詞 (すうし). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
37 lines
1.4 KiB
Markdown
37 lines
1.4 KiB
Markdown
# halkyon_learn_server
|
|
|
|
This is the starting point for your Serverpod server.
|
|
|
|
Start your server by running:
|
|
|
|
cd halkyon_learn
|
|
serverpod start
|
|
|
|
When you are finished, you can shut down the running server with `Q`.
|
|
|
|
## Dictionaries
|
|
|
|
The dictionaries people look words up in (JMdict, …) are reference data the
|
|
server holds for everyone. They come as dictionary files, which
|
|
`halkyon_learn_curator` makes from the sources' downloads (its README says how).
|
|
At every start, the server loads the files in its `dictionaries` folder that
|
|
changed since they were last loaded (by their SHA-256): in the background, a
|
|
source at a time, and all at once, so searches meanwhile still find the old
|
|
entries. A file it can't read is logged and left out.
|
|
|
|
- **Development:** put the file into `halkyon_learn_server/dictionaries/` and
|
|
restart `serverpod start`.
|
|
- **An instance:** put it into `deploy/dictionaries/` beside `compose.yaml`
|
|
(mounted read-only as `/app/dictionaries`) and restart the server container.
|
|
`DICTIONARIES_DIR` names another folder.
|
|
|
|
JMdict in English, with the JLPT levels, is about 17 MB gzipped and takes the
|
|
server half a minute to load (219,000 entries). Its licence (CC BY-SA 4.0) asks
|
|
for attribution: the app lists the credits each file carries.
|
|
|
|
## Licence
|
|
|
|
Copyright (C) 2026 The Halkyon Learn contributors
|
|
|
|
Licensed under the Server Side Public License, version 1 (`SSPL-1.0`); the full text
|
|
is in `LICENSE`.
|