Commit graph

12009 commits

Author SHA1 Message Date
j5155
bf4f1e08a6
impr(quotes): Add English quotes from Andor S1 (@j5155) (#6585)
### Description

I added some quotes of various lengths from Andor season 1. 

### Checks

- [x] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language?
- Make sure to follow the [languages
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md)
  - [ ] Add language to `packages/contracts/src/schemas/languages.ts`
- [ ] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [ ] Add language json file to `frontend/static/languages` 
- [ ] Adding a theme?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md)
  - [ ] Add theme to `packages/contracts/src/schemas/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes` 
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/contracts/src/schemas/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
  
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.

<!-- label(optional scope): pull request title (@your_github_username)
-->

<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->


<!-- the issue(s) your PR resolves if any (delete if that is not the
case) -->
<!-- please also reference any issues and or PRs related to your pull
request -->
<!-- Also remove it if you are not following any issues. -->

<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->

<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
2025-06-16 14:27:40 +02:00
Miodec
dabaa14341 chore: add insane badge 2025-06-16 13:11:22 +02:00
Miodec
9891dac323 chore(release script): remove validate-json step if only running in the backend 2025-06-16 12:13:36 +02:00
Miodec
63b63ffa9c chore: update plugins overrides 2025-06-14 15:33:52 +02:00
Miodec
4c05dd8326 chore: bump oxlint version 2025-06-14 14:43:05 +02:00
Miodec
2d008461ed chore: catch firebase internal errors when trying to auth 2025-06-14 14:11:05 +02:00
Miodec
8843c50d71 impr(account): add restarts per test and highest wpm to activity graph 2025-06-12 16:51:46 +02:00
Miodec
9d28a42c73 chore: remove non word 2025-06-12 15:35:14 +02:00
Nad Alaba
238a2c72e4
fix(wordsInput): prevent #wordsInput from overflowing the #wordsWrapper (@NadAlaba) (#6610)
### Description

in tape mode, if a long word is wider than the #wordsWrapper, then
#wordsInput may overflow to the right causing a horizontal scroll to
keep it in view. This limits its width so that it ends with the
#wordsWrapper.


https://github.com/user-attachments/assets/a9266407-a21c-43c0-9304-e683c6c2ce04
2025-06-04 13:16:19 +02:00
Seif Soliman
ec6e76b12e
chore: fix typo in issue template (@byseif21) (#6613) 2025-06-04 10:59:44 +02:00
Viktor
502f1c52b8
impr: add words to Odin, remove non-existing complex_* (@dayllenger) (#6607)
### Description

Added a few missing keywords, some common attributes and procedures.
Removed complex_double/complex_float (not sure why they were there).

### Checks

- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
2025-06-04 10:58:43 +02:00
Jack
4bb431b98a
perf: fix account page getting slower with every load (@miodec) (#6606)
Stacking event listeners go brrrrrrr
2025-05-29 17:00:56 +02:00
Miodec
af86a2d73d style: align ad content to the center 2025-05-29 15:15:18 +02:00
Seif Soliman
0600b25cda
fix(settings page): ui not updating on favorite themes change via commandline (@byseif21) (#6567)
### Description
When using the command line to add or remove a theme from favorites
while on the settings page, the favorites UI would not reflect the
changes until the user manually refreshed the page or changed the theme.
This caused confusion, despite the changes being correctly saved in the
config.

**Solution**
Added a ConfigEvent subscription in theme-picker.ts to listen for
"favThemes" updates. If the active page is "settings", the UI is now
refreshed immediately by calling refreshPresetButtons().
2025-05-29 13:35:21 +02:00
Miodec
04fbd81c10 chore: bump oxlint version 2025-05-29 13:23:13 +02:00
Seif Soliman
0bf76e8990
impr: add quick theme favorite indicator to the commandline & footer (@byseif21, @miodec) (#6460)
### Add Quick Favorite ~~Toggle~~ **Indicator** and Prioritized
Favorites to Theme Picker

This pull request adds a new feature to MonkeyType’s theme picker &
(**current theme button** in the **footer**) ~~making it super easy for
users to save/unsave and access their favorite themes instead of going
to the settings or any other thing~~ to display a small **star icon**
indicating whether the **the theme** is marked as a favorite. Favorited
themes appear at the top of the theme list for quick access.

~~Also, I added a small heart icon next to the current theme button in
the footer to quickly favorite the active theme with one click—making it
even easier to save a new favorite without needing to open the list.~~

The star icon next to the current theme button **only acts as a visual
indicator**, showing whether the current theme is a favorite or not.
**No longer clickable**.

---

**User Benefits:**

* **Favorites at the Top:**
Favorite themes appear first in the theme picker, so you can switch to
them instantly without searching through the list.

* ~~**One-Click Star Toggle:**~~
~~Click a star next to any theme to favorite or unfavorite it right in
the picker. No need to dig through settings, saving you time and
effort.~~

* **Visual Indicator for Active Theme:**
A small star icon beside the current theme button tells you at a glance
whether your active theme is in your favorites—without needing to open
the list.

---

**What I Did:**

* Added a star icon appears next to the favorite themes ~~each theme in
the theme picker for quick favoriting or unfavoriting.~~
* Made favorite themes show up at the top of the list for easy access.
* ~~Added a small heart icon next to the current theme button in the
footer to favorite the active theme quickly.~~
* Added a small star icon next to the current theme button in the footer
**as an indicator only** — it shows whether the active theme is a
favorite, but **is not clickable**.
* ~~- Added notifications to confirm when a theme is favorited or
unfavorited.~~

---

**Preview:** (**OUTDATED**)


[https://github.com/user-attachments/assets/5bba15c4-edbb-4577-abfe-fd581f196b98](https://github.com/user-attachments/assets/5bba15c4-edbb-4577-abfe-fd581f196b98)

---

### Checks

* [ ] Adding quotes?

* [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
* [ ] Adding a language or a theme?

* [ ] If it’s a language, did you edit `_list.json`, `_groups.json`, and
add `languages.json`?
  * [ ] If it’s a theme, did you add the theme.css?

* Also please add a screenshot of the theme, it would be extra awesome
if you do so!
* [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
* [x] Make sure the PR title follows the Conventional Commits standard.
([https://www.conventionalcommits.org/](https://www.conventionalcommits.org)
for more info)
* [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.

---

---------

Co-authored-by: Miodec <jack@monkeytype.com>
Co-authored-by: Nginearing <142851004+Nginearing@users.noreply.github.com>
Co-authored-by: Pavel Ivashkov <paiv@users.noreply.github.com>
Co-authored-by: Christian Fehmer <fehmer@users.noreply.github.com>
Co-authored-by: siilyg <149881151+siily-g@users.noreply.github.com>
Co-authored-by: Omar Abdelrahman Abbas <tryomarabbas@gmail.com>
2025-05-29 13:15:44 +02:00
Seif Soliman
2d878b8700
fix(commandline): improve caching to fix stale checkmark and UI state (@byseif21, @fehmer) (#6586)
### Description

Previously, when selecting a language via the text button on the test
page, the checkmark (fa-check) in the commandline language list wouldn't
update until a page refresh. This was due to the commandline's caching
mechanism not detecting changes triggered outside its own control.

Although it first appeared to be a language-specific issue, it was later
identified that the caching logic was generally insufficient — it didn’t
account for updates to the active command state or configuration flags
like usingSingleList.

## Solution
Fixed the caching logic in the commandline module by tracking a more
complete internal state. The system now correctly detects changes in the
command list, active state, and configuration, and rebuilds the list UI
when necessary.

## Technical Details
- The commandline uses a caching mechanism (`lastList`) to avoid
rebuilding the HTML if the list hasn't changed done in #6559
- Replaced the old lastList cache with a new lastState object that
stores: the list of commands, each with its isActive flag, the
usingSingleList configuration flag
- Improved the cache comparison logic, uses areSortedArraysEqual to
compare command lists including active state ,compares the
usingSingleList flag
- Previously, this cache wasn't being cleared when the language changed
through the text button
- Now we clear the cache on changes, forcing a rebuild of the list with
the correct checkmark

## Performance Impact
- Minimal performance impact
- The list is only rebuilt when:
  1. The language actually changes
  2. The list content changes
  3. The input value changes
- The caching mechanism still prevents unnecessary rebuilds in all other
cases

## Testing
- [x] Language selection through text button updates checkmark
immediately
- [x] Language selection through commandline works as before
- [x] No unnecessary rebuilds when language hasn't changed
- [x] Checkmark appears next to correct language in all cases
2025-05-27 17:37:43 +02:00
Miodec
5695245c86 chore: release v25.22.0 2025-05-27 17:17:48 +02:00
Christian Fehmer
3b0cf16faf
perf: use cache in local-storage-with-schema (@fehmer) (#6596) 2025-05-27 17:12:05 +02:00
Seif Soliman
b26e1d2dba
chore: correct text in difficulty settings descriptions (@byseif21) (#6590)
### Description

The is minor but I think it should be "typing test" not "type test"
2025-05-27 17:00:46 +02:00
Christian Fehmer
d6ae7cf7c4
fix: compatability check header shown if client is using cached responses (@fehmer) (#6602)
If frontend and backend are deployed with a new COMPATABILITY_CHECK
header frontend might show the backend version is lower because of the
http header of a cached response.

Adding the COMPATABILITY_CHECK version as part of the etag fixes this.
2025-05-27 16:59:49 +02:00
Christian Fehmer
093a17b15a
chore: remove log (@fehmer) (#6601)
oops
2025-05-27 16:32:22 +02:00
Christian Fehmer
47de0c8a40
refactor: cleanup schema and types for CustomText (@fehmer) (#6605) 2025-05-27 16:30:49 +02:00
Christian Fehmer
1cada77ea8
fix: sanitize result filters before storing in LS (@fehmer) (#6583) 2025-05-26 16:06:17 +02:00
Christian Fehmer
19930a9079
docs: update PR template (@fehmer) (#6600) 2025-05-26 16:05:09 +02:00
Omar Abdelrahman Abbas
07c581f5b3
feat(profile): add Open Graph meta tags for social sharing (@TryOmar) (#6598)
Add Open Graph meta tags to user profile pages to improve how they
appear when shared on social media platforms. This includes title,
description and URL meta tags.

Closes #6597

### Description

This PR adds Open Graph Protocol (OGP) meta tags to user profile pages
to fix the issue with LinkedIn and other social media platforms
incorrectly redirecting profile links to the homepage. The
implementation:

- Adds dynamic Open Graph meta tags for title, description and URL
- Updates tags whenever a profile page is loaded
- Uses the user's name in the title tag for better personalization

### Checks

- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.

<!-- label(optional scope): pull request title (@your_github_username)
-->

Closes #6597

<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->

<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->
2025-05-26 16:04:43 +02:00
siilyg
1826948886
feat(layout): add Tarmak layouts (@siily-g) (#6574)
### Description

The tarmak layout(s) is a set of transition layouts for qwerty user
switching to colemak, it changes only about 3-4 keys for every stage.

[More about tarmak](https://dreymar.colemak.org/tarmak-intro.html)

### Checks

- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language?
- Make sure to follow the [languages
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md)
  - [ ] Add language to `packages/contracts/src/schemas/languages.ts`
- [ ] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [ ] Add language json file to `frontend/static/languages` 
- [ ] Adding a theme?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md)
  - [ ] Add theme to `packages/contracts/src/schemas/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes` 
- [x] Adding a layout?
- [x] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [x] Add layout to `packages/contracts/src/schemas/layouts.ts`
  - [x] Add layout json file to `frontend/static/layouts` 
  
- [x] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [x] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
2025-05-26 16:03:25 +02:00
Christian Fehmer
4fe11aceee
fix(theme): dark note and reduced-motion not replacing letters with circles (@fehmer) (#6589) 2025-05-26 16:02:15 +02:00
Christian Fehmer
a9fb72de7c
perf(test): optimize test-timer checkIfTimeIsUp (@fehmer) (#6588)
During e.g. time 60 tests the CustomText.getLimitValue was called each
second which is not needed.

Refactor the checkIfTimeIsUp to only use the correct limit, either
Config.time if mode is time or CustomText.getLimitValue if mode is
custom and limited by time.
2025-05-26 16:01:44 +02:00
Pavel Ivashkov
ea144996f3
fix(language): update Ukrainian Latin to national standard (@paiv) (#6584)
### Description

In short, this PR is based on Ukraine's national standard [DSTU
9112:2021 (A)](https://en.wikipedia.org/wiki/DSTU_9112:2021), and
replaces non-standard transliteration originally submitted.

- Updates #3855

### Context

Unfortunately, this topic has been a bit toxic in Ukraine, I am sorry to
bring this on the developers of this popular tool. I am trying to stay
neutral [¹](https://paiv.github.io/blog/2024/11/26/ukrainian-latin.html
"The state of Ukrainian Latin"), with Ukraine's ultimate benefits in
mind.

At the moment, there is no definite Ukrainian Latin script. The state
standard (KMU 55) is a lossy transliteration, not useable for general
writing, only applied to personal names and places.

Practitioners of Latin script for the Ukrainian language is still only a
marginal group, without a unifying movement. Until 2021 basically
everyone had their own transliteration method, derived from two dozen
historical schemes.

In 2021 comes Ukraine's national standard DSTU 9112:2021, and
objectively is good enough for general writing among alternatives. It
does not prescribe transition from Cyrillic. Its future is in
integration with European languages, gradually replacing legacy KMU 55.

Thus my argument for the practitioners of Ukrainian Latin script is to
adopt DSTU standard, given its perspective and unifying power, and phase
out non-standard schemes, of which #3855 is only one.

I hope @tymof1j as the original contributor could critically review
these notes, with the two year perspective.

The script used for conversion from Cyrillic:
https://gist.github.com/paiv/df2f38ed86a103471a49cfa8064d0d2e

----
To reiterate, Ukrainian Latin script is not established, and people are
coming here to not only train keyboard but also to get used to the
concept of Ukrainian Latin. Hosting one of dozens unofficial
alternatives of Ukrainian Latin without giving wider context is not
appropriate. People should start with Ukraine's national standard, then
learn of alternatives, if interested.

The problem of the national standard is that it is young, and has little
adoption and tooling. Those will come in time. I have posted examples of
possible keyboard setups here: https://paiv.github.io/latynka-keyboard/

I used system A of the national standard, with diacritics. An
alternative would be to use system B, which only needs basic Latin. It
is more verbose, but is more accessible to type. I believe system A is
preferable for general text.

If this is too much for this project, I would rather remove Ukrainian
Latin than host one non-standard variant, until it is established in
Ukraine. But it is nice to keep this platform to teach the concept of
Ukrainian Latin script.
2025-05-26 15:57:13 +02:00
Seif Soliman
16eda17eb6
fix(language): incorrect and non-standard words in kazakh_1K wordlist (@byseif21) (#6570)
### Description

update & review kazakh_1K language wordlist based on feedback from
[#6569](https://github.com/monkeytypegame/monkeytype/discussions/6569)
about several issues in the list
2025-05-26 15:45:32 +02:00
Nginearing
e28aa97285
feat(language): add viossa (@nginearing) (#6571)
### Description

This adds Viosssa as a language to Monkeytype. 
Viossa is a constructed language and has even been added to Minecraft
Java Edition, and has also been assigned an ISO-639-3 Code by the
ConLang Code Registry (https://www.kreativekorp.com/clcr/)

### Checks

- [X] Adding a language
  - [X] Added language to `packages/contracts/src/schemas/languages.ts`
- [X] Added language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [X] Added language json file to `frontend/static/languages` 
  
- [X] Checked if there are any open issues are related to this PR.
- [X] PR title follows Conventional Commits standard.
- [X] Included GitHub username prefixed with @ inside parentheses at the
end of the PR title.
2025-05-26 15:44:57 +02:00
Miodec
8f6e961b2d chore: remove anniversary elements 2025-05-22 14:05:25 +02:00
Miodec
fc2d85a9e5 chore: disable rule 2025-05-17 13:32:26 +02:00
Miodec
53bf826f08 chore: ls with schema debug logs 2025-05-17 13:30:41 +02:00
Jack
ea90e0a99e
refactor: dont allow nullable numbers (@miodec) (#6564)
Enables strict boolean expressions rule for nullable numbers
2025-05-16 16:04:19 +02:00
Miodec
cde852cf2a chore: merch banner, anniversary 2025-05-16 13:41:08 +02:00
Christian Fehmer
d3fa7c9be2
fix(commandline): cannot use mouse to select first element (@fehmer) (#6563) 2025-05-15 13:32:42 +02:00
Miodec
485eb222dd impr(account graph): round accuracy to nearest multiple of 5 instead of 10 for those accuracy freaks 2025-05-15 00:27:12 +02:00
Christian Fehmer
bfb06a22ed
impr(config): handle invalid config values (@fehmer) (#6555) 2025-05-13 16:43:45 +02:00
Seif Soliman
b34c179114
fix: smooth transition for theme palette icon in chaos_theory theme (@byseif21) (#6560)
### Description

fix the transition animation for the theme palette icon in the
chaos_theory theme.

hovering over the current theme button would trigger a smooth 180° flip
of the palette icon. However, when quickly moving the cursor away, the
icon would abruptly snap back to its original position instead of
transitioning smoothly.
### Before: 


https://github.com/user-attachments/assets/55b6683a-c83b-4f93-806b-bf289bf30c5f

-------------


### Now:



https://github.com/user-attachments/assets/59d08d45-ba2d-4921-9cc4-ee84455a0571
2025-05-13 16:42:55 +02:00
Jack
90b3d7362c
chore: update privacy policy to mention sentry (@miodec) (#6558)
Also refactors cookie modal and cokie local storage a little bit.

closes #6557
2025-05-13 16:41:48 +02:00
Christian Fehmer
98f1273398
impr(commandline): improve performance (@fehmer) (#6559)
!nuf
2025-05-13 16:41:16 +02:00
Joel Tony
e42e90b873
impr(quotes): add english quotes (@jay-tau) (#6515)
### Description

<!-- Please describe the change(s) made in your PR -->

### Checks

- [x] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [ ] Adding a language or a theme?
- [ ] If is a language, did you edit `_list.json`, `_groups.json` and
add `languages.json`?
  - [ ] If is a theme, did you add the theme.css?
- Also please add a screenshot of the theme, it would be extra awesome
if you do so!
- [ ] Check if any open issues are related to this PR; if so, be sure to
tag them below.
- [ ] Make sure the PR title follows the Conventional Commits standard.
(https://www.conventionalcommits.org for more info)
- [ ] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.

<!-- label(optional scope): pull request title (@your_github_username)
-->

<!-- I know I know they seem boring but please do them, they help us and
you will find out it also helps you.-->

Closes #

<!-- the issue(s) your PR resolves if any (delete if that is not the
case) -->
<!-- please also reference any issues and or PRs related to your pull
request -->
<!-- Also remove it if you are not following any issues. -->

<!-- pro tip: you can mention an issue, PR, or discussion on GitHub by
referencing its hash number e.g:
[#1234](https://github.com/monkeytypegame/monkeytype/pull/1234) -->

<!-- pro tip: you can press . (dot or period) in the code tab of any
GitHub repo to get access to GitHub's VS Code web editor Enjoy! :) -->

---------

Co-authored-by: Lavanya Ananthan <lavanya.ananthan.763@gmail.com>
2025-05-12 16:52:42 +02:00
Christian Fehmer
d47272b636
chore: add eslint compat plugin (@fehmer) (#6542) 2025-05-12 16:52:01 +02:00
Nad Alaba
3aaf2f65d6
fix(wordsInput): adjust #wordsInput position to be on the active word for chinese (@NadAlaba) (#6545)
fix part of #6447
2025-05-12 14:11:46 +02:00
Seif Soliman
b402c3a1a7
fix: remove some misspellings in english_450k (@byseif21) (#6546)
### Description

<!-- Please describe the change(s) made in your PR -->

Remove & correct  some common misspelled words, mainly in english_450k
2025-05-12 14:08:53 +02:00
Christian Fehmer
48ed096ac1
impr(settings): prevent customLayoutFluid and customPolyglot to be empty (@fehmer) (#6548)
Prevent user from deselecting all layouts/languages in customLayoutfluid
and customPolyglot selects.

Fixes FRONTEND-MW and FRONTEND-MS
2025-05-12 14:03:58 +02:00
Christian Fehmer
f1f4d17932
impr(profile): validate inputs for twitter, github and website (@fehmer) (#6544)
fixes #6543
2025-05-12 14:02:28 +02:00
Miodec
8370de1fa4 impr: add function to clearstreakhouroffset
!nuf
2025-05-12 13:52:37 +02:00