Open source · Pre-launch

Track your habits.
Own your data.

Gather sends you a daily prompt through XMPP, WhatsApp, or Signal. You reply with a number. It stores the data on your server. No app to lose. No streak that can be taken from you.

G
Gather · Pushups
XMPP · gia.zm.is · daily 09:00
09:00
[>] Started 'Pushups' (Integer).
[>] Use .done to finish, .cancel to stop, .undo to remove the previous fragment.
[>] Target 50
09:01
50
[>] Saved 'Pushups'.
14-day streak 50 today
XMPP · WhatsApp · Signal · Self-hosted · Open source · Your server

Set a prompt.
Reply with a number.

A Gatherer is a structured input with a type and an optional schedule. You create one, give it a name, pick a type (integer, string, and so on), and optionally set when it should fire.

After that it is automatic. Every morning at 09:00 you get a message. You reply. It saves. You never lose the data because there is no app to break.

0 Missed prompts
14d Streak intact
1 Message to log
Gatherers
Gatherers list in light mode Gatherers list in dark mode
hover for dark mode

All your messages.
One place.

WhatsApp, Signal, and XMPP threads side by side. Reply without switching apps. Search across all of them at once.

Per-chat features let you route specific conversations through task workflows, business plan commands, or automated rules without touching your general inbox.

Inbox
Compose view in light mode Compose view in dark mode
hover for dark mode

What your data
tells you.

Gather tracks message-state signals across every conversation: delivery time, read time, reply time, typing patterns, and presence cycles.

Over time you get a real picture. Does this person actually read quickly and take a while to reply, or are they just slow on everything? The data answers it without guesswork.

Behavioral graphs
Behavioral graphs in light mode Behavioral graphs in dark mode
hover for dark mode

I lost my phone.
I lost two years of data.

A phone broke. A fitness app I had used consistently for two years was gone. Not backed up in any way I could actually use. A journaling streak, gone. Numbers I had tracked and cared about, gone.

The problem was not losing the phone. The problem was that my data had been stored in a way that was convenient for the app and fragile for me.

I wanted something that would still work from a library computer. Send a message to an XMPP address, log a number, write a note, and have it land somewhere I controlled regardless of what device I was on.

That is a low bar. We should not need a custom app to clear it. Gather is the answer I built for myself.

Not for everyone.
By design.

For you if

  • You run your own server or are comfortable doing so
  • You track habits and keep losing the data when devices or apps change
  • You use XMPP, or are willing to
  • You have messaging sprawl across WhatsApp, Signal, and XMPP
  • You care where your data lives and want to actually own it

Probably not for you if

  • You want a polished mobile app with a support team behind it
  • You are not comfortable with pre-launch software
  • You would rather not think about where your data lives
  • You need everything to just work with zero setup

The full picture.

📬
Unified inbox
WhatsApp, Signal, and XMPP threads in one view.
📊
Gatherers
Structured inputs with types, schedules, and storage.
📈
Graphs
Plot numeric gatherers over time. Overlay with other data.
🤖
AI summaries
Optional catch-up summaries. Runs on a model you control.
🔐
OMEMO
End-to-end encryption for XMPP channels. Configurable per conversation.
🖥
Self-hosted
Your infrastructure. No accounts on our servers required.
🧬
Behavioral signals
Delivery, read, reply, and typing timing tracked per contact.
📤
Export-friendly
Gathered data in formats you can query and move without asking.

Early access is open.

Gather is not finished. If you want to run it yourself, test it, or tell us what is broken, sign up at hub.zm.is.