Ultimate · step people spec

People of a step

Stepo already answers who was with a journey. This board answers the per-step question, and it takes one stance: everyone can remember who was there, and only the owner can inspect how they showed up. There is one sheet now, one room with the same sections and the same person rows for owner and visitor. Privacy removes ink, never the room: the owner sees act glyphs and timing layered on the rows, a visitor sees the same rows without them. Three layers, each answering a different question. A memory anyone can revisit, never a leaderboard.

The presence line counts 5 window step-withs from your visible set, and it is tappable for everyone now. The interaction counts stay 6 hearts, 2 comments, 1 share. The visible After section reconciles the book with the public heart count: five were here, six hearts, both honest and now both visible.

01 The entry point, now everyone's

A past trails step, its window long closed. The interaction bar keeps its three public counts, and beneath it sits the presence line: faces, a sentence, a chevron. It is the same line for the owner and for a visitor now, and it is tappable for both. It renders only when the viewer's visible set of window step-withs is non-empty.

JourneyLearn to run trails
Chau
posted 5 days ago
Ran the whole loop without walking. Five weeks ago the first climb wrecked me.
6 2 1
Maya, Linh and 3 others were here.

One door, every eligible viewer

Tapping a count number still does nothing. The presence line is the way in, and it is no longer owner-only. Every eligible viewer's tap opens the same guest book, the one sheet behind it. The line renders only when the viewer's visible set is non-empty, so a quiet step simply stays quiet.

The line counts window step-withs from the viewer's visible set, the same set the "While it was on air" section is built from, so the line and the sheet always agree.

  • Three overlapping 22px faces, then "and 3 others were here." Five window people, so faces plus three.
  • The line reads 5 (window presence), the hearts read 6, and the sheet's visible After section shows where the sixth heart went.
  • The chevron marks it tappable, now for anyone who can see the step.

02 One sheet, two densities

The same guest book, rendered for two viewers. Same title, same context, same two sections, the same person rows in the same room. While it was on air, then, now public, After it aired. A visitor reads plain face-and-name rows, shuffled. The owner reads the identical layout with the audit ink added: act glyphs and 1h in captions, in chronological order. One interface; the difference is ink, not architecture.

A visitor sees
People who were here
Learn to run trails
While it was on air · 5
Quyên Lê
Maya Okonkwo
Hana Watanabe
Idris Kane
Linh Trần
Ray Delgado
Priya Nair
The owner sees

Same room, ink removed

One interface. The two sheets are the same composition, top to bottom: same title, same context, same While it was on air and After it aired sections, the same seven rows. Privacy removes ink, never the room. The visitor loses the glyphs, the times, and the chronological order; the room is unchanged.

The After section is public now. Late comments were already publicly attributed, so hiding late hearters protected little while making the visitor's book disagree with the heart count. The visible After section reconciles the two: five were here, six hearts, both honest and now both visible. Late rows are memory, never step-with.

  • Visitor rows are shuffled within each section: deterministic so pages never jump, unreadable as arrival order. The owner's rows are chronological.
  • The owner's glyphs reconcile with the counts: 6 hearts (Maya, Linh, Quyên, Hana, Priya, Ray), 2 comments (Linh, Idris), 1 share (Quyên).
  • Every row taps through to that person's permitted profile, in either density.

03 Ownership is a module

The law behind the two densities, and its application here. There is no owner-only screen anymore. The owner and the visitor open the same sheet; ownership adds a private module of ink on the shared rows, never a different room.

One feature, one interface

One viewer-aware contract. A single endpoint per surface returns the sheet; the owner-only fields (act flags, timestamps, module data) are simply null for visitors. One contract, one widget, density graded by viewer.

04 While it's on air

The live step, 6 hours left. The presence line reads present tense, and it has two dresses: the owner's "stepping with you" and a visitor's "stepping with this." Behind either tap the same sheet is on, titled People stepping with this, growing as people step with. It shows the one open section, While it's on air, and no After section yet: the window has not closed.

Owner sees
Maya and 2 others are stepping with you.
A visitor sees
Maya and 2 others are stepping with this.
People stepping with this
Learn to run trails · On air · 6h left
While it's on air · 3
Quyên Lê
Maya Okonkwo
Linh Trần

Tense carries the window, for everyone

Live, the line reads "are stepping with"; once the 24 hours close it becomes "were here." The window everyone knows from the feed does the grammar, and only the trailing word ("you" for the owner, "this" for a visitor) differs.

The live sheet is the party made visible to the whole audience. Watching it fill is now everyone's delight, not just the owner's.

  • The context sub-line carries the tangerine On air chip, the same live treatment as the feed.
  • The section grows as people step with, three rows so far, shuffled: Quyên, Maya, Linh.
  • No target, no quota, no remaining count. The 24h window is the only clock.

05 Three layers, three questions

The model in one table. Each layer answers a different question about the same person, and each has its own audience. Two layers are public; only the third can audit.

Profile visitor lists
"Linh supported Maya." The aggregate relationship.
Any eligible viewer
Step guest book
"Linh was there for this step, and Priya came by after." The shared moment, including its public After memory.
Any eligible viewer
Owner's audit ink
"Linh commented three hours in and hearted later." The same rows, with the audit ink: which act, how long in.
Owner only
This separation is what prevents public auditing without deleting the fun, the discovery, and the historical memory. Who was there is everyone's to remember; how they showed up is the owner's to inspect.

06 What the shared book never shows

A visitor's rows are deliberately flat. Everything a social app would reach for here is cut from them, because each would re-rank a crowd the rows exist to equalize, or expose a third party who never asked to be audited. Late support, by contrast, is not hidden: it is public in its own After section, never counted or labeled as step-with.

Same visible set, both directions. Step and journey must be visible to the viewer. Blocked either direction, private-to-strangers, and under-18 participants are excluded from stranger-facing lists. The line number, the facepile and the sheet all compute from that one visible set, so two viewers may honestly see different counts.

Everyone can remember who was there. Only the owner can inspect how they showed up.

Scope & status. This board specs the per-step presence line and the one guest-book sheet behind it: a shared room with a While it was on air section and a public After it aired section, graded by viewer (owner ink is act glyphs and timing on the same rows). The journey People page (journey-people.html, who became part of a whole journey, with roles) is the sibling answer to "who was with this". The three public counts reconcile with the step conversation on step.html: 6 hearts, 2 comments, 1 share, of which five were window step-withs and the sixth heart is the public After row. Source of truth: DESIGN.md "The step guest book opens (PO ruling, 2026-07-15)" and its same-day refinement "One interface: ownership is a module."