Launching MonkeyType Stats

I've made a thing: a small web app that you can self-host to preserve you MonkeyType test results.

To see an example deployment with my own MonkeyType stats you can visit typing.kovacsgellert.dev.

Why?

The built-in MonkeyType dashboard is limited to showing the latest 1000 results of a user. As far as my understanding goes, MonkeyType simply deletes any old result that falls out of this range, which makes it impossible to track long-term typing stats progress in case of active users.

The main goals of this project are:

  • save my old MonkeyType results from disappearing
  • enable deeper analysis of my typing stats
  • learn about .NET Aspire in a fun way

Main features

  • Scheduled job that runs once every day and imports all new results from the MonkeyType API with ApeKey authentication.
    • The job can also be triggered manually from the Settings page (endpoint protected with ApiKey auth).
  • Scheduled job that runs hourly and fetches missing result details (needed for wpm/burst/error charts on the test level).
  • Filtering results by Timestamp, Mode (including Mode2), Language.
  • Summary view showing highlights of all/filtered results.
  • Table view showing the list of all/filtered results.
  • Graph view showing speed/accuracy/consistency evolution over time (including rolling averages of latest 10 and 100 results).
  • Graph view showing wpm/burst/error on the test level (accessible through the Details column of the table view).
  • JSON backup/restore of the database (endpoints protected with ApiKey auth).

Tech stack

  • .NET Aspire orchestration
  • .NET 10 WebApi
    • Hangfire for scheduled jobs
  • React SPA with TailwindCSS
  • PostgreSQL database
  • Docker + Docker Compose

How to deploy

You can find all the instructions in the GitHub repo.