# Asystent OWU — wersja produkcyjna (Next.js + Supabase)

To jest produkcyjna, wieloużytkownikowa wersja asystenta AI do przeszukiwania
dokumentów OWU, zbudowana na Next.js (App Router), Supabase (Postgres + Auth)
i wdrażana na Vercel. Zastępuje lokalny prototyp Flask (`agent-rag-mvp`),
który pozostaje jako sprawdzony punkt odniesienia dla logiki biznesowej --
cała logika (dzielenie dokumentów na fragmenty, prompt systemowy z
obowiązkowym cytowaniem źródeł, wskaźnik pewności, import CSV klientów,
oceny 👍/👎) została tu przeniesiona jeden do jednego.

## Czego potrzebujesz, zanim zaczniesz

Ponieważ to jest wersja hostowana (nie lokalna), potrzebne są dwa konta,
które **musisz założyć samodzielnie** (system nie pozwala mi zakładać kont
w Twoim imieniu):

1. **Supabase** (baza danych + logowanie użytkowników) -- https://supabase.com
2. **Vercel** (hosting aplikacji) -- https://vercel.com
3. Twój istniejący **klucz API Anthropic** (ten sam, co w prototypie Flask)

## Krok 1 -- Załóż projekt Supabase

1. Wejdź na https://supabase.com, załóż konto/zaloguj się, kliknij "New project".
2. Wybierz nazwę (np. `asystent-owu`), hasło do bazy (zapisz je gdzieś bezpiecznie) i region (najbliższy Polsce, np. Frankfurt).
3. Po utworzeniu projektu wejdź w zakładkę **SQL Editor** i wklej całą zawartość pliku [`supabase/schema.sql`](./supabase/schema.sql) z tego repo, a następnie kliknij "Run". To utworzy wszystkie tabele (`documents`, `chunks`, `clients`, `history`), reguły dostępu (RLS) oraz funkcję wyszukiwania pełnotekstowego.
4. W zakładce **Project Settings -> API** znajdziesz trzy wartości, które będą potrzebne w kroku 3:
   - `Project URL` -> `NEXT_PUBLIC_SUPABASE_URL`
   - `anon public` key -> `NEXT_PUBLIC_SUPABASE_ANON_KEY`
   - `service_role` key -> `SUPABASE_SERVICE_ROLE_KEY` (trzymaj w tajemnicy!)
5. Domyślnie Supabase wymaga potwierdzenia e-mail przy rejestracji. Dla zamkniętego, firmowego narzędzia (kilku agentów w jednej agencji) możesz to wyłączyć w **Authentication -> Sign In / Providers -> Email**, odznaczając "Confirm email" -- ułatwi to zakładanie kont zespołowi bez czekania na maile.

## Krok 2 -- Uzupełnij zmienne środowiskowe

Skopiuj plik `.env.example` do `.env.local`:

```bash
cp .env.example .env.local
```

i uzupełnij go wartościami z kroku 1 oraz swoim kluczem Anthropic:

```
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...
SUPABASE_SERVICE_ROLE_KEY=...
ANTHROPIC_API_KEY=...
ANTHROPIC_MODEL=claude-sonnet-4-5
```

## Krok 3 -- Uruchom lokalnie (do testów)

```bash
npm install
npm run dev
```

Otwórz http://localhost:3000 -- powinno przekierować do `/login`. Załóż tam
pierwsze konto (to zwykła rejestracja e-mail/hasło obsługiwana przez Supabase
Auth, nie login administracyjny).

## Krok 4 -- Wdrożenie na Vercel

1. Wypchnij ten katalog (`agent-rag-web`) jako repozytorium Git (GitHub/GitLab) -- Vercel wdraża z repozytorium.
2. Na https://vercel.com kliknij "Add New -> Project", wskaż to repozytorium.
3. W ustawieniach projektu (Environment Variables) wklej te same 5 zmiennych co w `.env.local`.
4. Kliknij "Deploy". Po zakończeniu Vercel poda publiczny adres (np. `asystent-owu.vercel.app`), pod którym aplikacja będzie dostępna dla całego zespołu.

## Struktura projektu

- `supabase/schema.sql` -- schemat bazy danych, reguły RLS, funkcja wyszukiwania pełnotekstowego (`search_chunks`) używana zamiast embeddingów (patrz komentarze w pliku -- to świadoma decyzja upraszczająca, żeby nie wymagać trzeciego klucza API).
- `lib/` -- logika biznesowa: klienci Supabase (`supabase/`), dzielenie dokumentów na fragmenty (`chunking.ts`), generowanie odpowiedzi AI i prompt systemowy (`rag.ts`), import CSV klientów (`csv.ts`).
- `app/api/` -- endpointy: `ask` (pytanie do asystenta), `ingest` (wgrywanie dokumentu OWU), `clients/import` (import CSV), `clients`, `history`, `history/feedback`.
- `app/(app)/` -- strony aplikacji po zalogowaniu: `chat`, `clients`, `history`, `documents`, wspólny layout z menu bocznym.
- `app/login/` -- strona logowania/rejestracji.
- `proxy.ts` -- odświeżanie sesji i przekierowanie niezalogowanych na `/login` (w Next.js 16 ten plik zastępuje dawny `middleware.ts`).

## Czego tu świadomie brakuje (na razie)

- **Wyszukiwanie semantyczne (embeddingi)** -- używamy wyszukiwania pełnotekstowego Postgresa zamiast pgvector + embeddingów, żeby nie wymagać dodatkowego konta/klucza API. Zgodnie z planem technicznym, migrację do embeddingów warto rozważyć dopiero, gdy pojawią się konkretne przypadki, w których wyszukiwanie zawodzi.
- **Integracja z Insly** -- brak publicznego API (potwierdzone 21.09.2026), więc import danych klientów odbywa się przez CSV/XLS (tak jak w prototypie).
- **Integracja z Berg System** -- ma udokumentowane API (OAuth2, `docs.bergsystem.pl`), ale nie została jeszcze podłączona -- to naturalny kolejny krok, jeśli klienci Berg System będą priorytetem.

## Prototyp lokalny (Flask)

Katalog `agent-rag-mvp` (osobno, w `Projekty-AI/agent-rag-mvp`) pozostaje
nietknięty jako sprawdzony prototyp -- można go używać równolegle, dopóki
wersja produkcyjna nie zostanie w pełni przetestowana.
