Why I built it
Chataltul (חתלתול) is Hebrew for kitten, the one that grows up while you focus. It used to be called Kavana (כוונה), Hebrew for intention, the attention you bring to what you're doing, and that's still the idea. The app is a focus timer, and the difference from a normal one is that it doesn't just count down. You pick how long, give it a title if you like, and while the block runs it checks in: "Still on: Draft the newsletter?" You tap Yes, or you tap Drifted and say what pulled you away, and you're back on it a few seconds later instead of twenty minutes later.
A countdown can tell you the time is up, but it can't tell you that you left the work ten minutes ago for your phone. That's the part I wanted help with, so that's what Chataltul does: it notices WITH you, gently, and keeps a log so you can see what pulls you away most.
I wanted it on an iPad without going through the App Store, which is why it's a web app you add to the Home Screen. It works in any browser, it needs no account, and everything you do stays in your browser unless you decide to make one.
Features
A block
- One screen, like Forest's. Drag around the window to pick how long (5 minutes to 2 hours) and press Start. A title and a tag are there if you want them, and optional. The clock opens the rest: a first step if it helps you start, how it checks in, and a Stopwatch that counts up instead. Your last few titles are one tap away, and for the first 10 seconds Cancel takes a block back.
- Two ways to check in. "Ask me" asks "Still on: ...?" every 15 minutes, or however often you set it (Yes / Drifted, and then "What pulled you away?"). "Nudge me" sends a short line or a quote at an uneven gap instead, so it doesn't feel like a metronome.
- Reminders with the app closed. The check-ins arrive as notifications, on an iPhone or iPad from the Home Screen app, on Android, and in browsers on a computer. On Android the notification has Yes and Drifted buttons.
While you work
- A sky that goes by with you. Start dives into the window, and the block fills the screen with a sky that goes from afternoon to sunset to stars as the time runs out, the kitten growing in the ring in the middle, with round Stop and Pause buttons. Open the menu for anything else, and a little pill at the top keeps the block in view, like a Live Activity.
- Pause, and park a thought. A pause holds the clock and the check-ins for up to 5 minutes, like Forest's (or turn pausing off). A thought you park is written down so it stops pulling at you, and it waits for you on your Later list.
- Count extra time if you like: when the time is up the block keeps counting until you tap Done.
- Background sound. A purring cat, rain, brown noise and white noise, plus a café, a fireplace, waves, birds, crickets and wind from the shop, two at a time with their own volumes. All made on the device, so there's nothing to download.
- Keep the screen on (where the device allows it), and a disk timer that shrinks as the time runs out, for a phone or iPad propped up on the desk.
- At the end. Your cat comes home: the café comes up and it drops onto its spot, with its treats floating up. Then Done / Partly / Not really, +5 min or +10 min if you're in the flow, the thoughts you parked, ready to copy, and Again to start the same block in one tap. Done gets you paw-print confetti.
Cats, a bit like Forest
- A kitten grows while you focus. Invite a cat when you start a block, and it grows up inside the timer ring, from a napping kitten to a grown cat (25 minutes or more; shorter, it comes home a kitten). Stay to the end and it comes home to your Cat Café. Stop early, or leave Chataltul for more than a few seconds, and it tiptoes off (the block keeps going).
- The Cat Café, in 3D. Every cat that came home, by day, week, month or year, in a little café room that floats on the page and turns when you drag it, like Forest's patch of trees. The cats sit on what you bought, walk around, loaf and wash, and the light follows your clock. Your focus time by tag is under it.
- Treats and a shop. Every minute of a block whose kitten came home earns a 🐟. Spend them on things for the café (a rug, a window, a cat tree, a café counter...), cats to adopt, café themes and sounds.
- Shelter cats. Chataltul's version of Forest's real trees: sponsor shelter cats with treats, see how many everybody sponsored, and a link to donate to a real shelter if you want.
- Napping together. Join a friend's block, or anyone's with a room code, and your kittens grow up side by side in the same ring. If anyone leaves Chataltul or stops, every kitten wanders off, and if everybody stays, every kitten brings extra treats.
- Goals. Three missions a day and one a week, a monthly focus challenge, a starter challenge for new people, and 27 achievements, all paying extra treats.
- Events. Halloween week (October 25 to November 1) with a pumpkin cat, and winter (December 15 to January 5) with Flurry, each with things for the café, only in the shop that week.
- A browser extension. While a block runs, the sites you drift to (YouTube, Reddit, X and the rest of your list) show a cat instead, "Boo! Miso is growing.", in Chrome, Edge, Brave or Firefox on a computer. See The browser extension.
- Sixteen cats, each painted: Miso, Milo, Mochi, Pickles, Noodle, Earl Grey, Biscuit and Boo you meet by focusing (your first block, an hour in all, three days in a row...), and Luna, Cocoa, Olive, Dumpling, Maple, Ziggy, Pumpkin and Flurry you adopt. Cats has all of them. Cat mode is on unless you turn it off, and the notifications get a 🐱 too.
Around it
- Later. A list like Reminders for the things that come up, with ▶ to turn one into a block.
- Breaks and a mindful minute. After a block it offers a 5 or 10 minute break with a "Break's over" ping, and there's a breathing screen of 1, 3 or 5 minutes, with a flower like the Apple Watch's.
- Tags and history. Tag a block (Work, Study, Reading, or your own), and the Café shows your time by tag as a chart and a ring. Below it: today, the last 7 days, your streak, how many check-ins found you on track, what pulled you away most, a five-week heatmap, and every block grouped by day. You can add a note to any block and change it later, see what time of day you focus most and how this week compares with the last, and share your café as a picture.
- A daily goal and a daily reminder. Set a goal from 30 minutes to 3 hours and watch its ring fill at the top of the menu, and get a "Time to focus?" ping on the days and at the time you pick.
Feels like an app
- Gets around like Forest. One screen for the block, and a menu that slides in for everything else (the Café, your cats, goals, the shop, Later, rankings, friends, settings). Sheets that slide up and alerts like the system's, on an iPhone, an iPad or a Mac, and dark mode follows the device.
- A keyboard if you have one. ⌘1 to ⌘5 for Focus, Later, Café, Cats and Settings, ⌘, for Settings, the arrow keys on the window for how long, space to pause, Esc to close.
Focus with friends
- Friend codes and sharing. With an account, swap codes in Settings → Friends and choose to share nothing, that you're focusing, or what you're working on too. You only see your friends when you share back.
- Join. A friend's block shows on your Focus tab, and Join starts one that ends at the same moment as theirs. You can get a ping when a friend starts.
- Rankings, if you want them. A weekly round with your friends, and a worldwide list under a nickname you pick, both opt-in.
- Only that. They never see your history, your parked thoughts or your check-ins.
Your data stays yours
- No account needed. Everything is kept in your browser. The server only sends the reminders, and it deletes each one once it's sent.
- An account if you want one, to back it up, use it on more than one device, and focus with friends. Your email is enough: Chataltul emails you a code to sign in, so there's no password to remember (a name and password works too). Delete My Account removes the account and its data from the server.
- Counts, never content. The app counts which features get used, with a random id per browser and never anything you type, and you can turn that off in Settings → Privacy. The details are in Accounts and privacy.
Screenshots
A check-in on an iPad. On a wide screen the card comes up in the middle, and your cat peeks over it.
The Focus tab on an iPad.
On an iPad in landscape, with the menu open.
It works in a browser on a computer too.
A kitten nearly grown, the café over a month, and the shop.
A nudge, parking a thought, and the disk timer.
The end of a block, a break, and a minute of breathing.
The Cats tab, meeting a new cat, and the paw confetti after Done.
Joining a friend, focusing together, and Settings → Friends.
The first run, adding it to the Home Screen, and Settings → Privacy.
Dark mode follows the device.
Install
On an iPhone or iPad
Open Chataltul in Safari, tap the Share button, then Add to Home Screen, and open it from there. The reminders only work in the Home Screen app (iPadOS and iOS 16.4 or newer), because that's the only place Apple allows web notifications. The steps, with the link to my copy, are in Install.
On Android
Open it in Chrome and it works right in the tab, reminders included. To give it its own icon, use the menu and Add to Home screen. See Install.
Or get the Android app, with the cat that shows up over other apps when you drift: download the APK from the latest release and open it. It needs Android 12 or newer, and everything stays on the phone.
On a computer
Any recent browser works, and Chrome, Edge and Safari can install it as an app with its own window. See Install. To block distracting sites during a block, load the browser extension in Chrome, Edge, Brave or Firefox.
Your own server
It's one Node program with no dependencies and nothing to build: git clone, then KAVANA_STATE=./state node server.js, and put it behind HTTPS for the reminders. Your own server has the whole setup, and Developing Chataltul has the code and the tests.
Documentation
Everything about using Chataltul, where your data is kept, and running your own copy is in the docs:
Start with What is Chataltul?.
How it's built
- The app logic is
web/engine.js, plain functions over one document: blocks, check-ins, nudges, pauses, Later, breaks, history, the pings to send, what friends may see, and the merge for sync. The browser runs it, and the server runs the same file for accounts.
- Your data lives in the browser's localStorage (
web/data.js), and answers tapped on a notification wait in IndexedDB until the app opens. With an account, the same document is also kept on the server, one file per account.
- The screens are
web/app.js, index.html and style.css, dressed like an iPadOS/macOS app, with a service worker (web/sw.js) for the notifications. The cats that move are drawn in web/cats.js, one SVG kit with fifteen cats in four poses (peek, sit, sleep, cheer), which also says where everything goes in the café. The paintings in web/cats/ and web/cafe/ (every cat grown up, as a kitten and napping, and the café's furniture) were painted with imagegen-cc on my Mac (tools/paint-cats.js, tools/cutout.py). There's no framework, no build step and no dependencies.
- The browser extension (
extension/) is plain Manifest V3 that loads in Chromium and Firefox. The Chataltul page tells it when a block starts, pauses, stops or ends, and it turns one declarativeNetRequest rule on and off.
- The server (
server.js) is plain Node with nothing to install. It sends the reminders with Web Push, which is written out by hand in lib/push.js (VAPID and aes128gcm), and keeps its state in JSON files (lib/state.js).
Credits
- Node.js (MIT), the only thing the server needs.
- The "rain" sound is pink noise made with Paul Kellet's well-known filter, computed on the device.
- The quotes in "Nudge me" are from Rabbi Tarfon, Hillel, Annie Dillard, Simone Weil, Seneca, Horace, Thoreau, Jim Elliot, Robert Frost and Emerson.
License
MIT. See LICENSE.