Przejdź do treści
dlab

~/dlab.zone (main) $ cat projects/pirateswap/README.md

pirateswap.com

Zdecentralizowana giełda i marketplace dla użytkowników Steama — ceny i handel w czasie rzeczywistym, a frontend musi nadążyć.

rola
Frontend developer → lead · UN7
kiedy
05.2023 — 03.2026
stack
React · TypeScript · React Query · XState · WebSockets
linki

kontekst

Użytkownicy Steama handlują między sobą przedmiotami z gier — ceny, salda i stany zleceń zmieniają się co sekundę, a każda zmiana musi pojawić się bez odświeżania strony.

co zrobiłem

  1. 0a4b7d1init: zaprojektowałem frontend od zera
  2. f3e019bstate: React Query dla stanu z serwera, XState dla procesów
  3. c0d93b8realtime: dane rynkowe i handel na żywo przez websockety
  4. 7e51f02perf: płynność dla tysięcy użytkowników dziennie
  5. 41ac7e3lead: code review, planowanie, współpraca z product ownerem

architektura

Websockety zapisują do cache zapytań; UI czyta z cache; maszyny XState prowadzą procesy handlu, wpłat i wypłat.

decyzje

  1. Stan z serwera w React Query, procesy w XState — nigdy razem.Cache odpowiada na pytanie „co jest prawdą teraz”, maszyny — „co użytkownik może zrobić dalej”. Każde z nich zostaje małe i testowalne.
  2. Zdarzenia z websocketów trafiają do cache.Każdy widok czyta z jednego źródła prawdy, więc zmiana ceny aktualizuje listę, szczegóły i okno handlu jednocześnie.
  3. Procesy jako jawne stany.Handel ma wiele stanów pośrednich (oczekuje, potwierdzanie, błąd, ponowienie). Zamiana flag na stany usunęła całą klasę „niemożliwych” błędów w UI.

wyniki

tysiąceużytkowników dziennie, płynnie przy danych na żywo
dev → leadod pierwszego commita do prowadzenia frontendu
guest@dlab.zone — zsh/ komendy · tab uzupełnij · ctrl+r szukaj · esc zamknij

Witaj na dlab.zone. Zadaj pytanie, wpisz / po komendy albo spróbuj `ls`.

NORMAL
choose-tree — strony i sekcje

↑ ↓ wybór · enter otwórz · esc zamknij

Skróty klawiszowe