I Gave the Game a Reason to Open Tomorrow
So someone told me the game was boring.
Fair. The streak counter has been sitting there in the corner since March, counting up consecutive days, doing nothing to actually make you want to play today specifically. You either had the discipline to come back daily or you didn't, and the app wasn't doing its part. I think about that streak number more than is healthy and I still skipped two days last week.
So I built Daily Challenge.
What it is
There's a new mode button next to Words / Sentences / Song. It says Daily with a little gold TODAY badge that pulses for attention because I'm not above that. Click it and you get the same 10 sentences as every other player on the planet, seeded from today's UTC date. Tomorrow, different 10 sentences. Day after, different again. Same for everyone, every day.
No lives. No idle drain. Just type through all 10. The point isn't survival — it's a clean run you can compare with friends without arguing about who got the easier prompts. Speedrun energy.
There's also a banner above the stats that shows up when you haven't played today, a returning-visitor popup that nudges you to try it once per day, and the share card now stamps a DAILY · 2026-05-13 tag on the corner so screenshots actually mean something.
How the seed works (the part I'm proud of)
The whole thing runs client-side. There's no server picking today's prompts. Every browser computes them locally from a deterministic hash of the UTC date string, fed into a tiny PRNG called Mulberry32. Five lines. Fast. Boring. Perfect.
function mulberry32(seed) {
var s = seed >>> 0;
return function() {
s = (s + 0x6D2B79F5) >>> 0;
var t = s;
t = Math.imul(t ^ (t >>> 15), t | 1);
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
}
Pass it a seed, get back a function that produces the same sequence of floats every time. I take the UTC date, DJB2-hash it into a uint32, and use that as the seed. Result: every device, every browser, every timezone gets the exact same 10 prompts on the exact same calendar day.
I used UTC instead of local time on purpose. If I'd used local, someone in Tokyo would get a different "Tuesday challenge" than someone in California, and sharing scores would turn into a timezone forensic exercise. UTC means the global daily rolls over at one shared moment. The downside is your "today" technically starts at 8pm Pacific the night before, but nobody notices unless they're playing at exactly midnight, and if you are, that's a different conversation.
What it doesn't touch
This was the part I kept second-guessing. Should daily runs count toward your regular Sentences/Standard high score? Toward your ghost? Toward lifetime stats?
I went with: no, no, kind of.
Your highScores bucket is untouched. Daily wins do not pollute your per-mode bests. Your ghost race is untouched — daily prompts won't replace your regular sentences ghost, because that would feel like cheating on yourself. gameHistory, which powers the profile graph, is untouched, so the graph stays clean. failedPrompts too — daily sentences don't add to your "top failed" list because you saw them once and you'll never see them again. Same with lastSession; the return-visit greeting still tracks your normal play.
What it does touch: dailyStreak bumps when you play (it's literally a daily thing, the streak counter is the whole point), and lifetimeStats.gamesPlayed ticks up because you did, in fact, play a game.
There's a new localStorage key, dailyHistory, structured as { "YYYY-MM-DD": { wpm, acc, attempts, completed, time } }. Keeps your best WPM per day and how many attempts you took. Pruned to the last 60 days so it doesn't bloat. Eventually I'll surface a calendar view on the profile page, but that's the next blog.
Things I considered and dropped
Rotating modes by weekday — Mon Words, Tue Sentences, Wed Song, etc. Killed it. Made score comparison messy and the Song mode "daily seed" idea is structurally weird because Song mode is rhythm-based, not text-based. Maybe a separate Daily Song mode later. Not today.
Letting you pick difficulty for the daily. Killed it. The point is everyone on the same playing field. Standard sentence mix, no negotiation.
A real leaderboard. Killed it for now. No server, no auth, no moderation budget — the share card is the leaderboard. Screenshot your score, post it, that's the social layer. I'm aware that's not as satisfying as a real ranking. I'm also aware that the moment I add a server I'm signing up for a maintenance bill I currently don't pay.
Small thing about lives
Daily has no lives. I wrestled with this. Lives are kind of TypeVelocity's identity at this point. But if you die at prompt 3 and your friend dies at prompt 8, your "WPM on today's daily" doesn't really mean the same thing, and the whole speedrun framing collapses. So daily gets all 10 prompts, no death state, no idle drain. Pure pace.
If you want lives back, just switch out of daily mode. Words and Sentences haven't changed.
Copyright sidetrack
Quick aside, because someone asked. I almost made themed prompt packs — movie quotes, book passages, code snippets, that sort of thing. Then I remembered Disney exists, and that famous lines from copyrighted books are still copyrighted lines from copyrighted books, and I do not want a takedown email about my typing test. Public domain (Sherlock Holmes, Austen, Poe) and stuff I write myself are safe. Modern quotes are not. I'll do themed packs eventually but only with material I can actually use.
How to play it
Open the app. There's a banner. Press the button. Or click the Daily button in the mode selector. Or wait three seconds, dismiss the popup, then do it anyway. Type 10 sentences. See your score. Try again if you want — same prompts, the seed doesn't change mid-day, so attempts let you actually improve on today's specific run rather than reroll for an easy one.
If you've played before and haven't done today's daily yet, you'll get a little popup in the corner reminding you. Close it and it won't bother you again until tomorrow. I tried to make it less aggressive than the tips popup, which I have been told is "very aggressive." Working on it.
What's next
Calendar view on the profile page showing your daily history at a glance. Themed packs (public domain only). Maybe a "weekly recap" of your daily runs. We'll see what people actually want.
Go type today's. I want to know if the prompts feel right.