NearYou
좋은 장인이 집 가까이에
귀하의 e‑shop을 위한 AI 판매 도우미
AI prodavačka pro váš e-shop: zeptá se zákazníka, jestli chce poradit, doporučí z vašeho katalogu, přidá do košíku a ukáže vám, co lidé hledají. Shoptet, WordPress, Shopify. Od 990 Kč měsíčně.
커머스JavaScript · HTMLGitHub @matco01온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗AI prodavačka pro e-shopy. Hned po příchodu na web se zákazníka zeptá, jestli chce poradit, nebo se porozhlédne sám. Pak se chová jako dobrá prodavačka v kamenném obchodě. Sleduje, co zákazník dělá, a ozve se ve správnou chvíli, třeba s akcí, kterou by jinak přehlédl. Přitom není otravná.
| Část | Adresa | Co to je |
|---|---|---|
| Sella (hlavní stránka) | http://localhost:3000/ | Stránka značky Sella pro majitele obchodů a přihlášení (/sella/prihlaseni.html), které vede do jejich přehledu |
| Ukázka: TechMarket | http://localhost:3000/techmarket/ | Smyšlený obchod s elektronikou „TechMarket“ ve stylu velkých českých e-shopů (38 produktů, akce, sety, filtry, košík) |
| AI prodavačka | vpravo dole | Widget, který se vkládá na libovolný web jedním řádkem |
| Dashboard | http://localhost:3000/admin/ | Chování zákazníků, výkon prodavačky, využití tarifu a AI doporučení pro majitele (s přihlášením) |
| Klienti | http://localhost:3000/admin/clients.html | Jen pro provozovatele: zakládání obchodů, přihlášení majitelů, využití a export pro fakturaci |
| Ukázka jiného webu | http://localhost:3000/kavarna | Pražírna kávy „Bohème“: vlastní produkty z XML feedu, napojená bez jediného řádku kódu navíc (viz níže) |
/ (hlavní stránka; /sella/ sem přesměruje) představuje Sellu majitelům obchodů: úvodní video (public/sella/video/intro-cs.mp4 a intro-en.mp4), dvě ukázky (TechMarket, Bohème), jak to funguje, přehled a zásady.public/sella/i18n.js a v každé stránce (SellaI18n.use({ cs, en }))./sella/prihlaseni.html: majitel obchodu (ID obchodu + heslo) skončí ve svém přehledu /admin/ a vidí jen svůj obchod. My (ID admin + ADMIN_TOKEN) skončíme na stránce Všichni klienti /admin/klienti.html: karta každého obchodu s čísly, přihlášením a tlačítkem do jeho analýzy; mezi obchody se dá přepínat i přímo v přehledu.ADMIN_TOKEN (např. k7mq-2xpt-9fhd), takže fungují i bez databáze a hned po nasazení. Najdete je na stránce Všichni klienti (Ukázat / Kopírovat / Kopírovat přístup pro majitele). Vytvořit nové heslo vygeneruje nové a úvodní tím přestane platit; na serveru to potřebuje databázi, lokálně se uloží do data/passwords.json.public/sella/film.html?lang=cs je animace, ze které je video nahrané (každý snímek je funkcí času). Po úpravě textů se dá znovu nahrát po snímcích do MP4 (puppeteer + ffmpeg).public/sella/navod.html, nahrané public/sella/video/navod-cs.mp4 a navod-en.mp4, s namluveným hlasem): prochází přesně šest kroků z karty v přehledu – zkopírovat kód, vložit ho (Shoptet, WordPress s pluginem WPCode, Shopify, Google Tag Manager, jiný web), Sella se ukáže na webu, přečte si web, nastavení na stránce Upravit prodavačku (Vzhled: jméno, barva, maskot; Povaha: tón a pokyny; Co má vědět: informace o obchodě a dokumenty; Uložit změny) a přehled se plní daty; na konci nabídka, že to uděláme za ně. Majitel ho pustí v přehledu (▶ Video návod). Když se změní kroky nebo stránka nastavení, upravte texty v navod.html a video nahrajte znovu.ALERT_WEBHOOK_URL) a žádost se ukáže na stránce , kde ji po vložení označíte . Potřebuje sloupec – spusťte znovu ./ je česky, /en/ anglicky. Obě stránky píše node scripts/build-home.mjs z jedné šablony (public/index.html) a jednoho souboru textů (public/sella/home-text.js), takže texty, ceník (z lib/plans.js) i časté otázky jsou přímo v HTML – vyhledávače i AI roboti, kteří nespouštějí JavaScript, čtou celou stránku ve správném jazyce. Po změně textu nebo ceny spusťte skript znovu (test to hlídá).canonical, hreflang cs/en/x-default, Open Graph a Twitter karty s obrázky public/og/sella-cs.png a -en.png, strukturovaná data JSON-LD (Organization, WebSite, WebPage, SoftwareApplication s tarify a cenami, VideoObject úvodního videa, FAQPage).robots.txt (bez /admin/ a /api/), sitemap.xml s jazykovými verzemi, llms.txt (shrnutí pro AI vyhledávače, generuje skript), site.webmanifest, ikony v public/icons/ a favicon.svg.noindex), ukázkové obchody (noindex, follow – vymyšlené zboží nemá být ve výsledcích hledání) a celá adresa ai-ptojekt.vercel.app (hlavička X-Robots-Tag: noindex ve vercel.json – widget tam dál funguje, indexuje se jen sella.chat)./ a /en/ rozhoduje adresa, ne prohlížeč; přepínač CS | EN přejde na druhou adresu a kdo si dřív vybral angličtinu, toho / pošle na /en/.sella.chat do Google Search Console a Bing Webmaster Tools a odešlete https://sella.chat/sitemap.xml.Obchod si Sellu založí sám, zaplatí kartou a teprve pak mu funguje kód pro web:
/sella/registrace.html (tlačítko Chci Sellu na webu): název obchodu, adresa e-shopu, e-mail, heslo, tarif a volitelně XML feed. Vznikne klient s ID odvozeným z názvu (např. kavarna-u-lipy), stavem čeká na platbu a vypnutým asistentem; majitel je rovnou přihlášený. Přihlásit se pak může e-mailem i ID obchodu./admin/ ukáže nahoře „Zbývá zaplatit tarif“. Tlačítko Zaplatit otevře platební stránku Stripe (karta, fakturační adresa, IČO/DIČ).Kdo smí widget používat: jen aktivní klient a jen na svých doménách. Nezaplacený nebo zrušený obchod dostane od API 402 a widget se na webu vůbec neukáže. Když platba kartou selže, Stripe ji několik dní zkouší znovu a asistent mezitím běží (přehled ukazuje „Platba selhala“); když předplatné skončí, asistent se vypne. Domény a feed si majitel mění sám v přehledu (Nastavení obchodu).
Ruční klienti: ukázkové obchody a klienti založení na stránce Klienti mají stav platby manual – fakturujete jim mimo aplikaci (export CSV), a fungují jako dřív.
Nastavení Stripe:
STRIPE_SECRET_KEY. Produkty a ceny tarifů (CZK měsíčně) se ve Stripe vytvoří samy při první platbě.https://VÁŠ-WEB/api/stripe/webhook, události checkout.session.completed, customer.subscription.created, customer.subscription.updated, customer.subscription.deleted, invoice.paid, invoice.payment_failed. Signing secret uložte do STRIPE_WEBHOOK_SECRET.supabase/schema.sql (přidá sloupce pro platby).Volitelně STRIPE_TRIAL_DAYS=14 dá novým obchodům zkušební dny zdarma (karta se zadá hned, strhne se až po nich). Lokálně bez STRIPE_SECRET_KEY se platba jen nasimuluje, takže jde celé proklikat; na serveru bez klíče platby nejdou a registrace bez databáze vrací 503.
Demo režim pro testování: s PAYMENTS=demo (proměnná prostředí na Vercelu) se nový účet hned po „Vytvořit účet“ počítá jako zaplacený na měsíc, bez karty a bez Stripe; stejně tak změna tarifu v přehledu. Přehled to označí „Demo režim“. Jen pro testování – s opravdovými zákazníky ho vypněte, jinak by Sellu měli zadarmo.
S RESEND_API_KEY (a ověřenou doménou sella.chat v Resendu, viz .env.example) platí:
/sella/zapomenute-heslo.html. Přijde e-mail s odkazem na nové heslo (platí hodinu a jen jednou; odpověď je stejná, ať účet existuje, nebo ne). Po uložení je majitel rovnou přihlášený.Bez klíče se nic z toho nezapíná a stránka se zapomenutým heslem odkáže na kontaktní e-mail. Potřebuje sloupec email_verified_at – spusťte znovu supabase/schema.sql.
Každý e-shop, který prodavačku používá, je klient s vlastním ID. Ukázkové weby jsou klienti techmarket a kavarna.
Jak funguje ID klienta: web obchodu vkládá widget s data-client="id". Server podle ID načte nastavení obchodu, ověří, že stránka běží na jedné z jeho domén (jinak 403), načte jeho produkty z feedu a všechno, co se stane, uloží pod tímto ID. Obchody tak nikdy nevidí data jiných obchodů. Vložení bez data-client se nespustí (dřív se tiše počítalo jako TechMarket).
Přidání nového klienta (potřebuje Supabase):
/admin/ jako admin s heslem ADMIN_TOKEN a otevřete Klienti → + Nový klient.datart), název, domény obchodu, adresu produktového feedu (Heureka / Zboží.cz nebo Google Merchant), popis obchodu, tarif a e-mail majitele. Informace o obchodě (doprava, vrácení, platba, kontakt) zadejte jako JSON – na tyhle otázky AI odpovídá jen odsud.Kód pro web klienta (přímo, nebo přes jeho Google Tag Manager):
<script src="https://ai-ptojekt.vercel.app/widget/prodavac.js" data-client="datart" defer></script>
Přihlášení do přehledu: majitel se přihlásí na /admin/ svým ID a heslem a vidí jen svůj obchod. Vy se přihlásíte ID admin a heslem ADMIN_TOKEN a přepínáte mezi všemi klienty. Přihlášení drží podepsaná HttpOnly cookie 14 dní; hesla nikdy nejsou v adrese. Staré odkazy s ?token= už nefungují – klient se přihlásí formulářem; jeho staré heslo z admin_token platí a při prvním přihlášení se převede na otisk. Lokálně bez ADMIN_TOKEN je přehled otevřený jen z vašeho počítače.
Tarify a limity (lib/plans.js): každý tarif má měsíční limit zpráv, které napíše AI (odpověď v chatu, nabídka pomoci napsaná na míru váhajícímu zákazníkovi i doporučení pro majitele se počítají každá jako jedna), a znaků přirozeného hlasu; u klienta jde nastavit vlastní limit. Server počítá každé volání Claude (tokeny → cena v USD) a hlas do tabulky usage. Po vyčerpání limitu zpráv se prodavačka na webu obchodu do konce měsíce vypne (nebo do vyššího tarifu); vyčerpaný hlas přejde na hlas prohlížeče. Při 80 % a 100 % limitu přijde upozornění. Majitel vidí čerpání v přehledu, vy u všech klientů na stránce Klienti, kde je i export CSV za měsíc pro fakturaci. Ceny tarifů jsou v lib/plans.js; obchody z registrace platí přes Stripe (viz výše), ručním klientům fakturujete podle exportu.
Produkty – feed není potřeba: obchod zadá jen adresu webu. Sella si produkty přečte sama, v tomto pořadí (lib/crawl.js):
/products.json.Product, Open Graph). Umí to Shoptet, WooCommerce, Upgates i většina ostatních.ANTHROPIC_API_KEY.Web se nikdy nečte uprostřed dotazu zákazníka. Poprvé ho spustí přehled majitele (karta „Katalog produktů“ ukáže „Načítám produkty z vašeho webu…“, trvá to až 2 minuty), pak ho znovu načte každá noční údržba; tlačítko „Načíst produkty z webu znovu“ ho načte hned. 5. Weby skládané až v prohlížeči (JavaScriptové aplikace, server pošle prázdnou stránku): Claude přečte produkty z vlastních skriptů webu a dat vložených do stránky (např. Next.js). Funguje, když web produkty v kódu nebo stránce má; když si je stahuje odjinud (vlastní API), potřebuje feed. Časový limit čtení: CRAWL_SECONDS (výchozí 100).
Produkty z feedu: když obchod feed zadá (při registraci nebo v nastavení, nepovinné), použije se místo čtení webu. Server ho stáhne při první návštěvě a pak každých 6 hodin. Produkty se ukládají zabalené (gzip) do Supabase Storage, takže nový server je nemusí stahovat znovu. Feed větší než 60 MB se odmítne. Když stažení selže, jede se dál na posledním funkčním katalogu, chyba se ukáže v přehledu a přijde upozornění.
Napojení bez kódu u klienta: widget si sám přečte, co web publikuje kvůli Googlu:
dataLayer (GA4 i starší Universal Analytics); záložně pozná stránku „Děkujeme za objednávku“,Když AI přidává do košíku, widget stiskne tlačítko „Do košíku“ přímo na stránce obchodu. Když tam takové tlačítko není, kartička produktu místo toho otevře stránku produktu (chat se na počítači otevře znovu vedle něj). Odebírání funguje stejně: widget si obsah košíku přečte přímo ze stránky (minikošík, vysouvací košík nebo stránka košíku – i to, co zákazník přidal ručně), najde řádek produktu a stiskne tlačítko obchodu – „−“, když ubírá kusy, jinak koš / ×. Když řádek na stránce nenajde (košík se ukazuje jen na samostatné stránce), řekne zákazníkovi, ať produkt odebere v košíku.
Neobvyklý web opravíte v nastavení klienta (pole „Úpravy napojení“), ne u klienta, např. {"addToCart": "#buy-button", "cart": ".header-cart", "thankYou": "objednavka/hotovo"} (tlačítko do košíku na stránce produktu, ikona košíku, adresa stránky po objednávce).
TechMarket má místo toho vlastní napojení přes JavaScript (window.AIProdavac.getContext, onAddToCart – viz začátek public/widget/prodavac.js), které umí i odebírat z košíku.
V přehledu je tlačítko Upravit prodavačku (/admin/prodavacka.html). Majitel si tam sám nastaví a hned vidí v živém náhledu (skutečný widget):
clients.appearance; widget ho načítá z /api/avatar/<id>). Maskot má tvar (dlaždice, koule, trojúhelník, kapka; u obrázku i volný tvar bez ořezu) a obličej (celý, jen oči, bez obličeje) s posuvníky výšky a velikosti. Bez pusy mluví celé tělo – poskakuje do rytmu hlasu, takže jde rozhýbat i vlastní postavička obchodu (maskot značky, zvířátko). Totéž jde nastavit i atributy ve vložení: data-shape, data-face, data-face-y, data-face-scale.clients.persona.clients.info) a dokumenty (PDF, Word .docx, TXT, Markdown, CSV, HTML; až 30 dokumentů a 300 000 znaků). Text se z nich vytáhne při nahrání (PDF přečte Claude, počítá se do využití) a uloží do tabulky knowledge. Krátké dokumenty (do 12 000 znaků) dostane prodavačka přímo do promptu, delší prohledává nástrojem search_knowledge.Vzhled dorazí do widgetu spolu se startovní kontrolou (/api/status → look), takže se ukáže hned bez probliknutí. Nastavení z přehledu má přednost před data-* atributy ve vložení a před tím, co widget vyčte z webu. Ukázkové obchody může měnit jen provozovatel. Logika je v lib/bot.js.
analytics_storage), Cookiebot, OneTrust. Když obchod žádný nástroj na souhlas nemá, dává ho zákazník tím, že prodavačce napíše nebo s ní začne mluvit: prodavačka to řekne hned v pozdravu (s odkazem Více a tlačítkem Nesouhlasím) a znovu pod polem pro zprávu, volba se pamatuje v prohlížeči (aip_<klient>_chatConsent) a výslovné „ne“ z nástroje obchodu má vždy přednost. Přehled se tak plní hned od prvního dotazu. Jinak obchod souhlas předá sám: data-consent="granted" (když widget načítá až po souhlasu), AIProdavac.setConsent(true|false), nebo window.AIProdavac = { consent: true } před načtením widgetu. Bez souhlasu widget dál zdraví, radí a chatuje, jen si nic neukládá. Ukázkové weby žádnou vlastní lištu nemají – ukazují právě tenhle souhlas u prodavačky.[e-mail] / [číslo].RETENTION_DAYS (výchozí 90 dní) maže noční údržba. Přehled ukazuje stejné období./podminky.html – obchodní podmínky (jen pro podnikatele, předplatné přes Stripe, limity, AI, odpovědnost); /zpracovani-udaju.html – smlouva o zpracování osobních údajů (čl. 28 GDPR) s každým e-shopem; /soukromi.html – zásady ochrany soukromí pro e-shopy, pro návštěvníky e-shopů (na ně odkazuje widget, #navstevnici) a pro návštěvníky webu. Údaje provozovatele jsou na jednom místě v public/legal/provozovatel.js (doplňují se do všech stránek a patiček).terms_version, terms_accepted_at, terms_accepted_ip). Při změně podmínek zvyšte verzi v public/legal/provozovatel.js i lib/legal.js.public/vendor/fonts/), žádná stránka nenačítá nic od Googlu ani jiných třetích stran.ALERT_WEBHOOK_URL (Slack nebo Discord webhook) přijde zpráva při chybě serveru nebo Claude API, při rozbitém feedu a když se klient blíží limitu. Každé upozornění nejvýš jednou za čas, i když běží víc instancí./api/health vrací 503, když nejde databáze – nastavte na ni monitor (např. UptimeRobot, Better Stack).vercel.json) volá každý den ve 3:00 UTC /api/cron/daily s CRON_SECRET: smaže stará data a staré počítadlo požadavků a znovu stáhne feedy všech klientů.npm test (spouští je i GitHub Actions při každém pushi). Mimo jiné spustí schéma v in-memory Postgresu a ověří, že souhrn přehledu v databázi dává stejná čísla jako výpočet v JavaScriptu.Projekt běží na Vercelu bez dalšího nastavení (Express se detekuje sám ze server.js).
ANTHROPIC_API_KEY, SUPABASE_URL, SUPABASE_SECRET_KEY, ADMIN_TOKEN, CRON_SECRET, pro platby STRIPE_SECRET_KEY a STRIPE_WEBHOOK_SECRET pro e-maily RESEND_API_KEY a MAIL_FROM, doporučeně ALERT_WEBHOOK_URL; pro přirozený hlas AZURE_SPEECH_KEY a AZURE_SPEECH_REGION (vše viz .env.example). Soubor .env.local se na Vercel nenahrává.supabase/schema.sql v Supabase → SQL Editor – poprvé i po každé aktualizaci (přidá jen to, co chybí, a smaže dřívější simulovaná demo data).main nasadí novou verzi.Co se na Vercelu chová jinak:
public/ (/ = e-shop, /admin/, /admin/clients.html, /demo/kavarna.html, /widget/prodavac.js, /soukromi.html, /podminky.html, /zpracovani-udaju.html).SUPABASE_URL a SUPABASE_SECRET_KEY jdou jen do dočasné složky, jsou pro každou instanci zvlášť a po restartu zmizí.Potřebujete Node.js 22+.
npm install
npm start
Funguje i bez Claude API. Pozdrav, proaktivní tipy a celý e-shop běží bez API. Chat pak odpovídá zjednodušeně (vyhledá produkty, odpoví na dotazy k dopravě apod.) a ukáže poznámku o zjednodušeném režimu.
Testy: npm test.
Pro plnou AI dejte ANTHROPIC_API_KEY do souboru .env.local (nebo .env, vzor je v .env.example) (z https://platform.claude.com/) a restartujte server.
1. Hned při příchodu se otevře pop-up okno (po ~1 s). Pozdrav se přizpůsobí situaci:
Zákazník si vybere 🎙️ Promluvit si, 💬 Napsat, nebo „Děkuji, jen se dívám“. Na odmítnutí odpoví jako člověk („Jasně, v klidu se porozhlédněte…“) a ustoupí.
2. Sleduje chování a ozve se ve správnou chvíli. Tipy vždy vycházejí z katalogu, takže si nic nevymýšlí.
| Situace | Co prodavačka udělá |
|---|---|
| Zákazník si prohlíží produkt, ke kterému je set se slevou | „Malý tip, který se snadno přehlédne: když si vezmete X15 Pro, dostanete sluchátka za polovic.“ |
| Do dopravy zdarma chybí málo | „Chybí vám jen 210 Kč – hodil by se třeba HDMI kabel za 290 Kč.“ |
| Hledání nic nenašlo | „Na ‚iphone‘ vyhledávání nic nenašlo. Řekněte mi, k čemu to potřebujete…“ |
| Produkt má službu (výkup, prodloužená záruka) | „Dobré vědět: k TV Aurora záruka 5 let zdarma.“ |
| V kategorii je výrazná sleva, kterou neviděl | „Jen ať vám to neuteče: RoboClean S8 je teď o 3 000 Kč levněji.“ |
| Košík bez typického příslušenství | „K telefonu si lidé berou i nabíječku – nové telefony se dodávají bez ní.“ |
3. Pozná, když zákazník váhá, a sama nabídne pomoc, i když ji na začátku odmítl. Jako prodavačka, která vidí, že někdo dlouho stojí u regálu. Text nabídky napíše Claude přesně pro danou situaci (bez API se použije připravený text).
| Co zákazník dělá | Co Klára pozná | Příklad nabídky |
|---|---|---|
| Přechází mezi produkty tam a zpátky (A → B → A) | Nemůže se rozhodnout | „Nechci rušit, ale vypadá to, že vybíráte mezi Lumen Book 15 a Vektor Air 14 – mám je porovnat?“ |
| Dlouho čte produkt, vrací se k textu, otevírá Parametry | Nerozumí technickým údajům | „Parametry u Aurora OLED umí být zamotané. Mám vám je vysvětlit srozumitelně?“ |
| Najíždí na „Do košíku“, ale neklikne | Má poslední pochybnost | „Vypadá to, že u sluchátek ještě váháte. Můžu pomoct s poslední nejasností?“ |
| Stojí na produktu a nehýbe se | Přemýšlí | „Kdyby vám u Pixelonu 8a něco nebylo jasné, ráda poradím.“ |
| Pořád mění filtry a řazení | Nemůže najít to pravé | „Řekněte mi, k čemu to potřebujete, a vyberu 2–3 nejlepší.“ |
| Zkouší různá hledání | Nezná správná slova | „Popište mi vlastními slovy, co potřebujete.“ |
| Stojí v košíku, odebírá věci | Váhá s objednávkou | „30 dní na vrácení, doprava zdarma… Mohu s něčím pomoci?“ |
Když zákazník na nabídku klikne, jeho otázka se rovnou pošle do chatu a Klára ví, v jaké situaci je.
Pravidla, aby nebyla otravná:
4. V rozhovoru (s Claude API) prodává jako zkušená prodavačka:
Ochrana AI:
Konverze a tržby s AI / bez AI server dál počítá (/api/analytics), ale přehled je neukazuje: bez měření objednávek v e-shopu by ukazovaly nuly a ani s ním nejsou čistým přínosem prodavačky (o pomoc si říkají hlavně ti, kdo už chtějí koupit).
server.js HTTP server (Express): API, přihlášení, správa klientů, noční údržba + statické soubory
lib/assistant.js AI prodavačka (Claude): prompt, nástroje, streaming, ochrany
lib/proactive.js Pozdrav a tipy podle chování (pravidla, bez API)
lib/hesitation.js Rozpoznání váhání zákazníka (tam a zpět, dlouhé čtení, filtry, košík…)
lib/offline.js Zjednodušené odpovědi bez AI (bez API klíče nebo po vyčerpání limitu)
lib/catalog.js Katalog, vyhledávání, ceny košíku a sety
lib/catalogs.js Katalog každého klienta z jeho feedu (stažení, limit velikosti, uložení do Storage)
lib/feed.js Čtení feedů Heureka / Zboží.cz a Google Merchant
lib/clients.js Klienti: nastavení, domény, validace změn
lib/auth.js Hesla (scrypt) a podepsané přihlašovací cookie
lib/plans.js Tarify a jejich limity
lib/usage.js Měření využití AI a hlasu (tokeny → cena) a kontrola limitů
lib/ratelimit.js Limity požadavků sdílené přes databázi
lib/alerts.js Upozornění do Slacku / Discordu
lib/analytics.js Sběr událostí, maskování, mazání starých dat, souhrn pro přehled
lib/images.js Ilustrace produktů pro demo
catalog/store.js Data demo obchodu
public/widget/ prodavac.js – vložitelný widget (Shadow DOM, funguje na jakémkoli webu)
public/ Web Selly (index.html; sella/ – přihlášení, styly, video), techmarket/ (demo e-shop: index.html, shop.js, shop.css), soukromi.html, podminky.html, zpracovani-udaju.html, legal/ (údaje provozovatele, styl právních stránek) + vendor/ (ikony, písma)
public/demo/ Ukázka jiného webu (kavárna Bohème)
public/admin/ Přehled pro majitele (index.html) a správa klientů (clients.html)
supabase/schema.sql Databáze: tabulky a funkce pro limity, využití a souhrn přehledu
lib/legal.js Verze obchodních podmínek, se kterou obchod při registraci souhlasí
test/ Testy (npm test)
<script src="https://VÁŠ-SERVER/widget/prodavac.js" data-client="id-obchodu" defer></script>
Maskot a jméno se vytvoří z webu samy. Widget na každém webu najde logo a udělá z něj postavičku s očima, obočím a pusou:
Jméno vymyslí Claude podle značky a toho, co obchod prodává. Je to krátké maskotí jméno, ne lidské: TechMarket → Tekík, kavárna → Bafík, zahradnictví → Pupík, knihkupectví → Luxík. Server si jméno pamatuje, takže ho každý zákazník potká stejné.
Postavička mrká, sleduje kurzor a zvedá obočí, když přemýšlí. Pusu otevírá jen, když mluví. S přirozeným hlasem se otevírá podle skutečné hlasitosti zvuku, s hlasem z prohlížeče v rytmu slov.
Ruční nastavení je volitelné: data-name, data-brand, data-avatar-color, data-letter, data-avatar-image.
Hlas:
AZURE_SPEECH_KEY a AZURE_SPEECH_REGION mluví neuronovým hlasem Azure AI Speech – rodilá čeština (Vlasta, mužská prodavačka Antonín) i angličtina (Ava, Andrew), podle jazyka stránky a pohlaví prodavačky v nastavení. Cena ≈ $16 za milion znaků; tarif Free (F0) má 500 000 znaků měsíčně zdarma, ale jen 20 požadavků za minutu – pro provoz tarif Standard (S0). Klíč: portal.azure.com → Create a resource → Speech → Keys and Endpoint.Přerušení hlasem: když Klára mluví, pořád poslouchá. Stačí jí skočit do řeči: zmlkne, poslechne si novou otázku a odpoví na ni. Na „stop“, „počkej“ nebo „dost“ zmlkne hned. Vlastní hlas z reproduktorů pozná a nenechá se jím přerušit. Nejspolehlivěji to funguje se sluchátky. Při přerušení se na serveru zastaví i generování zbytku odpovědi.
Košík: agent umí na požádání produkty přidat i odebrat, nebo snížit jejich počet. E-shop k tomu nabízí AIProdavac.onAddToCart a AIProdavac.onRemoveFromCart.
Vzhled se přizpůsobí webu sám. Widget si při načtení zjistí:
Podle toho si nastaví barvy, pozadí panelu, písmo i rohy. Na světlém webu ve stylu Alzy je světlý s modrými akcenty, na tmavém webu kavárny tmavý, oranžový a s patkovým písmem. Ruční nastavení je volitelné: data-color="#e8741a", data-theme="light|dark", data-font="…", data-radius="8".
E-shop předává, co zákazník dělá. Čím víc toho předá, tím lépe prodavačka radí. Ukázka je v public/techmarket/shop.js:
AIProdavac.getContext = () => ({ pageType, category, currentProductId, viewedProductIds, cart });
AIProdavac.onAddToCart = (item) => mujKosik.pridat(item);
AIProdavac.track("search", { query, results });
Bez API: pozdrav a běžné tipy (akce, sety, doprava zdarma) nestojí nic. Nabídku pomoci pro váhajícího zákazníka píše Claude, takže stojí jako jedna zpráva a počítá se do tarifu.
Chat přes Claude API: výchozí model je Claude Haiku 5.5 s úsilím medium ($0,10 vstup / $0,50 výstup za milion tokenů, čtení z cache $0,01; u promptů nad 100 000 tokenů 5× víc). Haiku 5.5 nemá záložní model při odmítnutí – zákazník pak dostane připravenou odpověď. Chytřejší a 20× dražší je MODEL=claude-sonnet-5-5. Jedna zpráva zákazníka jsou 2–3 volání API. Skutečné náklady každého klienta se teď měří (tabulka usage, stránka Klienti, export CSV) – z nich nastavte ceny tarifů. Model a úsilí jdou změnit přes MODEL a EFFORT.
public/legal/provozovatel.js a nechat podmínky, smlouvu o zpracování a zásady zkontrolovat právníkem.install_requestsupabase/schema.sqlnpm start) a nástroji jen pro tento skript (npm i --no-save puppeteer-core ffmpeg-static): node scripts/record-film.mjs navod cs (resp. en, nebo film). Vytvoří MP4 i náhledový obrázek; namluvený hlas jde přidat --audio hlas.mp3.