If you have ever felt the irrational pull of a Duolingo streak at 11 PM, you already understand the psychology behind cji.email’s streak-based goal tracker. The feature is simple in concept and ruthlessly effective in practice: set a daily target for how many emails you want to clear from a Kanban column, hit that target, and watch a flame icon tick up. Miss a day and the counter resets. It is the same behavioural loop that keeps language learners opening an app every morning — now applied to the thing that quietly drains productivity more than almost anything else: email.
The Problem With Every Other Email Client’s Approach to Inbox Zero
Gmail, Outlook, Spark, and Superhuman all offer varying degrees of inbox management sophistication. But none of them answer the question that matters most for building a lasting habit: Did you make measurable progress today?
Tools like Beeminder try to solve this with financial commitment devices — you pledge money, and missing a daily goal costs you real cash. It works for some people, but the friction of setup and the anxiety of monetary stakes make it a poor fit for something as everyday as email.
cji.email takes a lighter, more playful approach borrowed from apps people already love. No money on the line. No punishing red screens. Just a persistent flame and a number that climbs as long as you keep showing up.
What the Streak-Based Goal Tracker Actually Does
cji.email is a desktop email client that structures your inbox as a Kanban board. Instead of a flat list of messages, you work across columns — each one typically backed by one or more IMAP folders on your mail server. The streak tracker sits inside this Kanban model and adds a new dimension: accountability.
Here is how it works in practice:
- Per-column targets: Each Kanban column has its own daily goal, set independently. Your “To Do” column might have a target of ten removals per day while “Waiting” has a target of three.
- Removal counting: Any time you move an email out of a column — to another column, to an archive, or to the trash — it counts toward your daily target. The metric is “emails removed,” not “emails read,” which keeps the incentive aligned with actual progress.
- Instant streak increment: The moment your removal count crosses the threshold, the streak fires in real time. No waiting for midnight, no batch job running in the background.
- Live progress bar: A progress bar in each column header shows where you stand against today’s target. It updates as you work.
- Flame icon with counter: A 🔥 icon and a streak count live permanently in each column header once tracking is enabled. At a glance, across every column, you can see your current streaks.
- Accessibility: The flame’s pulse animation respects the operating system’s
prefers-reduced-motionsetting, so users who are sensitive to motion get a static icon instead.
Setting Up a Column Goal
Configuring the tracker takes about ten seconds. Each column header contains a settings button — a small target icon — that opens a popover panel. From there you can toggle tracking on or off, enter your daily target, and save or disable the goal entirely.
The settings are stored in a local SQLite database via three tables: column_goals, daily_progress, and streak_state. Everything is local-first. There are no accounts to create, no dashboards to log into, and no data leaving your machine. Streak data is deeply personal — it is a record of your habits and your inconsistencies — and cji.email’s architecture treats it that way.
The Smart Rollover: Why Most Streak Implementations Get This Wrong
Streak logic sounds trivial until you think about edge cases. What happens if a user skips two days? What if the app is opened right at midnight?
A naïve implementation resets the streak any time the app detects a “new day” without a qualifying activity. This punishes users who were simply offline, or whose workflow naturally pauses over a weekend.
cji.email uses a smarter algorithm:
- Gap-aware rollover: The system checks the number of calendar days since the last qualifying activity. If you missed one day, the streak resets once and starts fresh — not once per missed day.
- No double-increments: If you cross your threshold multiple times in one day, the streak only increments once per calendar day.
- Multi-folder awareness: A single Kanban column can aggregate multiple IMAP folders. Removals from any of those folders count toward the same column’s goal, treating it as one unified workspace.
This is the kind of detail that separates a feature that feels right from one that feels broken.
A Comparison With Other Productivity Streak Systems
| System | Streak Model | Stakes | Data Ownership | Email Integration |
|---|---|---|---|---|
| Duolingo | Daily lesson completion | Social pressure | Cloud | None |
| Beeminder | Quantified goal with pledges | Financial | Cloud | None |
| GitHub | Daily commit activity | Professional reputation | Cloud | None |
| cji.email | Daily email removal per column | Personal motivation | Local SQLite | Native, IMAP-first |
The cji.email approach is the only one in this table where the streak is directly integrated into the tool you use to do the underlying work. The act of clearing email and the act of tracking it are the same action.
Getting Started
cji.email is a desktop-first application for macOS, Linux, and Windows, built on Tauri and connecting directly to your IMAP server. If your email supports IMAP — and virtually every provider does, including Gmail, Outlook, Fastmail, and self-hosted servers — cji.email works with it.
The streak-based goal tracker is included in the core application. Open any Kanban column, click the target icon, set your daily number, and your first streak day starts the moment you clear enough emails to hit it.
For people who have tried and abandoned inbox zero before, that first streak day has a tendency to feel different from previous attempts. Not because the emails are any less real, but because for the first time there is a small, honest signal telling you that today, you made it.