Product

Introducing Pulse: team chat that does not lose the decision

Today we are launching Pulse, the team chat inside the MPP Portal. Channels, DMs, threads, reactions, pins, unread tracking, and an AI that has actually read the channel.

This is the fourth product in our "we were paying for a tool that almost fit" series, and the one people were most skeptical about. Building a project manager is reasonable. Building a chat app is the kind of thing engineers warn each other about.

Why we did it anyway

Not because Slack is bad. Slack is very good. We built it for two reasons.

Chat is where decisions get made and where they vanish. The most consequential sentence in a company's week ("fine, let's push the launch to the 12th and tell the client tomorrow") is typically typed into a chat window and then buried under four hundred messages. It never reaches the project, the client record, or the plan. Six weeks later nobody can reconstruct why the date moved, and the reconstruction attempt is itself a chat thread.

The conversation and the work were in different buildings. Discussing an account meant having the client record open in one tab and the conversation in another, pasting links between them. Every paste is a small tax, and the accumulated tax is why context gets lost.

Once we had built the CRM, the projects, the workspace, and the sites in one system, chat was the last thing living outside it. Keeping it outside meant permanently accepting the seam.

We did not need a better chat app. We needed the chat to be in the same place as the things we chat about.

What Pulse is

Everything you would expect, because a chat tool missing one familiar affordance feels broken:

  • Channels and DMs: public and private channels, one-to-one messages, topics, and a member directory.
  • Threads, reactions, and pins: replies in a side panel so channels stay readable, emoji reactions, pinned messages for the things that matter.
  • Unread tracking: per-person read markers with live badges, so "what have I missed" has a real answer.
  • Formatting that behaves: bold, italic, code, auto-linked URLs, and @mentions.

It runs on Firestore's realtime layer, so messages arrive the way they should: instantly, without a refresh, on every open client.

Pulse AI

The AI features here are the ones we actually wanted from a chat tool and never had:

  • Catch me up: summarize what happened in this channel while you were away, in the order it matters rather than the order it arrived.
  • Extract action items: read a discussion and produce the list of things people committed to. This is the antidote to the vanishing decision.
  • Answer questions about the channel: "did we agree a date with the client?" answered from the actual messages.
  • Draft and polish: write the message you are avoiding writing, or tighten the one you drafted at 11pm.

"Catch me up" is the one that changed behavior. The cost of being away from a channel dropped, which meant people stopped compulsively monitoring channels, which is the actual problem with workplace chat. The tool that best respects your attention is the one that can reliably tell you what you missed.

Building chat: what we learned

Unread state is the hard part. Not messages, not realtime delivery: unread. Every person needs their own marker in every channel, updated as they read, surviving multiple devices and reconnects, without hammering the database. We rewrote it twice.

Threads are a modeling decision made early and regretted later. Whether a thread reply is a message with a parent or a separate collection determines what you can query for the next two years. We chose the version that keeps channel reads cheap and accepted a more expensive thread read, because people scroll channels far more than they open threads.

Nobody notices good chat, everybody notices bad chat. There is no glory here. A message that takes two seconds to appear makes the whole company distrust the tool. The engineering budget goes almost entirely into being unremarkable.

Notifications need to be conservative. The temptation is to notify on everything. The result is people muting the app, which is the same as not shipping it.

Where it sits now

Pulse is live for the whole team: every role, including viewers. Collaboration tools with seat-based gates end up with half the company outside the conversation, which is worse than the seat cost.

That completes the set we set out to replace this summer: the Portal, Flow, the CMS, Motion, and Pulse. Next week we open up the website grader we have been running against client sites for months.

If you want a partner whose internal operations are this deliberate about not losing information, apply for partnership.