---
id: server-architecture/019
title: Account screens redesign — two panels, and this device's remembered logins
epic: server-architecture
state: done
priority: 2
blocked_by: []
estimate: M
created: 2026-08-26
updated: 2026-08-26
claimed_by: session-2026-08-26-accounts-spec
claimed_at: 2026-08-26T00:00:00.000Z
delivers: []
review_artifact: land-of-lor/docs/handoff/historic/019-account-screens-and-remembered-logins.md
---

## What

Kris recorded a full voice spec of the account screens on 2026-08-26 — this task is that
spec, transcribed, plus the build against it. This is the "account-screens design session"
`status.md` had been carrying as outstanding next-step work since 2026-08-18 (restyle
`signup_flow` / `signin_screen` / `account_screen` / `character_preview`; primitives in
`theme/lor_forms.gd` + `lor_ui.gd`).

Kris's own framing going in: the architecture (`010-accounts-plan.md`, the
`auth_identities` seam, the provider list) is already settled and not being re-litigated
here — this is specifically the UI/UX layer on top of it, described in enough detail to
build directly, with two exceptions he flagged himself: whichever bits stayed genuinely
undecided get a question against this ticket, and the platform sign-in setup steps
(Apple/Google) get written out clearly enough that he can do them himself afterward.

## The spec (Kris's voice memo, transcribed)

**Sign-in methods**, in the order discussed: 1) Apple Game Center (iOS), 2) Google Play
Games (Android), 3) email + password ("the full message... enter email, enter password to
log in"), 4) Steam — his own words: "which I have zero experience with... I don't even
play PC games, but Steam has an equivalent kind of thing... option four is the main
placeholder for now." All four already match `010-accounts-plan.md`'s provider table
exactly (`email`, `google_play`, `game_center`, `steam` — the last two already marked
"speced only" there before this session).

**The signed-in account screen** — two panels, side by side:

- **Authentication panel**: which method this account signs in with, and the identity
  info that method carries (email address; a platform gamertag/alias once linked); the
  device list; rename; attach-email / link-provider actions; add-a-device. **Sign out
  lives here too, deliberately styled small and easy to miss** — "a subtle baby-tuck
  way... the option for them to log out" — not another entry in the main button column.
- **Character panel**: the character's name, and a preview of the character "spinning
  around gently and slowly in 3D".

**Signed-out state**: the two panels disappear. In their place: a button per identity this
*device* remembers, reading **"Log in again as [name]"**. Tapping one:
- On a platform-native login (Game Center / Play Games), resumes automatically — "they
  press that button and they're immediately back to their game centre account."
- On the web, for an email-based login, **requires typing the password again** — "if I
  click that, they should be required to type in their password, because that's the way
  we're going to do that login." (Re-entering the address is what's being skipped, not
  proving you know the password.)

Below the remembered-logins list, on every platform, in the signed-out state: the normal
"enter email, enter password to log in" form, and "create account" (email + password —
**no email verification, no password reset in this version** — already settled the same
way independently in server-architecture/017, unchanged by this task).

**Removing a remembered login**: "some other mechanism [so] it's not ever going to
accidentally be done" — a **long press** on a remembered-login entry removes it from the
device's list. This **never deletes the account itself** — there is no account-deletion
path anywhere in this client, on any platform, and this task doesn't add one.

## What was genuinely ambiguous, and what was assumed instead of asked

None of the open points below reached `epics/PICKUP.md`'s question bar (money /
irreversible / public-facing / reaches outside the repo) — so per that bar, this task
carries **zero open questions**, and each point was assumed, built, and flagged plainly
for correction:

- The "3D spinning" character preview doesn't exist — there is no 3D character model yet
  (`character_preview.gd` already documents the real hexagram-defined model as
  deliberately undesigned). Built a placeholder: the existing 2D seed-tile, animated with
  a gentle sway, swapped for the real thing wherever `character_preview.gd`'s own seam
  does that later.
- How many logins a device remembers (assumed 6, most-recent-first) and what happens when
  a remembered session has actually expired (assumed: drop it and fall back to a full
  re-auth for that same identity, never leave a dead button offering a login that can't
  work).
- Whether the Authentication panel shows one provider or all linked ones (assumed: all of
  them, joined — an account can accumulate more than one over time).

## Definition of done

Built, tested, and documented this session — see
**[`land-of-lor/docs/handoff/historic/019-account-screens-and-remembered-logins.md`](../../land-of-lor/docs/handoff/historic/019-account-screens-and-remembered-logins.md)**
for the full report: the two-panel `account_screen.gd`, the remembered-logins list in
`signin_screen.gd` (quick-resume + long-press-forget), `account_session.gd`'s new
device-local history storage, and the one additive director change (`whoami`'s
`account_info` reply now carries `providers: string[]`). Director suite 170/170 (+10 from
server-architecture/020's Game Center tests, built alongside since both touch the same
`server.ts`/`whoami` code), world suite 116/116, all touched `.gd` UI files parse-checked
clean.

**What's still Kris's to do**: look at the actual two-panel layout (no display in this
container — nobody has seen it render), and see `020-apple-game-center-sign-in.md` for the
platform sign-in setup steps this task's spec asked to have written out.

## Non-goals

- Apple Game Center's and Google Play Games' actual platform setup — server-architecture/011
  (Play Games, already `needs-input` on Kris's Play Console steps) and the new
  server-architecture/020 (Game Center) carry those.
- Steam — stays "speced only" exactly as `010-accounts-plan.md` already had it; no work
  landed on it here, matching Kris's own "placeholder for now" framing.
- Email verification / self-service password reset — server-architecture/017's territory,
  untouched.