Spójne stany ładowania, błędu i pustki na web i mobile
Poznaj prosty system zapewniający spójne stany ładowania, błędu i pustki między web a mobile, dzięki czemu interfejsy generowane przez AI pozostają spójne i wymagają mniej poprawek na finiszu.

Dlaczego te stany tak szybko się rozjeżdżają
Stany ładowania, błędów i pustki to ekrany (lub małe bloki UI), które użytkownik widzi, gdy aplikacja czeka, coś się nie powiodło lub po prostu nie ma nic do pokazania. To normalne: sieć bywa wolna, uprawnienia są odrzucane, a nowe konta zaczynają się od zerowych danych.
Stają się niespójne, bo zwykle są dodawane późno i szybko. Zespoły najpierw budują happy path, a potem doklejają spinner, czerwony komunikat i placeholder „brak elementów” tam, gdzie UI się łamie. Zrób to w kilkudziesięciu ekranach i otrzymasz stos jednorazowych rozwiązań.
Szybkie iteracje pogarszają sprawę. Gdy UI powstaje szybko (w tym UI generowane przez AI), główny układ może pojawić się w minutach, a te stany łatwo pominąć. Każdy nowy ekran kończy z innym stylem spinnera, innym brzmieniem („Spróbuj ponownie” vs „Retry”) i innym umiejscowieniem przycisku. Szybki przyrost pracy na początku zamienia się potem w dopracowywanie tuż przed premierą.
Niespójne stany mylą użytkowników i kosztują zespoły czas. Ludzie nie potrafią odróżnić, czy pusty widok oznacza „brak wyników”, „jeszcze nie załadowano” czy „nie masz dostępu”. QA musi testować długi ogon małych wariantów, a błędy prześlizgują się, bo zachowanie różni się między web a mobile.
„Bałagan” często wygląda tak:
- Ładowanie na jednym ekranie ukrywa akcje, a na innym nie.
- Błędy czasem blokują stronę, a czasem pojawiają się jako drobny tekst.
- Puste stany używają różnych tonów, ikon i kolejnych kroków.
- Web i mobile używają różnych etykiet dla tej samej akcji.
Cel jest prosty: wspólne podejście między web a mobile. Jeśli zespół szybko generuje funkcje (na przykład przy użyciu platformy Koder.ai), wspólny wzorzec stanów ma jeszcze większe znaczenie, bo każdy nowy ekran zaczyna spójnie domyślnie.
5 typów stanów, które warto wystandaryzować najpierw
Większość aplikacji powtarza te same punkty narażenia: listy, strony szczegółów, formularze, pulpity. To miejsca, gdzie spinnery, bannery i komunikaty „nic tu nie ma” się mnożą.
Zacznij od nazwania i wystandaryzowania pięciu typów stanów:
- Początkowe ładowanie: pierwszy raz, gdy ekran się otwiera, zanim masz jakiekolwiek dane.
- Odświeżanie / aktualizacja: ekran ma już dane, ale pobierasz nowsze.
- Pusty bazowy: naprawdę nic jeszcze nie ma (nowe konto, nowe miejsce pracy, brak utworzonych elementów).
- Brak wyników: dane istnieją, ale filtry lub wyszukiwanie nic nie zwróciły.
- Błąd: żądania nie powiodły się, uprawnienia blokują dostęp lub coś się zepsuło.
Dwa specjalne przypadki wymagają własnych reguł, bo zachowują się inaczej:
- Offline: pokaż zawartość z cache, jeśli to możliwe, i jasno napisz „Jesteś offline”.
- Wolna sieć: unikaj szybkich błysków błędu; po krótkim opóźnieniu przełącz na „Wciąż ładowanie…” (lub podobne).
Na wszystkich ekranach i platformach zachowaj spójną strukturę: miejsce pojawiania się stanu, styl ikony, ton i domyślne akcje (Retry, Refresh, Clear filters, Create). To, co może się różnić, to kontekst: nazwa ekranu i zdanie używające słów użytkownika.
Przykład: jeśli generujesz listę web i listę mobilną dla „Projekty”, powinny dzielić ten sam wzorzec zero-wyników. Etykieta akcji może dopasować się do platformy („Wyczyść filtry” vs „Resetuj”).
Zbuduj mały zestaw stanów zamiast jednorazowych rozwiązań
Jeśli każdy ekran wymyśla własny spinner, kartę błędu i wiadomość pustego stanu, dostaniesz tuzin nieznacznie różnych wersji. Najszybszym naprawieniem jest mały „state kit”, który każdy feature może podpiąć.
Zacznij od trzech wielokrotnego użytku komponentów: Loading, Error i Empty. Utrzymuj je celowo nudne. Mają być łatwe do rozpoznania i nie rywalizować z głównym UI.
Uczyń komponenty przewidywalnymi, definiując mały zestaw wejść:
- Tytuł (krótki i konkretny)
- Wiadomość (jedno lub dwa zdania)
- Etykieta akcji głównej
- Handler akcji głównej (retry, refresh lub następny krok)
- Opcjonalne szczegóły (kod błędu, akcja pomocnicza)
Potem usztywnij wygląd. Zdecyduj raz o odstępach, typografii, wielkości ikony i stylu przycisku i traktuj to jak regułę. Gdy rozmiar ikony i typ przycisku pozostają takie same, użytkownicy przestają zauważać UI stanu i zaczynają mu ufać.
Ogranicz warianty, żeby kit nie stał się drugim systemem projektowym. Trzy rozmiary zwykle wystarczą: mały (inline), domyślny (sekcja) i pełnoekranowy (blokujący).
Jeśli generujesz ekrany w Koder.ai, prosta instrukcja jak „use the app StateKit for loading/error/empty with default variant” zapobiega dryfowi. To też zmniejsza porządki przed wydaniem między React web i Flutter mobile.
Pisanie spójnych komunikatów stanów
Kopia to część systemu, nie ozdoba. Nawet gdy układ jest spójny, improwizowane sformułowania sprawiają, że ekrany wydają się inne.
Wybierz wspólny głos: krótki, konkretny, spokojny. Powiedz, co się stało prostymi słowami, a potem powiedz użytkownikowi, co ma zrobić dalej. Większość ekranów potrzebuje jednego jasnego tytułu, krótkiego wyjaśnienia i jednej oczywistej akcji.
Używaj szablonów, żeby zespoły przestały improwizować
Kilka wzorców wiadomości pokryje większość sytuacji. Utrzymuj je krótkie, aby mieściły się na małych ekranach:
- Sieć: „Nie można połączyć” + „Sprawdź internet i spróbuj ponownie.” + Akcja: „Retry”
- Timeout: „Zajmuje to dłużej niż oczekiwano” + „Żądanie przekroczyło limit czasu.” + Akcja: „Try again”
- Uprawnienia: „Wymagane uprawnienia” + „Pozwól na dostęp, aby kontynuować.” + Akcja: „Open settings”
- Nie znaleziono: „Nic tu nie ma” + „Ten element mógł zostać usunięty.” + Akcja: „Back”
- Walidacja: „Popraw jedną rzecz” + „Dodaj poprawny adres e-mail.” + Akcja: „Save”
Unikaj niejasnych tekstów typu „Coś poszło nie tak” bez dalszego kontekstu. Jeśli naprawdę nie znasz przyczyny, powiedz, co wiesz i co użytkownik może zrobić teraz. „Nie udało się załadować projektów” jest lepsze niż samo „Błąd”.
Spraw, aby następna akcja była przewidywalna
Ustal jedną regułę: każdy błąd i pusty stan oferuje kolejny krok.
- Jeśli użytkownik może się odzyskać, zaproponuj „Retry” lub „Refresh”.
- Jeśli stan jest pusty z powodu filtrów, zasugeruj „Clear filters”.
- Jeśli użytkownik jest zablokowany (uprawnienia), powiedz dokładnie, gdzie to zmienić.
To ma jeszcze większe znaczenie przy UI generowanym przez AI, gdzie ekrany pojawiają się szybko. Szablony utrzymują spójność treści, więc nie przepisujesz dziesiątek jednorazowych komunikatów podczas końcowego dopracowywania.
Uczyń akcje przewidywalnymi: retry, refresh i kolejne kroki
Gdy ekrany stanu sugerują różne akcje z jednego ekranu na drugi, użytkownicy wahają się. Zespoły potem kończą przy dopracowywaniu przycisków i treści tuż przed wydaniem.
Zdecyduj, jaka akcja należy do każdego stanu i trzymaj się stałego umiejscowienia i etykiet. Większość ekranów powinna mieć jedną akcję główną. Jeśli dodajesz drugą, powinna wspierać główną ścieżkę, a nie z nią konkurować.
Mała mapa akcji, która się skaluje
Trzymaj dozwolone akcje w wąskim zakresie:
- Ładowanie: zwykle brak akcji (opcjonalnie „Cancel” dla długich, rozpoczętych przez użytkownika zadań).
- Pusty stan: „Create” jeśli użytkownik może coś dodać; „Adjust filters” jeśli to filtry spowodowały brak wyników.
- Błąd: „Retry” dla tymczasowych awarii; „Refresh” dla przestarzałych danych; „Contact support” tylko dla zablokowanych przepływów.
- Sukces bez zmiany danych: „Back” lub „Done.”
Nudne przyciski to zaleta. Sprawiają, że UI jest znajome i pomagają zachować spójność generowanych ekranów.
Zasady Retry i szczegółów błędów
Pokaż „Retry” tylko wtedy, gdy ponowna próba ma realistyczne szanse powodzenia (timeouty, niestabilna sieć, 5xx). Dodaj krótki debounce, aby wielokrotne tapnięcia nie spamowały żądań, i przełącz przycisk na stan ładowania podczas retry.
Po powtarzających się niepowodzeniach zachowaj ten sam przycisk główny i popraw pomocnicze informacje (np. wskazówkę „Sprawdź połączenie” lub „Spróbuj później”). Unikaj wprowadzania nowych układów tylko dlatego, że coś zawiodło dwukrotnie.
Dla szczegółów błędu pokaż prostą przyczynę, na którą użytkownik może zareagować („Twoja sesja wygasła. Zaloguj się ponownie.”). Ukrywaj techniczne szczegóły domyślnie. Jeśli są potrzebne, schowaj je za spójnym elementem „Details” na wszystkich platformach.
Przykład: lista „Projekty” nie załaduje się na mobile. Obie platformy pokazują tę samą główną akcję „Retry”, dezaktywują ją podczas ponawiania i po dwóch niepowodzeniach dodają małą wskazówkę o połączeniu zamiast zmieniać cały układ przycisków.
Wdrażaj system bez spowalniania zespołów
Traktuj spójność stanów jak małą zmianę produktową, a nie redesign. Idź inkrementalnie i ułatw adopcję.
Zacznij od szybkiego przeglądu tego, co już macie. Nie dąż do perfekcji. Zanotuj najczęstsze warianty: skeletony vs spinnery, pełnoekranowe błędy vs bannery, ekrany „brak wyników” z różnym tonem.
Plan wdrożenia, który pozostaje praktyczny:
- Zrób inwentaryzację 15–30 kluczowych ekranów na web i mobile i pogrupuj najczęściej występujące wzorce.
- Wybierz 3–4 kanoniczne umiejscowienia, które najpierw wesprzecie (pełna strona, sekcja, inline, toast).
- Zbuduj odpowiadające komponenty dla web i mobile, które będą miały te same props i nazwy.
- Napisz krótkie zasady użycia, aby nowe ekrany wybierały z kitu zamiast tworzyć nową wersję.
- Zastępuj jeden obszar produktu naraz (wyszukiwanie, skrzynka, billing), aby wydania pozostały bezpieczne.
Gdy komponenty istnieją, prawdziwym oszczędzającym czas elementem jest krótki zestaw reguł, który usuwa spór: kiedy stan blokuje całą stronę, a kiedy tylko kartę, oraz które akcje muszą być obecne.
Utrzymaj reguły krótkie:
- Każdy błąd pokazuje jeden jasny następny krok (retry, refresh lub contact support).
- Puste stany oferują jedną akcję główną (create, import lub explore).
- Stany ładowania nie skaczą układu, gdy dane przychodzą.
Jeśli używasz generatora UI jak Koder.ai, te reguły szybko się zwrócą. Możesz poprosić o „use the state kit components” i uzyskać ekrany, które pasują do systemu zarówno w React web, jak i Flutter mobile, z mniejszą ilością poprawek.
Typowe błędy, które tworzą późne prace dopracowujące
Late polish work zwykle powstaje, bo obsługa stanów była budowana jako jednorazowe rozwiązania. Ekran „działa”, ale doświadczenie różni się za każdym razem, gdy coś trwa dłużej, zawodzi lub nie ma danych.
Ładowanie, które wydaje się zatrzymane
Skeletony pomagają, ale pozostawienie ich zbyt długo sprawia, że ludzie myślą, że aplikacja zamarła. Częstą przyczyną jest pokazanie pełnego skeletonu przy wolnym wywołaniu bez sygnału, że coś się dzieje.
Ogranicz czas: po krótkim opóźnieniu przełącz na lżejszą wiadomość „Wciąż ładowanie…” lub pokaż postęp, gdy to możliwe.
Dryf treści między ekranami
Zespoły często piszą nową wiadomość za każdym razem, nawet gdy problem jest ten sam. „Coś poszło nie tak”, „Nie można pobrać” i „Błąd sieci” mogą opisywać tę samą sytuację, ale brzmią niespójnie i utrudniają wsparcie.
Wybierz jedną etykietę na typ błędu i używaj jej na web i mobile, z tym samym tonem i poziomem szczegółu.
Pusty vs błąd vs jeszcze nie załadowano
Klasyczny błąd to pokazanie pustego stanu zanim dane się załadują, lub pokazanie „Brak elementów” gdy prawdziwy problem to nieudane żądanie. Użytkownik podejmuje niewłaściwą akcję (np. zaczyna dodawać treść zamiast ponowić próbę).
Uczyń kolejność decyzji explicit: najpierw loading, potem error jeśli się nie udało, a pusty stan tylko kiedy żądanie zakończyło się sukcesem.
Brak akcji lub zbyt wiele akcji
Błąd bez możliwości odzyskania tworzy martwe punkty. Przeciwieństwo też jest częste: trzy przyciski walczą o uwagę.
Trzymaj to krótkie:
- Dla błędów domyślnie jedna akcja główna (zwykle „Retry”).
- Dla pustych stanów jedna jasna następna czynność.
- Akcje pomocnicze tylko gdy naprawdę potrzebne.
Różnice wizualne między platformami
Małe różnice sumują się: style ikon, padding, kształty przycisków. To też miejsce, gdzie UI generowane przez AI może odpłynąć, jeśli prompty różnią się per ekran.
Zablokuj odstępy, zestaw ikon i układ komponentów stanów, aby każdy nowy ekran dziedziczył tę samą strukturę.
Praktyczne zasady dla zachowania ładowania i dostępności
Aby mieć spójną obsługę stanów między web a mobile, zrób „nudne” reguły jawne. Większość późnych poprawek pojawia się dlatego, że każdy ekran wymyśla własne zachowanie ładowania, timeouty i etykiety.
Zasady ładowania, które wydają się szybkie (nawet jeśli takie nie są)
Dla pełnej strony wybierz jedno domyślne podejście: skeletony dla ekranów ciężkich od treści (listy, karty, pulpity) i spinner tylko dla krótkich oczekiwań, gdy układ jest nieznany.
Dodaj próg timeoutu, żeby UI nie wisiał w ciszy. Jeśli ładowanie trwa dłużej niż około 8–10 sekund, przełącz na jasny komunikat i widoczną akcję jak „Retry”.
Dla częściowych ładowań nie białkuj ekranu. Trzymaj istniejącą zawartość widoczną i pokaż mały wskaźnik postępu w pobliżu sekcji, która się odświeża (np. cienki pasek w nagłówku lub inline spinner).
Dla danych z cache preferuj „stare, ale użyteczne”. Pokaż zawartość z cache od razu i dodaj subtelny indicator „Refreshing…”, aby ludzie wiedzieli, że dane mogą się zmienić.
Offline to odrębny stan. Powiedz to wprost i powiedz, co nadal działa. Przykład: „Jesteś offline. Możesz przeglądać zapisane projekty, ale synchronizacja jest wstrzymana.” Zaproponuj jedną następną akcję, jak „Try again” lub „Otwórz zapisane”.
Podstawy dostępności, które zastosujesz wszędzie
Zachowaj je spójne między platformami:
- Kolejność fokusu: przenieś fokus na komunikat stanu i akcję główną, gdy stan się pojawi.
- Etykiety dla czytników ekranu: ogłaszaj ładowanie i błędy krótkim, jasnym tekstem.
- Cele dotyku: spraw, by przyciski były łatwe do trafienia na mobile, unikaj małych linków inline.
- Ruch: trzymaj spinnery subtelnymi i nie polegaj wyłącznie na animacji.
- Kolor: nigdy nie używaj koloru jako jedynego sygnału (łącz go z tekstem i ikonami).
Jeśli generujesz UI za pomocą narzędzia jak Koder.ai, wbudowanie tych reguł w wspólny state kit pomaga utrzymać spójność każdego nowego ekranu domyślnie.
Przykład: jedna funkcja, trzy stany, dwie platformy
Wyobraź sobie prosty CRM z ekranem listy Kontaktów i ekranem szczegółów Kontaktu. Jeśli traktujesz stany ładowania, błędu i pustki jako jednorazowe, web i mobile szybko się rozjadą. Mały system utrzymuje porządek nawet, gdy UI powstaje szybko.
Pierwszy pusty stan (lista Kontaktów): użytkownik otwiera Kontakty i nic jeszcze nie ma. Na web i mobile tytuł pozostaje ten sam („Contacts”), komunikat wyjaśnia przyczynę („Brak kontaktów”) i jest jedna jasna następna akcja („Add your first contact”). Jeśli wymagana jest konfiguracja (np. połączenie skrzynki lub import CSV), pusty stan wskazuje dokładny krok.
Wolna sieć podczas ładowania: użytkownik otwiera stronę szczegółów Kontaktu. Obie platformy pokazują przewidywalny skeleton dopasowany do finalnej struktury strony (nagłówek, kluczowe pola, notatki). Przycisk wstecz nadal działa, tytuł strony jest widoczny i unikamy losowych spinnerów w różnych miejscach.
Błąd serwera: żądanie szczegółów nie powiodło się. Ten sam wzorzec pojawia się na web i mobile: krótki nagłówek, jedno zdanie i akcja główna („Retry”). Jeśli ponowne próby się nie powiodą, zaoferuj drugą opcję jak „Go back to Contacts”, aby użytkownik nie został zablokowany.
Co pozostaje spójne, jest proste:
- Umiejscowienie: komunikat w obszarze treści, akcje w jednym oczywistym miejscu.
- Kopia: jeden ton, te same etykiety przycisków (Retry, Add contact).
- Zachowanie: te same wyzwalacze dla skeletonów, te same reguły retry.
- Bezpieczeństwo: dezaktywuj duplikujące się akcje podczas ładowania.
Szybka lista kontrolna przed wydaniem
Wydanie może wyglądać „gotowe”, dopóki ktoś nie trafi na wolne łącze, świeże konto lub niestabilne API. Ta lista pomaga wykryć braki ostatniej mili bez zamieniania QA w polowanie na skarby.
Kontrole spójności UI
Zacznij od ekranów list, bo one się mnożą. Wybierz trzy powszechne listy (wyniki wyszukiwania, zapisane elementy, ostatnia aktywność) i upewnij się, że wszystkie używają tego samego układu pustego stanu: jasny tytuł, jedno pomocne zdanie i jedna akcja główna.
Upewnij się, że puste stany nigdy nie pojawiają się podczas trwającego ładowania. Jeśli migocze „Nic tu nie ma” przez ułamek sekundy, a potem pojawiają się treści, zaufanie spada szybko.
Sprawdź wskaźniki ładowania pod kątem spójności: rozmiar, umiejscowienie i sensowna minimalna długość, aby nie migały. Jeśli web pokazuje spinner w pasku u góry, a mobile pełnoekranowy skeleton dla tego samego ekranu, wygląda to jak dwa różne produkty.
Kontrole błędów i QA
Błędy powinny zawsze odpowiadać „co teraz?”. Każdy błąd potrzebuje następnego kroku: retry, refresh, zmień filtry, zaloguj się ponownie lub contact support.
Krótki przegląd przed oznaczeniem builda jako gotowego:
- Puste stany: ten sam układ, styl ikony i ton w ekranach list.
- Ładowanie: nigdy nie zastępuje się zbyt wcześnie pustym; wskaźniki pasują między web i mobile.
- Błędy: jedna jasna następna akcja na każdym ekranie błędu lub toast.
- Reguły kopii: spójne wzorce słowne między platformami (tytuły, interpunkcja, czasowniki na przyciskach).
- Skrypt QA: krótki, powtarzalny zestaw kroków do wywołania stanów ładowania, pustego i błędów.
Jeśli używasz generatora AI jak Koder.ai, te kontrole mają jeszcze większe znaczenie, bo ekrany mogą być tworzone szybko, ale spójność nadal zależy od wspólnego kitu i zasad kopii.
Następne kroki: utrzymuj spójność wraz z rozwojem aplikacji
Spójność jest najłatwiejsza, gdy jest częścią codziennej pracy, a nie jednorazowego porządku. Każdy nowy ekran powinien używać tych samych wzorców bez potrzeby pamiętania „dopasuj do reszty” na finiszu.
Włącz zachowanie stanów do definicji ukończenia. Ekran nie jest skończony, dopóki ma stan ładowania, pusty stan (jeśli ma zastosowanie) i stan błędu z jasną akcją.
Utrzymuj reguły lekkie, ale zapisz je. Krótki dokument z kilkoma zrzutami ekranu i dokładnymi wzorcami kopii zwykle wystarczy. Traktuj nowe warianty jako wyjątki. Kiedy ktoś proponuje nowy projekt stanu, zapytaj, czy to naprawdę nowy przypadek, czy pasuje do kitu.
Jeśli refaktoryzujesz wiele ekranów, zmniejsz ryzyko, robiąc to etapami: aktualizuj jeden przepływ na raz, weryfikuj na web i mobile, potem kontynuuj. W Koder.ai snapshoty i rollback mogą uczynić większe zmiany bezpieczniejszymi, a tryb planowania pomaga zdefiniować wspólny state kit, żeby nowe ekrany od pierwszego dnia używały waszych domyślnych ustawień.
Praktyczny sposób, by to ruszyło
Wybierz jeden obszar w tym tygodniu, gdzie problemy stanów powodują późne poprawki (często wyniki wyszukiwania, onboarding lub feed aktywności). Następnie:
- Dodaj wymagania stanów do listy akceptacyjnej dla tego obszaru.
- Zastąp jednorazowe stany wspólnymi komponentami.
- Zarejestruj 2–3 przykłady (dobre i złe) w dokumencie.
- Zrób szybki przegląd międzyplatformowy (ta sama treść, te same akcje, podobny układ).
- Śledź, ile poprawek UI zgłaszasz w następnym sprincie i porównaj.
Konkretny znak, że to działa: mniej „małych” ticketów typu „dodaj retry”, „pusty stan wygląda źle” czy „spinner blokuje stronę”.
Utrzymaj jasną odpowiedzialność
Wyznacz jednego właściciela standardów stanów (projektant, tech lead lub oboje). Nie muszą zatwierdzać wszystkiego, ale powinni chronić kit przed powolnym rozpadem na nowe warianty, które wyglądają podobnie, zachowują się inaczej i później kosztują czas.
Często zadawane pytania
What state types should we standardize first?
Zacznij od nazwania małego zestawu stanów, których będziecie używać wszędzie: początkowe ładowanie, odświeżanie, bazowy pusty stan, brak wyników i błąd. Dodaj jasne reguły dla trybu offline i wolnej sieci, aby nie były mylone z losowymi błędami. Gdy zespół zgodzi się na nazwy i wyzwalacze, UI staje się przewidywalne na wszystkich ekranach i platformach.
How do we avoid dozens of one-off spinners and empty screens?
Zbuduj mały StateKit z trzema wielokrotnego użytku elementami: Loading, Error i Empty. Każdy komponent niech przyjmuje te same wejścia (tytuł, krótka wiadomość, jedna akcja główna i opcjonalne szczegóły), aby dowolny ekran mógł je wstawić bez wymyślania nowych rozwiązań. Ustaw domyślny wariant jako najprostszy w użyciu, żeby zespoły przestały tworzyć jednorazowe elementy.
How do we stop empty states from showing before data is actually loaded?
Użyj prostego porządku decyzji: pokazuj ładowanie do momentu zakończenia żądania, potem pokaż błąd jeśli nie powiodło się, a pusty stan wyświetlaj tylko po pomyślnym zapytaniu, gdy naprawdę nie ma danych. To zapobiega sytuacji, gdzie „Brak elementów” pojawia się chwilowo przed załadowaniem treści.
What should the primary action be on loading, error, and empty states?
Wybierz jedną domyślną akcję dla każdego stanu i używaj tego samego etykietowania i umiejscowienia na wszystkich ekranach. Błędy zwykle dostają „Retry”, pusty bazowy stan — „Create” (lub następny krok konfiguracji), a brak wyników — „Clear filters”. Gdy główna akcja jest przewidywalna, użytkownicy działają szybciej, a zespoły mniej dyskutują nad słowami przycisków.
How do we keep loading/error/empty copy consistent across the app?
Pisz kopię według wspólnego szablonu: krótki tytuł, który nazywa sytuację, jedno zdanie wyjaśnienia prostym językiem i jedna jasna następna czynność. Wolniej brzmiące, konkretne komunikaty typu „Nie udało się załadować projektów” są lepsze niż ogólne „Coś poszło nie tak”. Utrzymaj spokojny, spójny ton tak, aby web i mobile sprawiały wrażenie jednego produktu.
What’s the right way to handle offline mode?
Traktuj offline jako odrębny stan, a nie ogólny błąd. Pokaż dane z pamięci podręcznej, jeśli są, napisz wprost „Jesteś offline” i wyjaśnij, co nadal działa. Zaproponuj jedną kolejną akcję, np. „Try again”, żeby użytkownik nie był pozostawiony bez wskazówek.
How should we handle slow networks without making the app feel broken?
Unikaj szybkich komunikatów o błędzie przy wolnym połączeniu — zaczekaj krótko zanim zmienisz UI. Jeśli ładowanie przekroczy próg, przełącz wiadomość na „Still loading…” (lub podobną) i pokaż widoczną akcję typu „Retry”. To sprawia, że aplikacja wydaje się responsywna, nawet gdy sieć jest powolna.
Where should state UI appear: inline, section, or full-page?
Używaj trzech wariantów rozmiaru: mały inline (wewnątrz karty lub sekcji), domyślny sekcyjny i pełnoekranowy blokujący. Zdefiniuj, kiedy każdy jest dopuszczalny, aby zespoły nie improwizowały dla każdego ekranu. Utrzymanie tych samych odstępów, stylu ikon i przycisków między wariantami tworzy spójne doświadczenie.
What are the must-have accessibility rules for these states?
Wbuduj kilka reguł: przenieś fokus na komunikat i akcję główną, gdy stan się pojawi; ogłaszaj ładowanie i błędy krótkimi, jasnymi etykietami dla czytników ekranu; upewnij się, że przyciski są łatwe do trafienia na urządzeniach mobilnych; nie polegaj wyłącznie na kolorze czy animacji. Jeśli te zasady są częścią StateKit, każdy nowy ekran dziedziczy je automatycznie.
How can we roll this out without slowing down feature delivery?
Wprowadzaj to krokami, obszar po obszarze, zaczynając od ekranów o dużym ruchu. Zrób listę istniejących wariantów, wybierz kilka kanonicznych miejsc, zastąp jednorazowe stany komponentami i dodaj wymagania stanu do kryteriów akceptacji. Jeśli generujesz UI w Koder.ai, dodaj stałą instrukcję „używaj StateKit” aby nowe ekrany nie odpływały od standardu.