CatalogTools ›Everyday

Day Counter — how many days have passed

Days smoke-free, days since an anniversary, the streak of a habit you're building: set the start date and the app counts on its own, every single day that passes. Unlike a one-off calculator, this one stays saved on your device — built for you to come back to every day and watch the number climb.

▶ Use this app

day counterstreakhabitssober counter

What it records

  • E.g. Days smoke-free, or Anniversary

How it works

This is a Reactive app: a plain text document that your browser turns into a working app — forms, live data, tables, statistics and even charts, with nothing to install or configure.

  1. Use it right away. Hit “Use this app”: it opens right in your browser, ready to go, with data saved only on your device.
  2. Your data stays yours. Everything is stored locally on your device, kept separate for each app: no account, no server, nothing to set up.
  3. Make it your own. The text below is the entire app: copy it, tweak fields, views and words, and your changes become interactive instantly.
  4. Share it as a file. An app is a simple file: save it, export it or share it with a link; and with encrypted collaboration several people edit the same data in real time.
The app’s source
# 🔥 Day Counter

Days smoke-free, days since an anniversary, the streak of a habit you're
building: set the start date and the app counts on its own, every single day
that passes. Unlike a one-off calculator, this one stays saved on your
device — built for you to come back to every day and watch the number climb.

::::form{path="goals" id="fob"}
::input{form="fob" field="name" placeholder="E.g. Days smoke-free, or Anniversary" required="true"}
::input{form="fob" field="start" type="date" required="true" legend="Start date"}
::add-form{form="fob" path="goals" label="Start counting"}
::::

:::python{data="goals"}
```
from datetime import date

rows = data["goals"]
today = date.today()
for r in rows:
    start = date.fromisoformat(r["start"])
    days = (today - start).days
    print(f"🔥 {r['name']}: {days} days")
```
:::

## Saved goals

:::table{path="goals" headers="Goal,Start date" deletable="true" editform="fob"}
{name} | {start}
:::

Come back every day to watch the number grow, or add a new goal whenever
you start fresh.