A pen-and-paper mini calendar that lives in your menu bar. Cross off every day you showed up, and don't break the chain.
The calendar is drawn, not written: seven columns, one cell per real day of the month, an ✕ through the days you finished. No day numbers, no borrowed days from the month before or after — the first and last rows come out ragged, exactly like the notebook version.

Click the calendar in the menu bar to open it. Each week is a row of boxes; open a row and click a day to cross it off or clear it again.
| Item | What it does |
|---|---|
☐ ☒ ☒ ☐ ☐ ☐ ☐ | One week. Open it to toggle an individual day. |
| ◀︎ / ▶︎ | Step to the previous / next month. |
| Cross Off Today | Toggles today without hunting for it (⌘T). |
| Clear | Wipes every cross in the month on screen. Asks first. |
| Export to Text File… | Writes every month of every chain to a .txt (⌘⇧E). |
When a month ends, the calendar stays put — a finished chain is worth looking at. A ▶︎ appears; click it when you're ready to start the new month, and the 1st lands in its correct column.
◀︎ goes back as far as you like, and days in past months stay clickable, so you can fill in a day you forgot.
There are five independent calendars — one habit each. Only Chain 1 is enabled out of the box. To add more, open Raycast Settings → Extensions → Don't Break the Chain and enable Chain 2–Chain 5. Each keeps its own marks and its own displayed month, and each can be given a name in the extension's preferences (the name only ever shows in the tooltip and in exports, never on the calendar).
~/Downloads.The text file draws each month the same way the menu bar does. In Hand-Drawn style:
August 2026 (10 of 31 days)
┌───┬───┐
│ │ ╳ │
┌───┬───┬───┬───┬───┼───┼───┤
│ ╳ │ ╳ │ ╳ │ ╳ │ │ │ ╳ │
├───┼───┼───┼───┼───┼───┼───┤
│ ╳ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┤
│ ╳ │ ╳ │ ╳ │ │ │ │ │
├───┼───┼───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │
├───┼───┴───┴───┴───┴───┴───┘
│ │
└───┘
…and in Emoji style:
M T W T F S S
⬜✅
✅✅✅✅⬜⬜✅
✅⬜⬜⬜⬜⬜⬜
✅✅✅✅✅⬜⬜
⬜⬜⬜⬜⬜⬜⬜
⬜
Every cross is written to two places at once: a JSON file per chain under the extension's support directory, and Raycast's LocalStorage. Reads merge both, so history survives extension reloads, updates, and the loss of either store. Nothing is ever pruned — old months stay until you clear them.
npm install
npm run dev
npm run dev builds the extension into Raycast and watches for changes. Stopping it leaves the extension installed; npm run build refreshes it without the watcher.
MIT — see LICENSE.