Kreska's small moments: splash, loading, thinking, empty Inbox, offline, no results, pull to refresh, goal, toast
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- react, typescript
- Domain
- accessibility, frontend
Research direction
Start with app/apps/web/src/ui/EmptyState.tsx, public/offline.html, and the loading sites identified in the issue; first read the linked design guide and check whether #339 and #350 have landed. Add the specified mascot moments behind the Appearance switch, preserving text and reduced-motion behavior, and avoid error states. Update the named UI tests and compare the running app with the supplied renders across themes, screen sizes, and interactions.
Written by the indexing model from the issue text.
Description
Part of #336 (F-026, founder direction 2026-10-07). Design guide: docs/design/final (§3 kreska logo agent icon and mascot; until #337 merges, read the pinned copy). Interactive boards (light/dark toggle, notes): design canvas, page "Prostota".
Outcome
Waiting, empty and success moments feel friendly without adding noise.
Final design

Acceptance criteria
- AC-1. Each moment matches its render: the splash, project loading (dots in the eyes), "agent is thinking" with Stop, empty Inbox (Done), the offline banner (Asleep), no search results (Looking), pull to refresh (Surprised), goal reached (Celebrate, once per goal), and the wink in the toast after a task is closed.
- AC-2. Settings → Appearance turns every moment off, leaving the plain text states.
- AC-3. With reduced motion every moment is a static frame, and its meaning is in the text too.
- AC-4. The mascot never appears in errors, security, payments, apologies or deletion, never covers content and never repeats to nag.
What changes in the code today
From a read of main at 3c553b79; the owner confirms before starting. Paths are under app/apps/web/src, public/ is app/apps/web/public, root scripts/ and tests/ are the repository's, and UI tests are in app/tests/ui.
Change
ui/EmptyState.tsx(icons only) for empty Inbox and no results; ~58 Spinner/"Loading…" sites keep their text and can show the loading face at screen level;public/offline.html.
New
- Splash, project loading, thinking with Stop, empty Inbox, in-app offline banner, no results, pull to refresh, goal reached (once), task-closed toast wink; all behind the Appearance switch; none in
ui/ErrorState.tsx.
Tests to rewrite
- New tests for the switch and reduced motion;
test_notifications.pyempty state;test_search.pyempty results.
Depends on
#339, #350 (tokens and shared components first; independent parts can start earlier).
Related: #323 (loading text that says what loads; the text stays with the face), #155 (motion and agent presence), #20 (the PWA's splash and offline states).
How to test
./scripts/check_ui.sh # browser suite; add the new or changed tests
./scripts/check_application.sh # when API or data paths change
python3 scripts/check_agent_setup.py && git diff --check
Compare with the renders above at 1440 × 900 and 390 × 844 CSS px, in light and dark, on ./flux demo data, then get an independent visual review with a neutral brief (guide §9). Screenshots do not prove interaction or accessibility, so also test keyboard, touch (Chromium and WebKit emulation), reduced motion and contrast in the running app.
Owner: whoever claims it (assign yourself and comment once). Evaluator: the other agent. The design is a founder direction: implement it as drawn; raise a conflict with a functional contract on #336 instead of changing the design.
Updated 2026-10-07: cross-links to #323, #155 and #20 added.
- Dominant language
- TypeScript
- Stars
- 3
- Forks
- 0
- Avg merge
- 15h 9m
- Merged PRs (30d)
- 244
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from ColdPhase/flux
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
Maintainers usually reply within 1 day
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
Live platform rows: Firefox Join fails at ICE on native Linux Docker (child of #63 AC-3)Possibly taken @Zamojski5 claimed this today. Open
ColdPhase/flux#496 · 1 assignee ·
Maintainers usually reply within 1 day
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
better-auth/better-auth#11723 · 1 reaction ·
Maintainers usually reply within 1 day
-
area: docs difficulty: easy documentation good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Worker-Erstellung bricht langsame Git-Worktree-Checkouts nach 20 Sekunden abPossibly taken @KajoVanBuyten claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 69/100
AgentSystemLabs/agent-office#367 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
pierrecomputer/pierre#1187 ·
Maintainers usually reply within 1 day
-
area: frontend bug
Difficulty 1/5 1-3 hours Newbie friendliness 85/100
snapotter-hq/SnapOtter#2425 ·
Maintainers usually reply within 1 day