Sway team docs

Games dashboard prototype. Internal working document.

This password is a deterrent, not protection. GitHub Pages has no server-side authentication. This page is publicly reachable and its full text reached your browser before this prompt appeared.

Sway — Games dashboard prototype. Evolved from the existing social dashboard. Numbered dots mark every deviation; tap Design notes for the rationale. Mock data is realistic but invented. Only data established as obtainable is shown as real.

Maya's Games
Time played this week
9h 20m
across 14 sessions
1h 20mdaily avg
2h 05mafter 10pm
Satpeak day

Maya can see this. A live indicator shows on her device whenever monitoring is active, and she can read the same summary you can.

When she played

Measured
Mon 55m
Tue 40m
Wed 1h45
Thu 45m
Fri 2h10
Sat 2h35
Sun 1h10
6amnoon6pmmidnight
Session After 10pm

Channels watched

LEARN MORE

What changed, and why

Everything else is inherited from the existing social dashboard on purpose — header, platform selector, centre ring, tab bar, bar rows, purple accent, 12px radii, 24px gutters, the type and spacing scales. A parent moving from the Instagram view to this one should feel no seam.

1
The ring measures time, not share of feed

The social ring answers "what proportion of your feed is untrusted". Gaming has no feed and no proportion — the meaningful quantity is duration. Keeping the ring preserves the screen's signature shape while changing what it counts. The orange arc is late-night play, which is usually more actionable to a parent than the total.

2
Tabs relabelled ACTIVITY / CONTACTS / SAFETY

UNTRUSTED / TRUSTED / COMPARE are all views of one classified-content dataset. Gaming produces three genuinely different datasets, so the tabs divide by subject rather than by verdict. COMPARE was dropped: family comparison of screen time invites exactly the competitive framing the Children's Code warns against under "detrimental use of data".

3
New: session timeline

The single biggest structural difference. Social media is scrolled continuously; games are played in bounded sessions with a start and an end. A percentage cannot express "two hours on Saturday afternoon and forty minutes after midnight on Wednesday" — and the timing is usually what a parent wants to act on. This card has no equivalent in the social layout.

4
New: breakdown within one platform

"Roblox" and "Twitch" are containers, not activities. A one-hour Roblox session may span six experiences; a Twitch session may span four channels with completely different content ratings. Reusing the existing bar-row component keeps it visually familiar while adding a level of hierarchy the social dashboard never needed.

5
Confidence shown on every measured number

Not decoration — a data-integrity requirement. Android reports exact foreground milliseconds; iOS reports only threshold crossings because the reporting extension is sandboxed from the network. "2h 14m" and "over 2 hours" must never render identically. The PlaySession model carries source and confidence columns specifically so the UI can tell them apart.

6
New: contact changes, not a contact list

The differentiated safety signal, and it is deliberately a delta rather than a roster. A new contact whose account is days old is worth a parent's attention; a list of 200 usernames is not. It is also the data-minimising choice — Sway stores counts and change events rather than retaining rosters of other people's children.

7
New: "not available" as a real card type

The most important change on this screen. Gaming platforms have permanent, structural gaps — Roblox exposes no chat to anyone, ever. An empty card reads as broken and erodes trust in everything next to it. A card that states the reason is more useful and more honest. Dashed border and grey fill mark it as a known absence rather than a loading failure.

8
"Who she follows", never "what she watched"

Twitch's API exposes no watch history whatsoever — none of its 149 endpoints. We can see the follow list and classify those channels' content labels. That is a risk profile, not a risk event, and the copy says so. Blurring the two would be the single easiest way to mislead a parent on this screen.

9
Spend is shown as unavailable, not omitted

Spend is a headline gaming worry — 53% of child gamers spend money in games and 42% say it is unclear what they are buying. Twitch exposes no balance or purchase history; Roblox is prohibited. Silently omitting the card would imply there is nothing to worry about. Showing the gap, with what the parent can do instead, is the honest move.

10
New: an error state

The current dashboard has none — dashboardQuery.error goes to PostHog and the screen falls through to the empty state, so a parent sees "no data" when the truth is "we couldn't fetch". With OAuth that gets worse: tokens expire and children revoke access. A stale view presented as current is a safety problem, not a UX one.

11
New: child-visibility banner

Not a nicety. ICO Children's Code Standard 11 requires "a clear and obvious sign for the child … which lets them know when monitoring or tracking is active", at every age band. The same decision satisfies Google Play's persistent-notification rule for monitoring apps and Apple's bar on "surreptitiously" building a profile. Showing the parent that the child can see it also sets an honest expectation between them.

Data honesty. Everything rendered as real is established as obtainable in docs/games/01-twitch-data-capabilities.md and 01-roblox-data-capabilities.md. Anything speculative carries a dashed Speculative badge. Roblox playtime is device-measured, not from Roblox — console and PC play is invisible and the card says so.