Design study · internal

Satellite: borrowing the pureness

A read of Satellite as visual craft rather than as a feature set. What actually produces the calm, translated into moves Godspeed can make, and a clear line under the one place where its purity is the wrong purity for us. Motion is inferred from stills; every claim below is legible in a static frame.

Source
Nine screens, captured 8 Aug 2026
Product
Satellite, a consumer capture-everything agent
Lens
Design only, functionality secondary
Verdict
Take the calm, reject the feed

Ledger

TakeUnder-fill the screen; air does the sectioning, not rulesfeed, quotes
TakeOne anchored input that morphs between states in placeidle, listening
TakeThe user is a bubble; the agent is the paperquote detail
TakeTyped cards with one fixed anatomyfeed
TakeA monochrome field with one earned exceptionfeed, movie
TakeDetail lifts over a dimmed ghost of the pagequote, movie
AvoidEmpty memory rendered as a grid of labelled blanksaccount
AvoidMachine tokens reaching the surfacefeed, movie
RejectThe feed that never endsfeed, share
NoteIdentity lives in one playful object; settings stay stocksettings
Take

The air is the product

Satellite Quotes view: a single quote card in the top third of the screen, everything below empty paper
Satellite timeline: a photo card, a reminder card, and a movie card spaced far apart on an otherwise empty screen

quotes / feed One card in the top third, then nothing. The timeline sets three objects a screen-height apart. Note what is absent: not a single horizontal rule anywhere on either screen.

Start with what the pureness actually is, because it is easy to misattribute. It is not the palette and not the typeface, both of which are stock iOS. It is a density decision: Satellite refuses to fill the viewport. One object sits in the top third and the rest is paper. Where most apps read emptiness as failure and pack the screen to look capable, Satellite spends the emptiness deliberately, and the effect is composure. The app looks like it has already done the thinking.

Under-filling the screen reads as confidence. Filling it reads as anxiety about looking empty.

The second half of the same decision: nothing on these screens is separated by a line. June 12 is heavy and left. 09:42 is small, grey, and right. Groups separate because the gap between them is larger than the gap within them. Hierarchy is carried entirely by weight, colour value, and distance, which is what lets the screen hold three different object types without feeling arranged.

Both halves transfer directly. The question page should under-fill its viewport on purpose, one question and generous margins, and Settled, Open, and Set aside can separate by weight and air instead of headed, ruled sections. The Sky teardown guessed at “depth without lines”; Satellite is a shipping app doing it.

Take

One anchored input, morphing in place

Idle input: a plus button, a Share with Satellite field, and a dark microphone pill
Recording: the same footprint now one black pill reading Listening, with a red waveform and a red stop control

idle / listening Same position, same height, same corner language. Idle: plus, prompt, mic. Recording: one black pill, live waveform, red stop. A state change of one element, not a swap of two.

There is exactly one place to put anything into this app. Text, voice, photos, location, all enter through the same bar, and the bar is the only persistent chrome on the screen. That is the product thesis expressed as layout: one mouth, everything else is output.

The craft is in the transition. Because idle and listening occupy the identical footprint, the change can read as one object changing state rather than a control being replaced. Even in stills you can tell nothing jumps. And notice the colour discipline: red exists nowhere in the app except the live waveform and the stop control, while recording. Colour marks the one interruptible action currently in flight, and that is its entire budget.

For Godspeed the read-across is the reply affordance. Idle, composing, speaking, thinking, interrupting should be states of a single anchored element that morphs, never a row of buttons that appears and disappears. This is precisely the interruptible, in-place motion the first-principles polish work keeps asking for, at its minimum viable size. The Esc-interrupts-the-turn behaviour we already committed to belongs to this bar.

Take

The user is a bubble; the agent is the paper

Thread view: the user's message is a dark rounded bubble on the right; the agent's reply is plain black text set directly on the background, no bubble
quote detail “Just a quote i want to keep” is a dark object on the right. The reply beneath it is not in a bubble at all: it is typeset directly on the paper, full width, like the body of a document.

This is the easiest detail to miss and the most important one here. Satellite's threads are not symmetric chat. Your words arrive as a discrete dark object, an artifact you produced. The agent's words are not in a container of any kind: they are set directly on the background, in the same type and colour as the rest of the interface. The agent does not appear as a second speaker in a transcript. The agent is the page itself, and you occasionally hand things to it.

One voice is an object on the page. The other voice is the page. That asymmetry is the whole relationship, drawn in CSS.

This is Godspeed's own doctrine, found shipping in someone else's app. The page-of-cells already works this way: model text is the substrate, and the standing rule says we are never a chat. What Satellite adds is the courage of the second half, that the user's contributions should be visibly objects, distinct in material from the page they land on. Your reply is a thing you gave the page; what the page says back is just the page saying it. If we ever catch ourselves rendering model output in a bubble, an avatar, or any speaker frame, we have broken character.

Take

Typed cards, one fixed anatomy

Feed with a photo card, a reminder card with leading circle checkbox and trailing chip, and a movie card with leading poster and trailing chips
feed A photo, a reminder, a film. Three types, one grammar: identity on the left, title then quiet meta in the middle, status chip in the trailing corner.

Everything captured becomes a typed object, and every type is drawn from the same skeleton. The reminder: circle checkbox left, title, 1 mo ago · 17:00 in grey beneath, chip on the right. The film: poster left, title, year beneath, Watched chip in the corner. The photo: just its media, in the same rounded container at the same width. You learn the anatomy once and then read any card in the stream at a glance, because the eye always knows where the title lives and where the status lives.

This is the discipline a page of cells needs and the thing sixteen bespoke layouts would destroy. A decision-object cell should have a fixed skeleton: what it is on the left, what it says in the middle, where it stands on the right. Content varies per cell; the skeleton never does. The cheapness of each card is what lets the whole page stay calm.

Take

A monochrome field with one earned exception

The Obsession film card: near-black, poster leading, its lower edge dissolving in a gradient over the page text beneath
movie The one dark object in the app. Artwork earns the inversion, and the card's lower edge dissolves into the page rather than ending in a line, so even the exception stays soft.

The field is strictly monochrome: black ink, grey meta, off-white cards on off-white paper, shadows barely darker than the ground. Against that, colour is rationed like money. Blue is identity (the avatar dot, links). Green means an option is on. Red means recording, and exists only while it is true. And exactly one card type is allowed to invert to near-black: rich media, where the artwork carries the card. Because the field is so quiet, that single dark card lands with the force most apps try to buy with an accent colour on every button.

The transferable rule is the rationing, not the hues. If one visual treatment is reserved for one privileged state, the obvious candidate in Godspeed is the concluded decision: the only object that has earned different material, visible from across the room, while everything still in flight stays in the calm monochrome. The tempting mistake is to colour dispositions or categories. That spends the entire budget on taxonomy and buys back the noise everything else here avoids.

Take

Detail lifts over a dimmed ghost of the page

Quote card raised and sharp, the thread behind it dimmed and blurred to a ghost, with only two floating circular controls
Film card pinned sharp over dimmed page text showing through above and below it

quote / movie The focused object is sharp and elevated; the page it came from stays visible behind it, dimmed to a ghost. Chrome is two floating circles, a back chevron and an ellipsis. No bars, no panel, no new surface.

Opening an object does not navigate. The card comes forward, sharp and slightly raised, and the surrounding page falls back: still legibly there, its text ghosted under and around the card, close enough to read if you squint. You never leave the page; one thing on it comes toward you. Depth is drawn with light, blur, and value, and the only chrome the mode adds is two small floating circles.

This is the strongest available answer to our open two-pane question, and it agrees with the floating-overlay rule already on file (translucent and blurred, never a solid panel). Drilling into a cell should lift the cell over the page, with the page dimmed but present behind it, so the reader never loses the sense that this node belongs to a larger whole. No second column, no pushed screen, no new header. The Sky review guessed “node-local drill-down is the likelier answer than a permanent second pane”; this is what that looks like shipped.

Avoid

Empty memory drawn as a grid of labelled blanks

Account screen: Preferred name, Full legal name, Birthday, Nationality, each field reading Not learned yet
account Four fields, four times Not learned yet. A patient idea rendered as a broken form.

The idea is genuinely good: the agent fills in who you are as it learns, so your profile is a record of acquaintance rather than a form you filled. But the rendering shows the schema instead of the relationship. Four stacked cells all reading Not learned yet is a database with its labels showing through, and on first run, when every field is blank, the screen the new user meets is a wall of things the product does not know. It is the one screen in the set that reads as unfinished rather than as calm.

Godspeed will face exactly this as it accrues memory about a person and their decisions. The rule from the failure: never lay out the empty slots. Render a fact once it exists; express absence as one quiet line, an invitation, not a grid of placeholders. An empty state must look chosen. Blankness with labels looks like debt.

Avoid

Machine tokens reaching the surface

Reminder card whose trailing chip reads PT10M
Showtimes answer ending with a parenthetical: VO equals original version, VOST equals subtitled

feed / movie The reminder chip reads PT10M, a raw ISO-8601 duration where a person needed “10 min”. The showtimes reply needs a parenthetical to decode its own abbreviations.

The two cracks in an otherwise pure surface, and both are the same crack: the machine's internal representation leaking through. PT10M is how software stores ten minutes, shipped to a chip a human is meant to read. (VO = original version, VOST = subtitled) is the model glossing jargon it chose to emit instead of translating before speaking. Each is tiny. Each instantly punctures the spell, because for one second you are looking at the database instead of the product.

For a product that is mostly model-generated text landing on a quiet page, this is a standing hazard, and it is cheap to gate: nothing raw from the schema or the model's scaffolding renders. No duration codes, no internal identifiers, no field names, no acronym that then needs its own footnote. The test is simple: if a value requires a parenthetical to be understood, it was the wrong value to render.

Reject

The feed that never ends

The timeline: dated entries scrolling on without any terminal state
The iOS share sheet feeding Satellite: photos, a live map card reading Searching nearby, and a Share with Satellite field

feed / share Everything, from everywhere, into one stream, forever. The capture surface is genuinely lovely, and note the map card already reading Searching nearby… at capture time: understanding begins before filing. It all still lands in a list that only grows.

Here is the line to draw, and the reason this review cannot be a straight lift. Satellite's organising metaphor is a timeline that accretes. Things are thrown in, understood, filed, and scroll away; there is no terminal state anywhere in the app, nothing concludes, and for a capture companion that is correct. An inbox should be endless.

Satellite's calm is the calm of an inbox that never ends. Godspeed's calm has to be the calm of a page that is finished.

Godspeed's soul is the opposite shape. A decision concludes: the page settles, the question closes, serenity is the product. An accreting feed cannot express an ending, and an ending is the one thing we must express above all else. So the borrowing has a sharp boundary. Findings 1 through 6, the density, the morphing bar, the paper asymmetry, the card anatomy, the rationed colour, the lifted detail, all transfer cleanly. The container they sit in, the stream that never resolves, must not. If a Godspeed screen ever scrolls forever, we have shipped the wrong product in a beautiful coat.

Note

Identity lives in one playful object; settings stay stock

Settings: a completely standard iOS grouped list, default green toggles, with rows named Debug Orbit, Disable satellite motion, and 3D satellite
settings Aggressively ordinary chrome, until you read the rows: Debug Orbit, Disable satellite motion, 3D satellite. There is an animated satellite living somewhere in this app, and it has an orbit.

Two allocation decisions are visible in this one boring screen. First: Settings is the platform's stock grouped list, untouched. All the craft in this app is spent on the two surfaces that are the product, the stream and the input bar, and none on the surface nobody enjoys. The restraint that leaves the feed empty is the same restraint that leaves Settings alone.

Second, and easy to miss: the row names reveal that the app's entire reserve of whimsy is spent on a single object, a 3D satellite that apparently orbits the interface, important enough to earn three settings rows. Character is not sprinkled over the UI as mascots and easter eggs; it is concentrated in one animated thing, and everything else stays plain, which is why the one thing can afford to be playful without costing any calm.

Godspeed already has its candidate: the italic-brand ghost. One object carries the personality; the page around it stays paper. And when we polish, the springs and materials go to the question page and the moment of conclusion, while the preferences pane stays correct, stock, and forgettable. Spreading either budget evenly, charm or craft, dilutes the places that matter.

What this changes

  1. Under-fill the question page on purpose. One question, generous margins, most of the viewport left as paper. Treat a packed screen as a bug, not a missing feature.
  2. Section by weight and air, never by rules. Settled, Open, and Set aside separate by type weight, colour value, and spacing. No headed boxes, no dividers. Confirmed shipping, no longer a guess.
  3. Make the reply affordance one anchored element that morphs. Idle, composing, speaking, thinking, interrupting are states of a single bar in a fixed footprint. Esc interrupts. Nothing appears or disappears around it.
  4. Keep the paper asymmetry absolute. Model text is the page; user contributions are objects on it. No bubble, avatar, or speaker frame around model output, ever.
  5. Fix one anatomy for all cells. Identity left, statement middle, standing right. Content varies; the skeleton does not.
  6. Reserve one material for the concluded decision and ration everything else. Monochrome for all in-flight work, one accent for the single live action, and never colour dispositions or categories.
  7. Open cells by lifting, not navigating. The cell comes forward; the page dims to a legible ghost behind it; added chrome is at most two floating controls. This closes the two-pane question.
  8. Never render empty memory as labelled blanks. Facts appear once learned; absence is one quiet invitation, not a grid of Not learned yet.
  9. Gate machine tokens out of the surface. No duration codes, ids, or self-glossing acronyms. A value needing a parenthetical is the wrong value.
  10. Refuse the endless scroll. Take the cards, the bar, and the air; leave the feed. Any Godspeed surface that cannot conclude is the wrong surface.