Przejdź do treści
sapiqa

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 →

PRZEGLĄDARKACLOUDFLAREGOOGLE CLOUD RUNUSŁUGIGośćstrona, booking, agentPagesHTML z prerenderuFastAPIrezerwacje, agentAgent stronynarzędzia: wiedza, terminysapiqa-contextRAG: hybryda + rerankBookingsloty, blokada, płatnośćGoogle Calendarźródło prawdy terminówStripeCheckout + webhookClaudemodel agentaResendpotwierdzeniaJitsispotkania (droplet)

Przepływy

Treść jest w HTML, zanim wykona się JavaScript.

Krok 1 z 2

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.

Context Engine

Jak agent szuka: RAG na żywo, z evalami

Hybryda BM25 + embeddingi, fuzja RRF, reranking cross-encoderem, chmura tagów. Wpisz pytanie i zobacz każdy etap z czasem.

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

React 19fastembed / ONNX RuntimeBM25 + dense + RRFcross-encoder rerankReact Router 7 (prerender)TypeScript strictTailwind CSS 4three.jsVite 8VitestPython 3.14FastAPIPydantic 2ClaudeGoogle Calendar APIStripe CheckoutResendCloudflare PagesGoogle Cloud RunGitLab CI

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.

Umów rozmowę