Show someone — redesigned
Four kinds of card, one shape. The screen a visitor opens standing in front of a
driver, a pharmacist or a server — signed out, offline, one-handed, in under three seconds.
Both modes. Nothing here is implemented.
Reviewed against the built screen. Links taegeuk.css
and redeclares nothing.
What this replaces
| The built screen | Why it fails at the moment it is for | What replaces it |
| Two flag-red panels side by side — What you cannot eat (empty, unfilled) and
Emergency (live, life-safety) |
Red is the loudest thing the palette has and it is spent on a prompt that has nothing behind
it yet. The two read as peers. Nothing on the screen is louder than the least useful tile on it. |
A 3px left edge carries kind. Red fill is spent on exactly one surface, and it
is Emergency. |
| A + Add your hotel tile sitting in the grid |
An empty slot shaped like a card. The grid is meant to be scannable at arm's length; a hole in
it is read as a card that failed to load. |
Missing facts leave the grid entirely and become Make a card rows underneath it. |
| A second, unrelated section — Cue cards on this trip — with its own search, its own
list and its own empty state |
Two lists of the same object, in two registers, with two ways to add. It is the split that
produced "What are these cards with + on?", and labelling the halves treated the symptom. |
One grid. One search. A kept cue card is a card like any other and sits in the grid
beside the hotel. |
| A four-line explanatory paragraph at the bottom |
Copy doing a layout's job. Nobody reads it, and it is at the end — after the screen has already
confused them. |
The provenance is a one-line mono footer on each tile: where this card came from, on the
card itself. |
| Cards bookmarked in Korea or Places do not appear at all |
A user who saved 광장시장 in Places has already told us they intend to go there. Making them
search a 1,340-sentence phrasebook for it is asking twice. |
A saved place that carries Korean is a card here, marked SAVED IN PLACES. |
The model — four origins, one object
| # | Origin | Example | Korean on the tile? | Footer |
| 1 | System — ours, always present, needs no trip and no account |
Emergency | n/a — it is not a tile | PINNED |
| 2 | Built from a fact you gave us |
Your hotel → an address card. Your allergy → a dietary card. |
Yes for the address — it is a 도로명주소 you copied out of Naver, the Korean party's own words.
No for the dietary card, and not for the usual provenance reason: it is a medical fact and
a tile is glanceable over a shoulder. |
FROM YOUR HOTEL |
| 3 | Kept from the phrasebook, or bookmarked in Korea / Places |
여기로 가주세요 with 효제분식 filled in · 광장시장 |
Yes — reviewed corpus, or a venue's registered name |
SAVED IN PLACES · KEPT FROM 1,340 |
| 4 | You wrote it — typed in English, machine-translated |
"My daughter is lost. She is wearing a yellow coat." |
Yes, in a different register: dashed edge, NOT
CHECKED, Korean at the smaller step and never at full contrast |
YOU WROTE THIS |
🚨 The one rule this changes, deliberately. The built screen shows no Korean
at all on a machine-produced tile (koreanPreview is null), because previewing
unreviewed Korean beside reviewed Korean puts the two in one visual register — PRD §8.3, and it is
right. But the consequence is a grid of English-only tiles, and a card with no Korean on it cannot
be recognised at arm's length, which is the entire job of this grid.
So the two are put in different registers instead of one being hidden: solid edge and full
contrast for Korean somebody is accountable for, dashed edge, reduced contrast and a
NOT CHECKED pill for machine output. That is
the vocabulary taegeuk.css already promoted for .tag.u — an honest gap
drawn as a gap. The dietary card keeps its blank face regardless, for the
second reason, which is medical and not about provenance at all.
Dark · 375 × 812
Emergency
POLICE · FIRE · AMBULANCE · NO ACCOUNT, NO SIGNAL
119
1 · Show someone — a live trip
Emergency is pinned, and that is the biggest single change. It is the one
card that may have to be found while panicking, in the dark, by somebody who has never opened this
screen. A grid reflows every time a card is added — so the tile that must never move is taken out
of the grid and given a fixed place above the tab bar. It is also the only red fill left on
the screen, which is what makes it the loudest thing here.
Nothing on this screen awaits a request. Every tile reads Drift. No spinner,
no session, no network — the chip at the top says so once, so the subline does not have to.
Emergency
POLICE · FIRE · AMBULANCE · NO ACCOUNT, NO SIGNAL
119
2 · First run — nothing kept yet
Emergency is in the same place on an empty screen as on a full one. That
is the point of pinning it: a visitor with no trip, no account and no data still has the one card
that cannot wait, and it is where it will be for the rest of the trip.
Emergency
POLICE · FIRE · AMBULANCE · NO ACCOUNT, NO SIGNAL
119
3 · Search — one field, three labelled zones
Searching does not replace the grid, it replaces the page. Back returns to
exactly the scroll position the user left, with the new card already in the grid.
4 · The handover surface — reviewed
Say it out loud is a shipped clip, not a request. The sentence is corpus,
so the audio is in the bundle — no network, no synthesis, nothing to pay for. A card the user WROTE
is the other case; see frame 5.
Write your own card
Type it in English. Keep it to one sentence — it is going to be read by a stranger at arm's
length.
My daughter is lost.
She is wearing a yellow coat.
What the card will say
NOT CHECKED
Yours
제 딸이 없어졌어요. 노란색 코트를 입고 있어요.
My daughter is lost. She is wearing a yellow coat.
MACHINE-TRANSLATED · NOT CHECKED BY A KOREAN SPEAKER
We are not going to pretend this is checked. A machine wrote
the Korean. It will be understood far more often than not, and it will occasionally be wrong
in a way neither of you can see — so the card says so, on its face, to both of you.
Keep this card
Cancel
5 · Write your own — and the card it produces
The card is shown BEFORE it is kept. The user is agreeing to a specific
Korean string, with the warning attached to it, rather than to a promise that one will appear. This
is the sheet the built screen opens with no preview at all.
Voice on a card you wrote is synthesised per user and never pooled. A place
name and a road address are public facts and are cut once, system-wide; a sentence about your
daughter is yours, and it does not go in a table every other user's request reads from.
Light · 375 × 812
Emergency
POLICE · FIRE · AMBULANCE · NO ACCOUNT, NO SIGNAL
119
1 · Show someone — a live trip
The 3px edge survives light mode where a red fill would not: flag red at
full bleed on a white page is a fire alarm, and it is why the built screen's two red panels read
as an error state rather than as content.
Emergency
POLICE · FIRE · AMBULANCE · NO ACCOUNT, NO SIGNAL
119
2 · First run — nothing kept yet
Emergency
POLICE · FIRE · AMBULANCE · NO ACCOUNT, NO SIGNAL
119
3 · Search — one field, three labelled zones
4 · The handover surface — reviewed
Light mode is the one that matters here. This screen is held up in daylight
as often as in a bar, and a 40px Hangul on white at full contrast is the most legible thing the
product can produce at two metres.
Write your own card
Type it in English. Keep it to one sentence — it is going to be read by a stranger at arm's
length.
My daughter is lost.
She is wearing a yellow coat.
What the card will say
NOT CHECKED
Yours
제 딸이 없어졌어요. 노란색 코트를 입고 있어요.
My daughter is lost. She is wearing a yellow coat.
MACHINE-TRANSLATED · NOT CHECKED BY A KOREAN SPEAKER
We are not going to pretend this is checked. A machine wrote
the Korean. It will be understood far more often than not, and it will occasionally be wrong
in a way neither of you can see — so the card says so, on its face, to both of you.
Keep this card
Cancel
5 · Write your own — and the card it produces
If this is approved
| Change | Where | Size |
| One grid instead of a grid plus a separate cue-card band |
show_gallery_screen.dart | Rewrite — the two halves merge into one list |
Saved cue cards, saved places and fact cards become one HandyCard list |
handy_card.dart · buildHandyCards |
Additive — it already emits addresses from saved_addresses and from trip items;
it gains the trip's cue-card rows |
| Emergency leaves the grid and becomes a pinned strip |
show_gallery_screen.dart | Small — the route already exists |
| The tile shows machine Korean in a dashed register |
handy_card.dart · koreanPreview |
🚨 A rule change. handy_cards_test.dart asserts
the opposite today and would be rewritten deliberately, not deleted |
| Chips filter by what the reader does | new · local state | Small |
| The write sheet previews the card before keeping it |
write_cue_card_sheet.dart |
Needs the translation round-trip before the keep, not after |
Not decided here. Whether the hero slot picks the stay by date or by "most recently shown";
whether the chips persist between visits; and whether a card kept from Places should be removable
from this screen without unsaving the place. All three are one line of behaviour and none of them
changes the shape above.