Skip to content

Last Seen — What Is It

What "last seen" is — and the two events that drive it

A timestamp showing when Bob was last active on WhatsApp. Generated from two system events: app open and app close.


What Alice sees#

When Alice opens a chat with Bob, she sees one of two things at the top of the screen:

Online                        ← Bob has WhatsApp open right now
Last seen today at 9:42am     ← Bob last had WhatsApp open at 9:42am

"Online" means Bob's WebSocket is live at this moment. "Last seen" means it isn't — and this is when it last was.


The two events#

Last seen is driven by exactly two events in the system:

Event 1 — App opens

Bob opens WhatsApp. The app establishes a WebSocket connection with the WS server. The moment that connection is live, Bob is considered online.

Bob opens WhatsApp
→ WebSocket established
→ Redis registry: SET ws:bob → ws_server_3
→ Bob's status: ONLINE
→ Alice sees: "Online"

Event 2 — App closes (or connection drops)

Bob closes WhatsApp — or his phone loses signal, locks, or the OS kills the app. The WebSocket connection breaks.

The WS server detects the disconnection — either via a graceful TCP close or a heartbeat timeout — and records the timestamp:

Bob closes WhatsApp
→ WebSocket disconnects
→ WS server detects: connection for bob gone
→ Records: last_seen[bob] = now()
→ Redis registry: DEL ws:bob
→ Bob's status: OFFLINE
→ Alice sees: "Last seen today at 9:42am"

What drives the timestamp — close, not open#

The last seen timestamp is always the disconnect time, not the connect time.

If Bob opened WhatsApp at 9:30am and closed it at 9:42am, last seen shows 9:42am. Alice knows Bob was active until 9:42am — not when he first opened the app. The closing moment is what matters.


Why "online" and "last seen" are separate states#

They feel like one feature but they're two distinct states:

ONLINE      → WebSocket is live right now
             → updated in real time as Bob uses the app
             → disappears the moment Bob closes the app

LAST SEEN   → timestamp of the most recent disconnect
             → persists after Bob goes offline
             → Alice can see it even hours or days later

"Online" is ephemeral — it exists only while the connection is live. "Last seen" is durable — it's stored and served on demand.