Commit graph

5104 commits

Author SHA1 Message Date
Leonabcd123
13b75f46bf
feat(test): add indicate typos both (@Leonabcd123) (#7072)
### Description

Added a "both" option to indicate typos that keeps the replace
functionality, and makes the below functionality show the correct
instead of the incorrect letters. We just check whether the mode is
`both` when deciding whether to pass `input` to `createHintsHtml` or to
pass `currentWord`. All functionality of replace and below is kept by
just adding or operators to check whether indicateTypos is `both` OR
replace/below.

Implementing #7024

---------

Co-authored-by: Jack <jack@monkeytype.com>
2025-11-15 10:46:31 +01:00
Christian Fehmer
e1e1bfb306
fix(test): don't ignore caps lock in layout emulator (@fehmer) (#7107)
With layout emulation set to qwerty and caps-lock enabled keypresses are
registered as lowercase.
2025-11-14 13:41:07 +01:00
Christian Fehmer
0e4b9c4687
impr: handle backend unavailable in remote validations (@fehmer) (#7105) 2025-11-13 17:12:37 +01:00
Christian Fehmer
05afcc51f9
impr(leaderboard): fix icons on friend xp leaderboards (@fehmer) (#7106) 2025-11-13 15:40:10 +01:00
Sameer Singh
bb6e0d9824
feat(theme): add Vesper Light (@SameerJS6) (#7040)
### Description

Adds Vesper Light and Oscura themes. Oscura by
[Fey](https://github.com/narative/oscura).

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

### 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/schemas/src/languages.ts`
- [ ] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [ ] Add language json file to `frontend/static/languages` 
- [x] Adding a theme?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/THEMES.md)
  - [x] Add theme to `packages/schemas/src/themes.ts`
  - [x] Add theme to `frontend/src/ts/constants/themes.ts`
  - [x] Add theme css file to `frontend/static/themes`
- [x] Add some screenshot of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/schemas/src/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- [ ] Adding a font?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
  - [ ] Add font file  to `frontend/static/webfonts`
  - [ ] Add font to `packages/schemas/src/fonts.ts`
  - [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [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.-->

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! :) -->


## Preview

### Vesper Light

#### Home Route
<img width="1920" height="1440" alt="vesper-light"
src="https://github.com/user-attachments/assets/f2f43ecf-ee63-4797-a8e0-781c6879551f"
/>

#### Settings Route
<img width="1200" height="676" alt="80_1x_shots_so"
src="https://github.com/user-attachments/assets/e595faa9-9731-4aef-bc0e-95f882391289"
/>

#### Result Route
<img width="1200" height="676" alt="908_1x_shots_so"
src="https://github.com/user-attachments/assets/b86a7bae-dacf-4eba-b987-0620ee533d33"
/>

### Oscura

#### Home Route
<img width="1920" height="1440" alt="789_1x_shots_so"
src="https://github.com/user-attachments/assets/80c3f950-ef60-4ef1-aa35-9cc1c436b426"
/>

#### Settings Route
<img width="1920" height="1440" alt="194_1x_shots_so"
src="https://github.com/user-attachments/assets/08bf81d9-6a6f-4edc-89f2-ed9106a465b0"
/>

#### Result Route
<img width="1920" height="1440" alt="95_1x_shots_so"
src="https://github.com/user-attachments/assets/0d1ee6a5-78e6-4c66-a5e0-b2ab422ffe4e"
/>

### Toasts Theme For Vesper Light & Oscura
<img width="1920" height="1440" alt="585_1x_shots_so"
src="https://github.com/user-attachments/assets/b658811d-3303-4079-9e30-57d465093d04"
/>
2025-11-13 15:34:51 +01:00
Christian Fehmer
81f09b9b90
build: extract vite plugins (@fehmer) (#7103) 2025-11-12 16:54:56 +01:00
Christian Fehmer
8ee7e94d46
fix(leaderboards): show correct rank in friends weekly leaderboard (@fehmer) (#7104) 2025-11-12 15:33:32 +01:00
Christian Fehmer
d74051e878
feat(leaderboard): add friends filter to daily/weekly leaderboard (@fehmer) (#7084) 2025-11-12 14:41:22 +01:00
Christian Fehmer
6adfcb092d
refactor: use virtual module for env-config (@fehmer) (#7095) 2025-11-12 14:23:03 +01:00
Tekkermester
556208efa2
impr(quotes): add Hungarian quotes (@Tekkermester) (#7071)
### Description
I created hungarian.json and added 51 quotes.

#### Translations
Here are translations (some of them are sounds weird in english, but of
course it makes sense in hungraian):

id_1: Above a certain level, we do not sink below a certain level.
id_2: The one who can make you happy can also make you miserable. You
may hate someone because you could love them. Certainty kills, but you
survive. Doubt gives life, but it kills you. We leave the real one for
the others, and the others for the real one.
id_3: I don’t know why, or how long I’ll still belong to you, but I will
hold your hand and guard your eyes.
id_4: Whoever opens a book first opens themselves. One does not
encounter the writer’s pain or hope, nor that of their created
characters, but their own.
id_5: Never apologize for following your dreams! But you may ask
yourself whether this truly is your dream.
id_6: I live in the moment. Soon, perhaps tomorrow, I will forget that I
stood here and gave this speech. But the fact that I might forget
tomorrow does not mean I did not live every moment of today. I will
forget today, but that doesn’t mean today doesn’t matter.
id_7: As a kid, I learned web design by copying cool websites. I looked
at the page source, copied the code, changed a few things, added my name
— and there, it was mine. View source. What if that worked on people
too? Would we dare to look?
id_8: In the modern age, important information rarely reaches
decision-makers because of countless filters — that’s why the world is
the way it is.
id_9: In life, there’s always something worth a smile.
id_10: Life isn’t about waiting for the storm to pass, but about
learning to dance in the rain.
id_11: You’re braver than you believe, stronger than you seem, and
smarter than you think.
id_12: A child alone with a book, somewhere deep in the secret rooms of
the soul, creates images that surpass everything else. People need these
images. On the day children’s imagination can no longer create them,
humanity becomes poor. Everything great that ever happened in the world
happened first in someone’s imagination, and what tomorrow’s world will
look like depends largely on the power of imagination of those who are
learning to read now. That is why children need books.
id_13: Only blood and language can truly hold people together, along
with the memory of a shared past. If this disappears, the world falls
apart.
id_14: Thinking is the hardest work there is — that’s why so few engage
in it.
id_15: Compare yourself to someone better, and you’ll be dissatisfied.
Compare yourself to someone worse, and you’ll already have more than
enough.
id_16: It is vital that a person occasionally do something that is not
vital.
id_17: Anyone who has played football or is a true fan knows that the
game belongs to the winners. It’s foreign to the spirit of the game to
say “Let’s play beautifully and lose rather than play badly and win.”
No. You have to win. And if you win, it can’t always be through bad
play.
id_18: Nothing reveals a person’s character more clearly than the way
they play.
id_19: The one who has lost everything knows best what is truly
necessary.
id_20: Everything must be done in its proper time — it’s cowardly to be
wise only afterward.
id_21: True respect must be earned. It cannot be inherited or bought.
Nor can it be forced.
id_22: A man was driving down the road when he saw a snake lying
motionless in the middle. He stopped and saw it was wounded. So he took
it home, nursed it, and healed it. When the snake recovered, he opened
the door to let it go. As it slithered out, it bit him on the leg.
Before the poison killed him, he said, “I took you in, fed you, healed
you, and this is how you repay me?” The snake paused and replied, “All
that’s true. But you always knew I was a snake.”
id_23: It’s better to try and fail than to give up without trying.
id_24: The tiny spider grandpa and the fragile-bellied spider grandma
spun a sticky, melting web from spit onto the dirty bakery ceiling —
period.
id_25: If you want to know how someone thinks, listen to how they speak.
id_26: After all, we are all here on Earth to laugh. The day we don’t
laugh is a lost day. And laughter is the only sedative without side
effects. Laughter doesn’t kill — after all, we’re still alive. As the
Chinese say: whether rich or poor, be content with your fate, for only a
fool does not laugh at his circumstances.
id_27: People have been wise in many different ways, but they all
laughed the same way.
id_28: Home allows for many comforts, but even before family members,
one should not go beyond measure.
id_29: Those who have never been unhappy cannot truly appreciate
happiness.
id_30: When you run long distances, it’s not hard — in fact, it’s
sometimes necessary — to turn off your mind.
id_31: That’s why being on the road is magical — sometimes you even
forget where you’re going.
id_32: The moment you accept the troubles given to you, all doors open.
id_33: Then suddenly, there’s a terrible crack... then another. It’s as
if the joints holding the ship together have burst; one side of the deck
lifts while the other nearly sinks into the sea.
id_34: A nation is not united by physical resemblance, but by shared
history, common struggles, and the air of a shared homeland, which also
separates it from others with a different past and present. A true
Hungarian is one whose mind and speech turn in Hungarian. There is no
honest alternative test to determine who is truly Hungarian. It’s not an
easy test. It’s much harder than what those who study physical traits
propose — for here, one must expose the soul.
id_35: Albert Szent-Györgyi was born in Budapest in 1893 and is one of
the most famous Hungarian inventors. A biochemist and physician, he
received the Nobel Prize in 1937 for discovering vitamin C and
researching biological combustion processes.
id_36: There is hardly an adult Hungarian who hasn’t heard of him. In
poetry, he’s like chocolate among favorite ice cream flavors —
timelessly popular. Sándor Petőfi was born in 1823 in Kiskőrös. A poet
and revolutionary, he became one of the greatest figures of Hungarian
romantic poetry.
id_37: When you point one finger at someone, four others point back at
you.
id_38: A lie has already traveled halfway around the world before the
truth has even put on its pants.
id_39: Only when man cuts down the last tree, poisons the last river,
and catches the last fish will he realize that money cannot be eaten.
id_40: Life is a great gift, and I don’t intend to waste it. You never
know who deals the next hand. One must learn to accept their fate. Every
single day matters.
id_41: The words of a child, no matter how sincere, are not heard by
those who have forgotten how to listen.
id_42: If you hear a voice within you say, “You can’t paint,” then by
all means paint — and that voice will be silenced.
id_43: Creativity is just connecting things. When you ask creative
people how they did something, they feel a little guilty, because they
didn’t really do it — they just saw something. Over time, it becomes
natural to them.
id_44: Learn from yesterday, live for today, hope for tomorrow. The
important thing is never to stop questioning.
id_45: It is not the strongest species that survives, nor the most
intelligent, but the one that adapts best to change.
id_46: Everyone wants to be famous, but no one wants to work for it. I
live by this. Work hard so you can play hard. At the end of the day,
give everything you’ve got, and it will pay off — maybe in a year, maybe
in thirty. In the end, hard work always pays off.
id_47: The past can hurt, but according to my philosophy, you can either
run from it or learn from it.
id_48: Perhaps the greatest risk you can ever take is letting people see
you as you truly are.
id_49: The things that make me different are the things that make me who
I am!
id_50: At the foot of the Mátra, on the edge of a village, lives my
kind, hardworking old aunt — from her I know this story. A little fawn,
clumsy and shy, wandered onto the road and tripped over a fallen tree,
breaking its leg. The poor thing cried sadly, and along came the old
lady, who took pity on it, lifted it in her arms, and carried it home to
her little house.
id_51: A person is never at home where they are. One always thinks they
would be at home where they long to be.

### Checks

- [x] Adding quotes?
- [x] 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/schemas/src/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/schemas/src/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes`
- [ ] Add some screenshot of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/schemas/src/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- [ ] Adding a font?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
  - [ ] Add font file  to `frontend/static/webfonts`
  - [ ] Add font to `packages/schemas/src/fonts.ts`
  - [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [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.-->

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: Miodec <13181393+Miodec@users.noreply.github.com>
2025-11-12 12:54:40 +01:00
notfpt
d502f67aa7
impr(quotes): add English quotes (@notfpt) (#7098)
### Description

Just some quotes I wanted to share from my favorite songs.

### Checks

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

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-11-12 12:53:14 +01:00
Ion Pascari
b1b57dcc95
impr(quotes): add more code_java quotes (@theFaustus) (#7100)
### Description

This PR introduces a curated set of Java quotes that combine typing
practice with real programming content.
The snippets include examples from common algorithms, OOP patterns,
functional and concurrent programming, and recent Java features like
records, sealed classes, and switch expressions.

Goal: help users improve typing speed and accuracy while reinforcing
Java syntax and idioms in a practical way.

### Checks

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

---------

Co-authored-by: Ion Pascari <ion.pascari@cegeka.com>
2025-11-12 12:43:37 +01:00
adam
f44e491c5d
chore(language): update code_jule (@adamperkowski) (#7097)
### Description

there's been some changes to Jule since it's been added here rso this PR
updates everything to the latest version

### 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-11-12 12:43:02 +01:00
Christian Fehmer
8db1140040
chore: update vitest to 4.0.8 (@fehmer) (#7096) 2025-11-12 12:42:30 +01:00
mak448a
013f710e13
fix(quote): fix run-on sentence in quote 5580 (@mak448a) (#7092) 2025-11-12 12:35:03 +01:00
Adam Al Shouli
027e572617
fix: ae/oe chars being registered as two mistakes when mistyped (@thedev0ps) (#7090)
### Description

Remove the ae/oe character check which makes it register as seperate
characters of the next character is not ae/oe, causing two mistakes
instead of one.

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

### 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/schemas/src/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/schemas/src/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes`
- [ ] Add some screenshot of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/schemas/src/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- [ ] Adding a font?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
  - [ ] Add font file  to `frontend/static/webfonts`
  - [ ] Add font to `packages/schemas/src/fonts.ts`
  - [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [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.-->

Closes #6482 

<!-- 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-11-12 12:34:43 +01:00
dotleon
05e1b828ae
impr(languages): fixed the default hungarian word list, and also added hungarian_1k list (@dotleon) (#7087)
### Description

Fixed the default hungarian word list (it had less than 200 words and
the words were really weird and rare ones).

Added hungarian 1k. 

The word list is from here:
https://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/Hungarian_webcorpus_frequency_list
, but I removed some words that did not make sense for type test, like
"kft." and "-e" and also removed names

### Checks

- [ ] Adding quotes?
- [ ] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
- [X] Adding a language?
- Make sure to follow the [languages
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LANGUAGES.md)
  - [X] Add language to `packages/schemas/src/languages.ts`
- [X] Add language to exactly one group in
`frontend/src/ts/constants/languages.ts`
  - [X] 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/schemas/src/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes`
- [ ] Add some screenshot of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/schemas/src/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- [ ] Adding a font?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
  - [ ] Add font file  to `frontend/static/webfonts`
  - [ ] Add font to `packages/schemas/src/fonts.ts`
  - [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [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.-->

Closes #
2025-11-12 12:33:46 +01:00
Gabriel
318da6e61d
impr(quotes): added code_bash quotes (@thesomewhatyou) (#7076)
### Description

Added some basic code_bash quotes.

### Checks

- [x] Adding quotes?
- [N/A] Make sure to include translations for the quotes in the
description (or another comment) so we can verify their content.
 
That's pretty much it to be fair.
2025-11-12 12:32:45 +01:00
Christian Fehmer
946f41835f
impr: randomize themes based on system theme (@fehmer) (#7075)
closes #7069
2025-11-12 12:31:50 +01:00
Aman Pal
c76f8dc664
fix: add input validation for new filter preset modal (@amandevelops) (#7073)
### Description

Added input validation for `New filter preset` modal in frontend and
display appropriate indicators in realtime

#### Updated UI
<img width="610" height="333" alt="Screenshot From 2025-11-03 02-08-40"
src="https://github.com/user-attachments/assets/0f0f3628-5e61-4de9-8100-d96475f8bf08"
/>

<img width="610" height="333" alt="Screenshot From 2025-11-03 02-08-26"
src="https://github.com/user-attachments/assets/df0fd478-7d54-4a99-b7ed-198f1f9ebae6"
/>


### 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/schemas/src/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/schemas/src/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes`
- [ ] Add some screenshot of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/schemas/src/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- [ ] Adding a font?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
  - [ ] Add font file  to `frontend/static/webfonts`
  - [ ] Add font to `packages/schemas/src/fonts.ts`
  - [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [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.-->

Closes #7063

<!-- 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-11-12 12:30:04 +01:00
Pratham Tandale
12e3d65f96
impr(quotes): add English quotes from The Time Traveler's Wife: Novel by Audrey Niffenegger (@prathampt) (#7048)
### Description

Added four English quotes from The Time Traveler's Wife: Novel by Audrey
Niffenegger

### Checks

- [x] Adding quotes?
  No translation added for the English language quote.
- [x] Make sure to include your GitHub username prefixed with @ inside
parentheses at the end of the PR title.
- [x] Do not include content that contains any libelous or otherwise
unlawful, abusive, or obscene text.
- [x] Ensure that your contribution meets JSON standards (no trailing
comma at the end of a list)
- [x] Verify quotes added aren't duplicates of any already present
- [x] Verify the length property is correct (length of the text in
characters)
- [x] Verify the id property is incremented correctly
- [x] Please do not add extremely short quotes (less than 60 characters)
- [x] Remember to name your pull request properly. For example, if you
are adding new quotes for the language French, your pull request should
be named impr(quotes): add French quotes.
2025-11-12 12:11:50 +01:00
connermcnicholas
9cb19e3ea9
feat(theme): added pale_nimbus (@conner-mcnicholas) (#7055)
# Description

Created a new theme "pale_nimbus" per instructions.

## Screenshots
 
####  ------Normal Test------
<img width="1244" height="1170" alt="test"
src="https://github.com/user-attachments/assets/9b74bf69-6202-4dde-b011-fa8cea48168a"
/>

####  ------Flipped Test------
<img width="1242" height="1172" alt="flip"
src="https://github.com/user-attachments/assets/589ee12a-ce34-4688-beb3-9f43fe147450"
/>

####  ------Colorful Test------
<img width="1244" height="1170" alt="colorful"
src="https://github.com/user-attachments/assets/7079fc55-461d-4355-a9c8-eeede747f4f8"
/>

####  ------Flipped and Colorful Test------
<img width="1240" height="1166" alt="flip_colorful"
src="https://github.com/user-attachments/assets/30ac5c08-b2cb-4481-99ff-65f6dc4ab77f"
/>

####  ------Settings------
<img width="1238" height="1170" alt="menu"
src="https://github.com/user-attachments/assets/d7818bf0-02af-4433-b6ba-487a426dace1"
/>

####  ------Stats------
<img width="928" height="1156" alt="stats"
src="https://github.com/user-attachments/assets/cef260af-858b-45b3-837b-121c538d450c"
/>
2025-11-12 12:11:00 +01:00
Miodec
8aa1f51c2c fix: wpm sometimes goes negative in zen mode
kind of a band aid fix but its ok

closes #7099
2025-11-12 11:52:38 +01:00
Miodec
33880b3842 chore: fix typo 2025-11-10 14:02:41 +01:00
Miodec
a3765b9b52 fix: partially correct last words counting towards final wpm in non timed modes 2025-11-09 09:54:29 +01:00
Miodec
df06b62636 refactor: rework keypress tracking
removes the need for a setTimeout which causes issues during lag
2025-11-09 09:41:34 +01:00
Miodec
52b7d963b9 chore: disable sentry replays for now 2025-11-07 16:12:52 +01:00
Christian Fehmer
70dfd2aa6c
chore: language integrity check (@fehmer) (#7074)
Co-authored-by: Miodec <jack@monkeytype.com>
2025-11-07 16:12:35 +01:00
Miodec
bf37029f6c fix: 404 page not working 2025-11-06 20:11:22 +01:00
Adam Al Shouli
feb91bdb61
style: add space between connected sentences in security policy (@thedev0ps) (#7078)
### Description

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

### 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/schemas/src/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/schemas/src/themes.ts`
  - [ ] Add theme to `frontend/src/ts/constants/themes.ts`
  - [ ] Add theme css file to `frontend/static/themes`
- [ ] Add some screenshot of the theme, especially with different test
settings (colorful, flip colors) to your pull request
- [ ] Adding a layout?
- [ ] Make sure to follow the [layouts
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/LAYOUTS.md)
  - [ ] Add layout to `packages/schemas/src/layouts.ts`
  - [ ] Add layout json file to `frontend/static/layouts` 
- [ ] Adding a font?
- Make sure to follow the [themes
documentation](https://github.com/monkeytypegame/monkeytype/blob/master/docs/FONTS.md)
  - [ ] Add font file  to `frontend/static/webfonts`
  - [ ] Add font to `packages/schemas/src/fonts.ts`
  - [ ] Add font to `frontend/src/ts/constants/fonts.ts`
- [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.-->

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! :) -->
2025-11-06 14:26:41 +01:00
Christian Fehmer
35be4bdfd5
impr(leaderboard): fix icons on friend leaderboards (@fehmer) (#7086) 2025-11-06 13:30:19 +01:00
Miodec
2f5cb164cb fix: xp leaderboards missing first column 2025-10-31 19:12:25 +01:00
Christian Fehmer
9d64a57daf
feat(leaderboard): add friends filter to all-time leaderboard (@fehmer) (#7061) 2025-10-31 18:57:42 +01:00
Miodec
e930d0c3f3 fix: unable to delete a preset in some cases
closes #7068
closes #7064
2025-10-31 18:17:35 +01:00
Rajyavardhan Singh
ffd55c532c
feat: add custom character generator to custom text modal (@imrajyavardhan12) (#7037)
- Add new "custom generator" button to custom text modal
- Create generator modal with character input and presets
- Support min/max word length and word count configuration
- Include presets for alphas, numbers, symbols, bigrams, trigrams
- Add code-specific patterns for programming practice

Closes #6941

### Description

Adds a custom character generator to the custom text modal, allowing
users to generate random "words" from a custom set of characters or
strings. Useful for practicing specific character combinations,
especially for programmers who want to improve typing speed with symbols
and patterns commonly used in code.

### Testing

1. Open custom text modal
2. Click "custom generator"
3. Try presets or enter custom characters
4. Adjust word length and count
5. Click "Set" or "Add"

---------

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Miodec <jack@monkeytype.com>
2025-10-31 15:57:03 +01:00
Miodec
c0191da004 chore: bump node version 2025-10-31 14:18:59 +01:00
Miodec
586a19ad3e chore: upgrade oxlint 2025-10-31 14:18:59 +01:00
Christian Fehmer
08165adc2c
impr(friends): remember sorting of friends list (@fehmer) (#7062)
Store sorting of the friends list in local storage and apply on load
2025-10-31 13:36:40 +01:00
Christian Fehmer
b5755faa30
ci: fix generate version plugin hiding previous errors (@fehmer) (#7060)
When build fails for some reason the generate version step also failed
because the `/dist` directory is missing. This was hiding other problems
like an error in the fontawesome step.

Also changes the trigger for the frontend build to include `html` files.
2025-10-29 11:56:49 +01:00
Christian Fehmer
78b0eb25ab
refactor(accounts): use sortedTable for history (@fehmer) (#6747)
replace sortable table on accounts page with `SortedTable`
2025-10-29 11:56:35 +01:00
Christian Fehmer
1cf316a772
impr(friends): validate username on add friend (@fehmer) (#7059)
fixes #7058
2025-10-28 17:33:19 +01:00
Christian Fehmer
caae0d404e
fix(friends): not able to sort by 'friends for' column (@fehmer) (#7057) 2025-10-28 17:32:54 +01:00
Christian Fehmer
d885e70232
feat: add friend requests and list (@fehmer) (#6658)
make some friends on monkeytype

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-10-28 12:36:16 +01:00
Miodec
9aa30a2a41 refactor: rework html/css of custom theme edit section 2025-10-28 09:38:06 +01:00
Miodec
d77169ae2b impr: apply reduced motion to live stats 2025-10-27 17:42:00 +01:00
Miodec
7f8e205723 fix: config glob pattern, string replace
!nuf
2025-10-27 17:36:45 +01:00
Jack
7e6a73aac2
chore: upgrade to vite 7 (@miodec) (#7051) 2025-10-27 17:17:21 +01:00
Christian Fehmer
cd8ebd1430
chore: update nodejs to 24.10.0 (@fehmer) (#7035) 2025-10-27 13:38:37 +01:00
Flatbread231
b85f13553a
impr(quotes): add English quotes (@Flatbread231) (#7031)
Fixed a typo in one quote and added others.

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-10-27 13:06:47 +01:00
Christian Fehmer
6902b407e7
fix: run without firebase-config (@fehmer) (#7030)
Co-authored-by: Miodec <jack@monkeytype.com>
2025-10-27 13:01:29 +01:00