Challenge a friend
Your friend races a replay of your caret on the same text. The run lives inside the link, so it never touches a server.
A ghost is one of your own timed tests. Finish a 15, 30, 60 or 120 second test and its result offers "Challenge a friend with this run".
Beat 0 wpm
No sign-up. Nothing about you is sent back to the sender unless you share your own link.
Race a friend who is somewhere else
A ghost challenge lets you race someone who is not in the room and not online at the same time. Take a timed typing test as usual, then come here and copy the challenge link. Your friend opens it, sees the speed to beat, and races a replay of your caret across exactly the text you typed, second by second, with your ghost drawn as a dashed violet caret ahead of or behind their own.
When they finish, they see who won and by how much, and can send their own ghost straight back on the same text. That turns one test into a back-and-forth match that can run over a whole day, with no accounts and no app.
The run lives in the link
Everything the race needs is packed into the part of the link after the # sign: the words, the test length, your speed and accuracy, and the moment you finished each word. Browsers never send that part of a link to a server, so your run is not uploaded or stored anywhere but in the link itself. A checksum guards it: if the link is cut short or changed, the page says the challenge link is broken and offers a normal test instead.
Links can be edited by hand with some effort. There is no leaderboard, so the only person a doctored ghost fools is the friend you sent it to.
Which runs can be sent
Your last five timed tests of 15, 30, 60 or 120 seconds are kept for this, whatever text type you chose. Pick a different one if your latest was not your best. Racing a ghost counts toward your daily streak when the race lasts 30 seconds or more, and it never changes your personal bests.