- **build: replace dotenv with vite env variables (@fehmer)**
- **build: combine vite config into a single file (@fehmer)**
---------
Co-authored-by: Miodec <jack@monkeytype.com>
Together with #7119, input handling is 3x faster. Achieved by:
- deferring all UI updates to when the browser is ready and debouncing
ui calls.
- using vanilla js where needed
- caching dom elements
- disabling expensive checks if the timer is slow
- switching to a timer that uses RAF instead of setTimeout
- moving some code around
This should make the site smother on slower devices and fix lag spikes
causing weird test data.
### Description
Changed friends tooltip message from "max streak" to "longest streak".
Please close the PR if this was intentional wording.
### 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.
Closes#7127
Co-authored-by: Ashiq Renju <ashiqrdev@gmail.com>
### Description
Added a new filter option in the quotes search page that allows the user
to search for quotes by a minimum and a maximum length.
Implementing #1323
---------
Co-authored-by: Jack <jack@monkeytype.com>
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 7.0.7
to 7.0.11.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/nodemailer/nodemailer/releases">nodemailer's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.11</h2>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.10...v7.0.11">7.0.11</a>
(2025-11-26)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>prevent stack overflow DoS in addressparser with deeply nested
groups (<a
href="b61b9c0cfd">b61b9c0</a>)</li>
</ul>
<h2>v7.0.10</h2>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.9...v7.0.10">7.0.10</a>
(2025-10-23)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Increase data URI size limit from 100KB to 50MB and preserve content
type (<a
href="28dbf3fe12">28dbf3f</a>)</li>
</ul>
<h2>v7.0.9</h2>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.8...v7.0.9">7.0.9</a>
(2025-10-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>release:</strong> Trying to fix release proecess by
upgrading Node version in runner (<a
href="579fce4683">579fce4</a>)</li>
</ul>
<h2>v7.0.8</h2>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.7...v7.0.8">7.0.8</a>
(2025-10-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>addressparser:</strong> flatten nested groups per RFC 5322
(<a
href="8f8a77c67f">8f8a77c</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md">nodemailer's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.10...v7.0.11">7.0.11</a>
(2025-11-26)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>prevent stack overflow DoS in addressparser with deeply nested
groups (<a
href="b61b9c0cfd">b61b9c0</a>)</li>
</ul>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.9...v7.0.10">7.0.10</a>
(2025-10-23)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Increase data URI size limit from 100KB to 50MB and preserve content
type (<a
href="28dbf3fe12">28dbf3f</a>)</li>
</ul>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.8...v7.0.9">7.0.9</a>
(2025-10-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>release:</strong> Trying to fix release proecess by
upgrading Node version in runner (<a
href="579fce4683">579fce4</a>)</li>
</ul>
<h2><a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.7...v7.0.8">7.0.8</a>
(2025-10-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>addressparser:</strong> flatten nested groups per RFC 5322
(<a
href="8f8a77c67f">8f8a77c</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3d17dbec49"><code>3d17dbe</code></a>
chore(master): release 7.0.11 (<a
href="https://redirect.github.com/nodemailer/nodemailer/issues/1783">#1783</a>)</li>
<li><a
href="15879f8bd5"><code>15879f8</code></a>
Bumped dev dependencies</li>
<li><a
href="b61b9c0cfd"><code>b61b9c0</code></a>
fix: prevent stack overflow DoS in addressparser with deeply nested
groups</li>
<li><a
href="4175e4baf9"><code>4175e4b</code></a>
chore(master): release 7.0.10 (<a
href="https://redirect.github.com/nodemailer/nodemailer/issues/1776">#1776</a>)</li>
<li><a
href="d882ccfe8d"><code>d882ccf</code></a>
Merge branch 'master' of github.com:nodemailer/nodemailer</li>
<li><a
href="1d7e4f786b"><code>1d7e4f7</code></a>
Bumped deps</li>
<li><a
href="10bd871656"><code>10bd871</code></a>
chore: correct typo in variable name (<a
href="https://redirect.github.com/nodemailer/nodemailer/issues/1773">#1773</a>)</li>
<li><a
href="28dbf3fe12"><code>28dbf3f</code></a>
fix: Increase data URI size limit from 100KB to 50MB and preserve
content type</li>
<li><a
href="92ae1c49e3"><code>92ae1c4</code></a>
chore(master): release 7.0.9 (<a
href="https://redirect.github.com/nodemailer/nodemailer/issues/1769">#1769</a>)</li>
<li><a
href="c675d9e7e5"><code>c675d9e</code></a>
Merge branch 'master' of github.com:nodemailer/nodemailer</li>
<li>Additional commits viewable in <a
href="https://github.com/nodemailer/nodemailer/compare/v7.0.7...v7.0.11">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for nodemailer since your current version.</p>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/monkeytypegame/monkeytype/network/alerts).
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
Added a checkbox in the words filter modal that allows the user to make
all characters not in the include list be excluded.
Implements #5970
---------
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
Added a new style named "incomplete" that mirrors the error style, but
uses yellow for the color. Words are marked in this style when they
don't match the correct word exactly, but share the same prefix.
Implements #6690
---------
Co-authored-by: Jack <jack@monkeytype.com>
### Description
This copies the existing `text` timerstyle except on timed modes, where
it will only show the remaining progress (seconds) on every 15th second
(shows on 1:00, 45, 30, 15 and 0).
The motivation for this addition was that I wanted a middle ground
between the `text` timerstyle (in my opinion just a _little_ too
distracting) and no live progress indicator at all (I lose track of how
much time remains in the test), and I believe this achieves that middle
ground.
---------
Co-authored-by: Miodec <jack@monkeytype.com>
### Description
Different snippets of code from my old, dead project.
### 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/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`
- [ ] 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.-->
<!-- 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! :) -->
### Description
Some quotes from my favourite literature.
### Translations
id_1151: Almost five years! There were probably moments today when the
living Daisy did not quite match the Daisy of his dreams - and it was
not her fault, but the immense life force of the image he had created.
This image was better than her, better than anything in the world. He
shaped it with the genuine passion of an artist, constantly adding
details, decorating every bright feather that came into his hand. No
tangible, real charm can compare to what a person can accumulate in the
depths of their imagination.
id_1152: Gatsby believed in the green light, the gleam of an incredible
future happiness that recedes each year. Even if it eluded him today,
tomorrow we will run faster, reach further... And one fine morning... So
we try to swim forward, struggling against the current, and it keeps
pushing our little boats back into the past.
id_1153: They say emotional wounds heal - a thoughtless analogy to
bodily injuries, but in life it is not so. Such a wound may shrink,
partially close, but it is always an open wound, even if no larger than
a pinprick. The trace of suffered pain can perhaps be compared to the
loss of a finger or sight in one eye. You come to terms with the injury,
remembering it maybe only once a year - but when it suddenly comes to
mind, there is no help for it.
id_1154: Youth is like a plate piled high with sweets. Sentimental
people claim they would like to return to the simple, pure state in
which they existed before tasting the sweets. This is incorrect. They
would like to experience those pleasurable sensations again.
id_1155: Self-sacrifice, like a high elective office or inherited power,
for some people at some times is a luxury, yet it brings not guarantee
but responsibility, not calm but desperate risk. By its own inertia, it
can push one to ruin — an emotional wave causes it, and the person is
left alone forever on a bare rock of hopelessness.
id_1156: There is so much within me that I want to express. But it is
all so immense. I cannot find the words, I cannot convey what is inside.
Sometimes it feels as if the whole world, all of life, everything in
existence resides within me and demands: be our voice. I feel, oh, I
don’t know how to explain... I feel its vastness, and when I begin to
speak, it comes out as childish babble. How difficult it is to convey
feeling, sensation in words, on paper or aloud, so that the reader or
listener feels the same as you. It is a great task.
id_1157: Facing life in all its forms, whirling in its changing vortex,
Martin learned one rule: when playing an unfamiliar game, give the first
move to another. This rule saved him thousands of times, honing his
observation. He knew how to scrutinize the unknown and wait until a
weakness or vulnerable point revealed itself. Just as in a boxing match,
you test the opponent to find a weakness. And once found, - long
experience taught him - use it fully.
id_1158: Wherever he went, he was liked by everyone, because whether in
work or in play, he remained true to himself, always ready and able to
fight for his rights and demand respect. But he never put down roots.
Those around him were pleased, but he himself was never fully content.
There was no peace in him; he was constantly drawn and beckoned,
wandering through life, not knowing what he sought or where the call
came from, until he discovered books, creativity, and love.
id_1159: The dream of love was more important to him than the dream of
knowledge. The world seemed wondrous not because it consisted of
molecules and atoms obeying some mysterious laws - it seemed wondrous
because Ruth lived in it. She was a miracle, one that had never appeared
to him even in dreams.
id_1160: In the mouths of these people, the books he had read came
alive. They spoke passionately, fervently. Thought burned them, as
alcohol or anger might burn others. Philosophy was no longer dry printed
lines from legendary demigods like Kant or Spencer. Philosophy had come
alive, embodied in these two, filled with boiling crimson blood,
transforming their faces.
### 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.
- [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.
### Description
I added some new words to /frontend/static/languages/hinglish.json
Translations:
barre: outside
durghatana: accident
oopar: above
sabse: most
sveekaar: accept
### 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.
### Description
Fix more ligatures on French.
Supersedes #7111
### 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.
<!-- 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! :) -->