Skip to main content
Każda zmiana strony przechodzi tę samą drogę: szkic → rewizja → build → wdrożenie podglądu → publikacja. Niezależnie od tego, czy zmianę zrobił AI edytor, agent przez MCP, upload, GitHub czy CLI.

Szkic i rewizje

Zmiany plików trafiają najpierw do szkicu (z autorem i czasem każdej zmiany). Zatwierdź szkic w Workspace → Zmiany, żeby zapisać niezmienną rewizję — numerowany snapshot wszystkich plików. Rewizji nigdy się nie edytuje; wycofanie to publikacja starszego wdrożenia. Różnice między rewizjami albo szkicem widzisz jako diff w tej samej zakładce.

Build

Build zamienia pliki projektu na statyczne HTML, CSS i JS. Trafia do kolejki, a wykonuje się w izolowanym kontenerze:
  • npm ci --ignore-scripts i komenda z manifestu — skrypty instalacyjne pakietów nie są wykonywane,
  • sieć tylko do rejestru npm (registry.npmjs.org), bez dostępu do sekretów i danych sklepu,
  • 1 vCPU, 1 GiB RAM, ograniczona liczba procesów, brak uprawnień roota, twardy limit czasu 120 s,
  • komenda builda z itemshop.site.json musi mieć postać npm run <skrypt>, vite build albo npx vite build.
Status builda: queued → building → ready albo failed. Przy failed zobaczysz log (do 1 MB) — AI edytor umie go przeczytać i naprawić błąd. Limity buildów zależą od planu: Free — 1 aktywny build naraz i 10 na godzinę, Pro — 2 naraz i 30 na godzinę (409 SITE_BUILD_BUSY, 429 SITE_BUILD_RATE_LIMIT). Buildy bez wdrożenia starsze niż 14 dni są usuwane razem z logiem i wynikiem, a niepodpięte pliki po 24 godzinach.
Projekt static (sam HTML/CSS/JS) nie ma kroku budowania ani sandboxa — pliki są publikowane tak, jak je wgrasz. Do każdego pliku HTML builder dokleja tylko skrypt konfiguracji.

Zmienne builda

Przy projektach vite-react builder ustawia jawne zmienne ITEMSHOP_* — odczytasz je w vite.config.ts lub kodzie (np. do tagów SEO). Projekty static nie mają kroku builda i ich nie dostają. W przeglądarce shopId i adres API dalej pochodzą z /itemshop.config.js — zmienne ITEMSHOP_* istnieją tylko w czasie builda.

Co builder dodaje

Podgląd i produkcja

Domena itemshop.site jest inna niż domena panelu (itemshop.dev), więc kod strony nigdy nie ma dostępu do ciasteczek panelu. Każdy build może mieć wiele podglądów. Produkcja wskazuje dokładnie jedno wdrożenie. Własne domeny działają tak jak dotąd (weryfikacja TXT / Cloudflare), bez dodatkowej konfiguracji.

Publikacja

Opublikuj w panelu (albo itemshop deploy --prod) przepina produkcję na wybrane wdrożenie. Z klucza API, tokenu MCP, CLI lub agenta AI produkcja podlega zasadom publikacji: przy włączonym zatwierdzaniu (domyślnie) odpowiedź to 403 WORKSPACE_PRODUCTION_REQUIRES_APPROVAL, więc itemshop deploy --prod zadziała dopiero po wyłączeniu tej opcji albo promocji w panelu. Sesja panelu zawsze może publikować. Gracze zobaczą nową wersję po odświeżeniu strony (dokumenty HTML są zawsze rewalidowane, zasoby w assets/ są cache’owane bezterminowo).

Zasady publikacji

W Workspace → Publikacje ustawiasz, jak zmiany trafiają do graczy: Log builda widzisz na żywo w tej samej zakładce.

Wycofanie zmian

Rollback to ponowna publikacja starszego wdrożenia: Workspace → Publikacje → wybierz wdrożenie → Przywróć. Nic nie jest budowane od nowa, więc zmiana trwa sekundy. Wycofane wdrożenie zostaje na liście, więc możesz do niego wrócić.

Bezpieczeństwo strony

  • Hostowany jest wyłącznie statyczny wynik — żaden kod ze strony nie działa na serwerach ItemShop, a serwer hostingu odpowiada tylko na odczyt.
  • Nagłówek Content-Security-Policy każdej strony zawiera m.in.:
  • Do odpowiedzi dochodzą X-Content-Type-Options: nosniff, Referrer-Policy i COOP. Na domenach sklepów nie ma ciasteczek platformy.
  • Sklep zablokowany lub nieaktywny zwraca 404.
Strona musi więc ładować skrypty ze swojej domeny i łączyć się tylko z własną domeną i API ItemShop. Biblioteka z CDN albo skrypt inline zostaną zablokowane przez przeglądarkę — dodaj je do projektu i zbuduj razem ze stroną.

Przez API

Ten sam przepływ jest dostępny przez API z kluczem (site:write):

Limity

Czas builda, rozmiary, AI.

Domeny

Własna domena dla strony.