> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kazzle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Synchronizacja w czasie rzeczywistym

> Aplikacje oparte na danych lokalnych z obsługą trybu offline i automatyczną synchronizacją w tle.

## Jak to działa

Aplikacje z synchronizacją w czasie rzeczywistym przechowują lokalną bazę danych na urządzeniu. Odczyty są natychmiastowe (lokalne), zapisy są kolejkowane lokalnie, a wszystko synchronizuje się z serwerem w tle.

```text theme={"theme":"material-theme-darker"}
Zapis użytkownika -> Lokalna baza danych -> Kolejka przesyłania -> Serwer -> Postgres
                                                                              |
Odczyt użytkownika <- Lokalna baza danych <- Replikacja synchronizacji <----+
```

Rezultat: natychmiastowe odczyty, brak spinnerów ładowania i aplikacja, która działa nawet przy słabych połączeniach lub offline.

## Co AI konfiguruje

Poproś AI, aby zbudowała aplikację w czasie rzeczywistym. Ponownie wykorzystuje odpowiednią aktywną bazę danych, jeśli istnieje; w przeciwnym razie tworzy bazę danych, włącza usługę synchronizacji i buduje aplikację dwuczęściową:

* **UI** - aplikacja kliencka z lokalną bazą danych, zapytaniami na żywo i łącznikiem synchronizacji
* **Process** - punkt końcowy tokena, trasa przesyłania synchronizacji i runner migracji

Poświadczenia są przechowywane w [vault](/work/vault). AI podłącza zmienne środowiskowe bazy danych do komponentu procesu za pomocą narzędzia `db`.

Zanim aplikacja będzie uważana za gotową, baza danych musi wyświetlać `sync: ready`. Jeśli synchronizacja nie jest gotowa, aplikacja może się renderować, ale dane w czasie rzeczywistym na wielu urządzeniach nie będą działać.

## Zasady praktyczne

* Zapisuj lokalnie w pierwszej kolejności. Pozwól synchronizacji przesyłać w tle.
* Pokaż puste stany, a nie spinnery ładowania, gdy istnieją dane lokalne.
* Przechowuj widoczny dla użytkownika stan w zsynchronizowanych tabelach, aby przetrwał odświeżenia i użycie offline.
* Grupuj powiązane lokalne zapisy razem, aby interfejs użytkownika aktualizował się w jednym kroku.
* Sprawdź kondycję synchronizacji przed ukończeniem aplikacji w czasie rzeczywistym.

## Powłoka aplikacji offline

Szablony UI mogą zawierać powłokę aplikacji offline, aby aplikacja mogła się ponownie otworzyć po pierwszej wizycie bez sieci. Powłoka aplikacji to statyczne HTML, JS, CSS i ikony.

* **Powłoka offline** umożliwia otwarcie aplikacji bez sieci
* **Synchronizacja** utrzymuje dane aplikacji użyteczne w trybie offline

Razem: aplikacja otwiera się bez sieci, pokazuje najnowsze zsynchronizowane dane, kolejkuje nowe zapisy i synchronizuje się, gdy połączenie powraca.

## Kiedy używać synchronizacji w czasie rzeczywistym

| Dobre zastosowanie                      | Przesada                           |
| --------------------------------------- | ---------------------------------- |
| Menedżery zadań i aplikacje notatek     | Statyczne strony marketingowe      |
| Narzędzia współpracy                    | Jednorazowe przesyłanie formularzy |
| Aplikacje terenowe ze słabą łącznością  | Witryny broszur tylko do odczytu   |
| Wszystko, co powinno być natychmiastowe | Aplikacje bez wartości offline     |

## Zmienne platformy

Kazzle automatycznie wstrzykuje mały zestaw zmiennych środowiskowych do każdego procesu aplikacji. Są one oddzielone od twoich własnych [sekretów vault](/work/vault).

| Zmienna                           | Co to jest                                                   |
| --------------------------------- | ------------------------------------------------------------ |
| `PORT`                            | Port, na którym powinien nasłuchiwać twój proces             |
| `HOST`                            | Nazwa hosta do powiązania (zwykle `0.0.0.0`)                 |
| `KAZZLE_API_URL`                  | Podstawowy adres URL używany przez pomocników runtime Kazzle |
| `KAZZLE_APP_COMPONENT_<NAME>_URL` | Adres URL runtime komponentu równorzędnego                   |

### Adresy URL komponentów równorzędnych

Gdy aplikacja ma wiele komponentów (np. interfejs użytkownika `web` i proces `server`), Kazzle może wstrzykiwać adresy URL dla komponentów równorzędnych:

```
# W części "web":
KAZZLE_APP_COMPONENT_SERVER_URL=http://localhost:3001

# W części "server":
KAZZLE_APP_COMPONENT_WEB_URL=http://localhost:3000
```

Gdy komponent równorzędny jest już wdrożony, wstrzyknięta wartość wskazuje na ten wdrożony komponent. W przeciwnym razie wskazuje na bieżący adres programistyczny dla tego komponentu równorzędnego.
