Act 1: Blissful ignorance
Once upon a time there was a website called typehere.co. It set out to solve a focused mission: a scratchpad you can access from any device.
No login, no cookies, no advertisements, no network calls, no backend, no richtext, no markdown support, no formatting. The entire frontend codebase was probably less than 100 lines.
They say perfection is not when there is nothing left to add but rather when there is nothing left to take away. Typehere was the living embodiment of less-is-more. It's not what every website should be; there are always good reasons to squeeze in more features. But once in a blue moon, you stumble across a masterpiece like Typehere and cannot help but look on in awe.
Then everything changed.
Act 2: The hard truths
The typehere.co domain stopped resolving some five years ago and I lost my last true friend in this world. I searched high and low for replacements.
Google Docs is too persistent.
WordCounter.net is too loud.
Drafting an email leaves too much clutter if you don't remember to delete the drafts.
Drafting a text message carries the risk of accidentally sending it (and you have to shift-enter for newlines).
VSCode is too structured and insists on saving the file.
Nothing worked.
I ended up leaving dozens of untitled Google Docs lying around never to see the light of day again. What did I do to deserve this?
Act 3: False dawn
Then came the fated savior, or so I thought. After opening one Google Document too many, I made a last ditch effort to find a replacement for my beloved Typehere, and came upon typehere.cc.
It turns out I was a doppelganger the whole time, an NPC, a sad mirror of my better self. For someone much braver than I had gone out into the world and solved the very problem that had plagued the last five years of my life. A greater version of myself had reached down from the heavens and lifted me to sit upon his shoulder.
And looking out over the world he had built for me he said "Why don't you stay awhile, get comfortable. I have a lot to show you." and he showed me. But as soon as I began to peer beyond the rolling green hills, beyond the looming pines on the mountain, past the clouds on the horizon, I saw a rift in the very fabric of everything. I saw the farce I had been made to believe was my new home.
And as I began to slip I clutched onto everything I could see, but the fabric only tore further, and my dreams collapsed into a silent heap beside me.
There's a name for this: rock bottom. It's where I was and where I would always be.
Act 4: Atonement
In case you're confused about what just happened, the better me has terrible taste: typehere.cc uses Courier New monospace at 20px with #333 text on a #f0f0f0 background. In other words, the font family, font weighting, kerning, and colors on typehere.cc are both too far from what Typehere once was, and too far from my own personal tastes.
There comes a time in one's life where one must atone for one's sins. My doppelgangee may one day have to atone for a mountain of sins, but an NPC must only attend to an anthill of NPC guilt.
And so type.sahildev.com was born. Built for one NPC, used by one NPC, and only ever loved by one lonely NPC.
Epilogue: More is Less
In attempting to fix some of the issues I had with typehere.cc I managed to forget the lessons I learned from our fallen idol.
I added dark mode. I included a word counter and a tooltip. I chose colors other than pure black and pure white. I fixed a caching bug. I blew up the website size from 1kb to 65kb.
And thus my atonement began and ended with a clone of a clone. A failed replica of a misprinted xerox. A JPEG screenshot of a WEBP materialization of what was once an SVG masterpiece.