World Vibe Web
vibe 코딩 프로젝트용 분산 앱 스토어, GitHub 전역 오픈소스 앱을 탐색·설치
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
SPARko turns a printed promotional leaflet into an interactive shopping experience.
Ask in plain Slovenian, get verified prices, build your own catalog and jump straight from the conversation to the exact product in the original leaflet.
Ask Sparko
Verified product card
Moj katalog
Highlighted in the leaflet
SPARko is a mobile-first prototype of a conversational shopping assistant built on top of a real SPAR Slovenija promotional leaflet (catalog 40/26, valid from 30 Sep 2026).README 전문 보기 ↗SPARko turns a printed promotional leaflet into an interactive shopping experience. Ask in plain Slovenian, get verified prices, build your own catalog and jump straight from the conversation to the exact product in the original leaflet.
SPARko is a mobile-first prototype of a conversational shopping assistant built on top of two real promotional catalogs: SPAR 41/26 (36 pages) and INTERSPAR 14/26 (8 pages), with 164 verified products, both valid 7.–13. 10. 2026.
Instead of flipping through 44 pages of PDFs, shoppers talk to Sparko: they ask what something costs, what's discounted, what to cook, or what fits a budget. Every answer is backed by structured catalog data, every product can be saved to a personal Moj katalog, and every product links back to its exact spot in the original leaflet.
This is not a chatbot placed next to a PDF. The assistant, the structured catalog data and the visual leaflet are wired together.
Ask: "Koliko stane Nutella?"
→ Sparko answers with a verified product card: SPAR · Ferrero Nutella, 1 kg, 7,19 € (SPAR plus), PDF page 1 → One tap saves it to Moj katalog → "Poglej v SPAR katalogu" opens the original leaflet (SPAR or INTERSPAR) on the right page, with the product visually highlighted
The language model writes the sentence. It never decides the price.
| Natural Slovenian conversation | Free-form questions with contextual follow-ups and suggested next questions |
| Verified catalog pricing | Prices, package sizes, discounts and validity dates come from the catalog data, not from the model |
| Two catalogs, one app | SPAR 41/26 and INTERSPAR 14/26; every product, row and card carries a SPAR / INTERSPAR label |
| Home (Domov) | Full (uncropped) catalog cover cards, a Katalogi / Izdelki toggle (Izdelki opens on VSI, then Zajtrk, Pekovsko pecivo, Večerja, Osnovna živila, Mlečni izdelki …), quick actions (Kaj je najbolj znižano, Poglej izdelke po kategoriji → category sheet, Kaj je novega v katalogu, Kje je najbližji SPAR). Top list and bottom rail share one state; the middle section never moves |
| Current vs. upcoming discounts | "Kaj je najbolj znižano?" shows only currently valid discounts. Timing questions ("Kdaj bo izdelek najbolj znižan?" → "Za kateri izdelek …?", "Kdaj bo skuta v akciji?") show Znižano ta teden plus the upcoming week; every simulated future offer is marked Demo napoved |
| Moj katalog | Compact list of saved products (removal mode behind the trash icon), Pokaži na letaku, Deli seznam and a green Priporočila zate band with explained recommendations |
| Leaflet navigation | Jump from any product to its exact location in the original SPAR or INTERSPAR leaflet (/letak?katalog=…) |
| Product highlighting | 164 verified products are tappable on the leaflet pages (incl. the whole SPAR cover: Svinjska rebra, Radler …); save/remove there too |
| Recipes & budget ideas | Verified recipes built from leaflet products and budget-aware shopping suggestions |
| Typo & morphology tolerance | Handles Slovenian inflection and misspellings (skuto, skute, skta …) |
| Persistent state | Saved products and conversations survive a page reload |
| Responsive, mobile-first UI | Designed for phones first, works on desktop |
| Live AI + limited fallback | If the model is unavailable, search, product cards, saving, recipes and the leaflet keep working |
SPARko separates conversational AI from trusted catalog facts.
src/data/catalog.json, never generated.API keys stay on the server. No AI keys are exposed to the browser.
More detail on the data pipeline: docs/DATA.md · full QA log: planning/QA-REPORT.md
| Check | Result |
|---|---|
| Data validation | ✅ PASS (2 catalogs, 164 products / offers / placements, 44 pages, 3 recipes, 10 mocked future promos) |
| TypeScript typecheck | ✅ PASS |
| Lint | ✅ PASS |
| Unit tests (Vitest) | ✅ 301 / 301 |
| E2E tests (Playwright) | ✅ 115 / 115 |
| Production build | ✅ PASS |
| Browser-exposed AI keys | ✅ 0 |
Responsive layout checked at 360 / 390 / 430 px and desktop.
Requires Node.js ≥ 20.9.
npm ci
npm run dev # http://localhost:3000
Without any environment variables SPARko runs in limited mode (deterministic search, product cards, Moj katalog, recipes and the leaflet all work). To enable live AI, copy .env.example to .env.local and set:
| Variable | Purpose |
|---|---|
ANTHROPIC_API_KEY | Server-side key for live AI answers |
AI_MODEL | Optional model override (default claude-haiku-4-5) |
UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN | Persistent rate limiting, required for live AI in production |
ALLOW_UNLIMITED_AI | true enables live AI in production without rate limiting (private demos only) |
The whole app (pages, /api/*, leaflet pages and product photos) is behind individual accounts: each reviewer gets a one-time activation link plus a personal username and password, bound to exactly one browser (installation/profile). State (accounts, browser bindings, visit counts) lives in Upstash Redis; sessions last 24 hours. Authentication fails closed: without the store and SPARKO_AUTH_SECRET nobody can sign in.
Required: UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN (or KV_REST_API_URL / KV_REST_API_TOKEN) and SPARKO_AUTH_SECRET (at least 32 random characters). Optional: SPARKO_PUBLIC_URL, SPARKO_STORE_PREFIX.
npm run auth:provision -- create --reviewer <username> --admin <admin> --base-url https://<deployment> --env-file .env.local
npm run auth:provision -- status --env-file .env.local
Generated passwords and links are written only to .secrets/ (git-ignored), never printed. Admin operations live at /skrbnik. Setup, distribution, admin operations and the security limitations are in docs/ACCESS.md.
Other scripts: npm run build, npm run lint, npm run typecheck, npm test, npm run test:e2e, npm run validate:data.
Everything printed in the two leaflets is verified catalog data. Two things are explicitly mocked for the demo and are labelled as such in the data files:
src/data/future-promos.json, "mock": true): 10 invented promotions for 14.–20. 10. 2026 that feed Znižano naslednji teden. They are not from any leaflet; the current price always comes from the verified offer.src/lib/demoForecast.ts): every verified product can be answered with "Naslednji teden", labelled Demo napoved. Without a structured promo above, no future price or percentage is shown.src/lib/promoCalendar.ts): when the real date is outside the catalog validity, the demo treats the catalog week (from 7. 10. 2026) as "this week".printed_badge); 6 more are demo_editorial picks chosen by the authors and are not claimed by the leaflet.Details and validator rules: docs/DATA.md.
SPARko is an independent prototype / showcase implementation, not an official SPAR product. It uses SPAR Slovenija and INTERSPAR leaflets (SPAR 41/26, INTERSPAR 14/26, 7.–13. 10. 2026) as demo data; prices and dates reflect that leaflet, not current in-store prices. SPAR and related brand names belong to their respective owners.