You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(ux): PR-P G-29 + G-30 + G-34 — archive empty state, mobile scroll, +3 AI kinds
G-29 — `/sin-slavy` AI archive empty state.
User reported "nikde som nenašiel archiv starych hier". Section
existed (rendered when `pastAiWithTop.length > 0`) but was invisible
when no archive entries existed yet — feature looked missing. Now
the heading + count chip render unconditionally, with an empty-
state card "Archive fills up soon" + 4-locale copy when no past
challenges have expired yet. Players see WHERE past medals will
land before any have arrived.
G-30 — three new AI game kinds (schema only).
Sprint H foundation for renderer + research-seed work. Added:
- `rank-list` — drag 4 items into magnitude order; teaches
"which is bigger" intuition for budget categories
- `estimate-range` — slider with a correct band, finer-grained
than `price-guess`'s discrete options
- `odd-one-out` — pick the item that doesn't fit the group;
cheapest to author, reinforces categorisation
Schemas land in `lib/ai-pipeline/types.ts` + extend the
discriminated union; SeedKind in research.ts adds the three so
schemaForKind narrows + the generator's kindRules table stays
exhaustive (stub system-prompt entries because no research seed
emits these kinds yet — client renderers ship in Sprint H).
G-34 — mobile horizontal scroll for hero / CityScene.
User feedback (screenshot 8:44): the 20-slot row gets cropped on
narrow viewports; on phones the buildings shrink below readable
width. Added overflow-x:auto + min-width:720px on
`.city-skyline-hero-root` and `.city-scene-viewport` for sub-
640 px viewports; desktop unchanged. Touch-action: pan-x
pinch-zoom for natural mobile scrubbing.
Plus G-31 audit straggler — `app/sin-slavy/page.tsx` archive
heading deduped (had a duplicate when archive was non-empty).
Validation:
- pnpm typecheck → 0 errors
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: lib/locales/uk.ts
+3Lines changed: 3 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -325,6 +325,9 @@ const uk: typeof plDict = {
325
325
aiArchiveTitle: "Архів AI-викликів",
326
326
aiArchiveBody:
327
327
"Медалі з кожного минулого AI-виклику — залишаються тут назавжди, навіть після того, як сама гра вичерпала час.",
328
+
aiArchiveEmptyTitle: "Архів скоро заповниться",
329
+
aiArchiveEmptyBody:
330
+
"Перші AI-виклики саме завершують свій цикл — щойно вони вичерпають час, топ-3 медалі залишаться тут назавжди. Зіграй сьогодні, щоб бути першим в архіві.",
328
331
liveMedalNote:
329
332
"Топ-3 на момент завершення гри отримують медаль назавжди. Нижче поточні позиції — оновлюються в реальному часі.",
0 commit comments