World Vibe Web
The distributed app store for vibe-coded projects. Browse, discover, and install open-source apps from across GitHub.
Sparko – pomočnik za demo SPAR katalog: poišči izdelek, shrani ga v Moj katalog in ga poglej v originalnem letaku.
Translation pending
CommerceTypeScript · PythonGitHub @gabercmatejOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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).Read the full 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.