Channel box v2 — rebuilt after reading the source

The C treatment you picked, corrected. Two things changed because the code said so, not because I preferred it: the Messages tile now shows real arrivals whatever the gate says, and the single verdict is replaced by one line per surface, because a channel has up to four independently gated surfaces and one word was silently lying about three of them.

The lie that is now fixed. Every earlier mockup drew Instagram's Messages tile as 0, "because you have not switched DMs on". Receiving is ungated — inbound DMs are stored regardless. The count is real; only the answering is off. So Instagram reads 34 messages in, none answered, which is a completely different and much more useful fact.

The nine gates, and the three that reach the Dashboard

You asked exactly which. These are the keys of the ChannelGates interface. Exposed means the Home payload carries it today — I said "two" earlier, which was wrong; it is three.

whatsapp — reply to messages · off / canary / live, plus an allowlist of numbersexposed
instagram:comments — reply to commentsexposed
instagram:comments:moderation — hide or delete bad comments · defaults to shadowexposed
instagram:dms — answer DMs · ships off, send arm built darknot exposed
instagram:comment_to_dm — open a DM from a comment · ships offnot exposed
facebook:comments — reply to comments · ships shadownot exposed
facebook:comments:moderation — hide or delete · ships shadownot exposed
facebook:dms — answer DMs · no pipeline exists at allnot exposed
facebook:comment_to_dm — open a DM from a comment · dark, the token has no messaging scopenot exposed

The cards

A lead line for reachability, which genuinely is one fact. Then the counts. Then one row per surface the channel actually has — WhatsApp has no comments, so it has no comment rows.

Instagram@silveroakproperties

Receiving. Last thing arrived 4 minutes ago.

Comments
116
Highest in two weeks
Messages
34
None of them answered
Replies to commentsLive
Hides bad commentsLive
Answers messagesOff
Opens a DM from a commentOff
Silver Oak Properties

Receiving. Last thing arrived 2 hours ago.

Comments
12
Drifting down all fortnight
Messages
Messenger is not wired up
Replies to commentsDrafting only
Hides bad commentsDrafting only
Answers messagesNot built
Opens a DM from a commentNot built
Facebook is behind Instagram on two surfaces
WhatsApp+971 4 512 8840

Switched off by Meta. Nothing has arrived for 3 days, and nothing can be sent. You will not be alerted again.

Messages
0
Flat since Meta cut the number off
Answers messagesA named few only
Quality ratingHigh
Sent today, of the daily limit0 of 1,000
Connect another channelWeb chat and Telegram are supported and not set up yet.

The real gap: Facebook is not Instagram's equal, and it should be

Facebook has a full, live comment pipelinefb-comment.service.ts, an admin controller, standby handling, and four of the nine gates. And it is invisible to this screen entirely, for four separate reasons, none of which is a design choice:
· WEBHOOK_SOURCE = { whatsapp, instagram } — no Facebook key, so no webhook tracking, no silence detection and no mute for Facebook.
· HomeToday.messages has WhatsApp and Instagram only — no Facebook counts.
· HomeChannel is a union of two — no Facebook card can exist.
· errors24h is keyed off the same webhook map — no Facebook errors.

Everything drawn on the Facebook card above is a promise the backend cannot keep today. Closing it is four small additions in home.service.ts and home-api.ts, and it is the change I would make first — it is the difference between a channel being live and a channel being watchable.