FloCafe
FloCafe is the free, local-first restaurant POS in the FloPOS ecosystem. Run orders, tables, kitchen display, and local data without a software subscription.
翻訳待ち
リポジトリ情報はまだ収集していません。
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗En «nettleser for nettbutikker». Du legger selv inn butikkene, grupperer dem i kategorier og søker etter varer i mange butikker samtidig.
/ fokuserer søkefeltet.Next.js 16 (App Router), TypeScript, Tailwind CSS v4 og cheerio (HTML-parsing på serveren).
Lagring: alt lagres i nettleserens localStorage. Dataene ligger altså bare på enheten du bruker. Bruk eksport/import for backup eller for å flytte data mellom enheter. Lagringen ligger bak grensesnittet Repository i src/lib/storage.ts, så en Supabase-backend kan kobles på senere uten endringer i UI-et.
Krever Node.js 20.9 eller nyere.
npm install
npm run dev
Åpne http://localhost:3000. Første gang lastes fem eksempelbutikker inn (Brando, Volt, Retro, NLY Man og Decades). Søkemalene deres er beste gjetning og er ikke verifisert. Bruk «Test mal» i redigeringsvinduet og juster ved behov.
Andre kommandoer:
npm run build
npm run lint
Ingen er påkrevd. Alle er valgfrie og gjelder bare server-API-ene.
| Variabel | Standard | Beskrivelse |
|---|---|---|
SCRAPER_USER_AGENT | Butikkbrowser/1.0 (...) | User-Agent ved henting av butikksider. Legg gjerne inn en kontaktadresse. |
SEARCH_CACHE_TTL_SEC | 300 | Hvor lenge produktresultater caches (sekunder). |
SEARCH_RATE_LIMIT_PER_MIN | 20 | Maks antall «Hent produkter»-søk per klient-IP per minutt. |
SCRAPER_HOST_INTERVAL_MS | 1500 | Minste tid mellom forespørsler mot samme butikk. |
SCRAPER_ALLOW_PRIVATE | – | Bare for lokal testing (1) mot butikker på localhost. Har ingen effekt i produksjon. |
Eller fra kommandolinjen:
npx vercel --prod
Etter deploy kan du installere appen fra nettleseren («Legg til på Hjem-skjerm» på iPhone, eller installer-ikonet i Chrome).
En mal er en adresse der {query} byttes ut med søkeordet, f.eks. https://butikk.no/search?q={query}. Når du legger inn en ny butikk, gjør GET /api/template?url=… dette:
<form> med søkefelt),/search?q=, /sok?q=, /?s=, /catalogsearch/result/?q= …) og godtar bare mønstre der testordet faktisk vises på resultatsiden.«Test mal» (GET /api/template?test=…) sjekker en mal på samme måte. Noen butikker laster resultatene med JavaScript. Da kan testen ikke bekrefte malen, så åpne testsøket og sjekk selv.
POST /api/search)Nettleseren sender søkeordet og de valgte butikkene (med maler og selektorer, siden dataene ligger i nettleseren). Serveren svarer med en NDJSON-strøm, én linje per butikk så snart den er ferdig:
*/$ støttes, egen User-agent: butikkbrowser-gruppe går foran *, stier normaliseres (æ/ø/å, prosentkoding), og innhold etter 500 KiB ignoreres. Filen huskes i 24 timer. Søkesider som er sperret, hentes ikke. Kan ikke robots.txt leses (nettverksfeil, 5xx eller 429), hentes ingenting, og appen prøver igjen etter ett minutt.Product/ItemList), deretter OpenGraph, og til slutt CSS-selektorer du legger inn under «Avansert» i butikkinnstillingene.Mange butikker viser søkeresultatene med JavaScript, så HTML-en inneholder ingen produkter. Butikkens eget søke-API gir da raske og rene data. Du velger det under «Avansert → Produkt-API»:
| Type | Endepunkt | Eksempel |
|---|---|---|
| Shopify | /search/suggest.json?q=… | Shopify-butikker |
| WooCommerce | /wp-json/wc/store/v1/products?search=… | Kleins |
| Egendefinert JSON | Din egen URL-mal med {query}, pluss stier som data.products, name, price.amount og images.0.url | Retro (/api/navigation/product?query=…), Decades (Voyado Elevate: /publicapi/esales/search?q=…) |
This is the beginning of the README. Read the rest at the original. Read the full README ↗