Best experienced on desktop — scroll animations are reduced on mobile.

An idea. A problem.
A team of three.

Day one.

180 days.
One commit at a time.

  1. Day 1 First commit. A shared doc. No product yet.
  2. Day 14 First user signs up. A friend, but still.
  3. Day 60 1,000 users. Word of mouth. No marketing spend.
  4. Day 120 First enterprise customer. First real contract.

By the numbers.

50,000 Monthly Active Users
47 Countries
12 Enterprise Customers
180 Days to Series A

The feature that changed everything.

// Real-time collab — the feature that
// drove 10× retention in week 9.

function syncCursor(editor, socket) {
  editor.on('cursorActivity', () => {
    socket.emit('cursor', {
      user:     session.id,
      position: editor.getCursor(),
      color:    palette[session.index],
    });
  });

  socket.on('cursor', ({ user, position, color }) => {
    if (user === session.id) return;
    drawRemoteCursor(position, color);
  });
}

It shipped.

50,000 customers. 47 countries.

Three people. One document. 180 days.