Ta strona
Strona też jest systemem. Oto jak działa.
Ta sama metoda co u klientów: prerenderowany front, bezstanowe API, stan w usługach, które i tak muszą istnieć, i agent, który nie zmyśla.
← przesuń diagram →
Przepływy
Treść jest w HTML, zanim wykona się JavaScript.
Kliknij element diagramu, żeby zobaczyć szczegóły.
- sprzęt
- brzeg / sieć
- usługa
- dane
- AI
- zewnętrzne
- ludzie / aplikacje
- radio
- tunel
- HTTPS
- lokalnie
- zdarzenie
Opis wszystkich elementów
- Gość · strona, booking, agent
- Dostaje gotowy HTML z treścią i meta. JavaScript dokłada interakcje: hero 3D, diagramy, rezerwację i agenta.
- Pages · HTML z prerenderu
- React Router 7 renderuje każdą stronę w obu językach do statycznego HTML przy buildzie: canonical, hreflang, JSON-LD, sitemap. Deploy z CI przy pushu.
- FastAPI · rezerwacje, agent
- Jeden kontener na Cloud Run, skaluje do zera. Bezstanowy: stan rezerwacji żyje w kalendarzu i w Stripe, a nie w bazie.
- Agent strony · narzędzia: wiedza, terminy
- Odpowiada wyłącznie z wiedzy wygenerowanej z treści tej strony i z kalendarza. Strumieniuje odpowiedź i pokazuje, których narzędzi użył. Ma limity zapytań i dzienny budżet.
- sapiqa-context · RAG: hybryda + rerank
- Osobna usługa Cloud Run z lokalnymi modelami ONNX: BM25 i embeddingi wielojęzyczne łączone fuzją RRF, potem reranking cross-encoderem. Dostęp tylko przez IAM; gdy śpi, API odpowiada z BM25 + tagów.
- Booking · sloty, blokada, płatność
- Wolne terminy z kalendarza (godziny pracy, bufor, wyprzedzenie). Płatna sesja blokuje termin na 30 minut do opłacenia; potwierdzenie przychodzi webhookiem.
- Google Calendar · źródło prawdy terminów
- Wydarzenia rezerwacji niosą stan (blokada, potwierdzona) w prywatnych właściwościach, więc API nie potrzebuje bazy.
- Stripe · Checkout + webhook
- Checkout z czasem wygaśnięcia równym blokadzie. Webhook z podpisem potwierdza albo zwalnia termin.
- Claude · model agenta
- Pętla narzędzi ze strumieniowaniem, cache promptu i fallbackiem przy odmowie.
- Resend · potwierdzenia
- Mail z potwierdzeniem i linkiem do spotkania w języku gościa.
- Jitsi · spotkania (droplet)
- Własny serwer wideo na droplecie. Wyłączony do czasu rozbudowy serwera; do tego czasu link do spotkania przychodzi w osobnym mailu.
Decyzje
Prerender zamiast SPA
Stara strona ładowała treść JavaScriptem. Teraz każda strona w obu językach to gotowy HTML z canonical, hreflang i JSON-LD.
8 MB modelu → 7 KB danych
Sieć neuronowa z poprzedniej strony to 42 punkty i 861 krawędzi. Skrypt wyciągnął geometrię z FBX, a WebGL rysuje ją w trzech wywołaniach.
Jedno źródło treści
Opisy systemów są typowanymi danymi. Z nich powstają strony, diagramy i plik wiedzy agenta, więc agent nie powie niczego, czego nie ma na stronie.
Bezstanowe API
Rezerwacje trzymają stan w kalendarzu i Stripe. Cloud Run skaluje do zera, a nie ma bazy do utrzymania.
Ruch bez śledzenia
Brak ciasteczek reklamowych i zewnętrznych skryptów analitycznych. Czcionki serwowane z tej samej domeny.
Typowane tłumaczenia
Każdy tekst to para PL/EN w kodzie. Brak tłumaczenia to błąd kompilacji, a nie pusta etykieta na produkcji.
Stos
Masz proces, który powinien działać sam?
30 minut, bez opłat. Powiem, czy to ma sens, jak bym to zbudował i ile kosztowałoby utrzymanie.