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.
Book UK to Europe freight in plain English and catch shipment mistakes before they leave the UK.
CommerceTypeScript · CSSGitHub @manasvinipant-cloud9OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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 ↗Conversational shipment booking and "pre-flight" error checker for UK → Germany / France / Netherlands freight (GBP only). Next.js (App Router, TypeScript) on Vercel, Gemini for plain-English chat.
.xlsx, .ods) or a Bookings CSV and an Items CSV.
Every booking is checked against the rate card (Sheet 3) and rulebook R-01 to R-10 (Sheet 4). No LLM, no key.Every result gives: what is wrong, how serious (Red blocks, Amber warns), how to fix it, a recommended carrier with the reasoning for the seller's priority, a plain-language confirmation, and what happens next. No login.
npm install
cp .env.example .env.local # then paste your key after GEMINI_API_KEY=
npm run dev # http://localhost:3000
Without a key the app still works: chat falls back to the offline parser (field: value lines, which the example buttons
use) and says so on screen. Batch upload never needs a key.
npm run verify # typecheck + tests + production build
Local: .env.local (git-ignored). Production: Vercel → Project → Settings → Environment Variables (same names). Never commit keys.
| Variable | Purpose |
|---|---|
GEMINI_API_KEY (or GOOGLE_API_KEY) | Enables plain-English chat. Server-only; the browser never sees it. |
GEMINI_MODEL | Primary model. Default gemini-3-flash-preview (measured fastest and most complete on this task). |
GEMINI_FALLBACK_MODELS | Comma-separated models tried in order when the primary is out of quota (429), overloaded (503) or retired (404). A failed model is skipped for 5 minutes. |
GEMINI_THINKING_LEVEL | minimal, low (default), medium, high or off. Low keeps extraction to ~2 s. |
To see which models work with your key and how fast, open /api/status?probe=extract (runs the real extraction prompt per model).
A wrong key fails fast with a clear message in the chat. The header has an Offline mode switch for demos if the API is slow.
vercel.json).GEMINI_API_KEY (and optionally the two model variables). Apply to Production and Preview.Public URL plus your key means anyone can spend your quota: use a key with a spending cap. If the quota runs out the chat says so and judges can switch on Offline mode; batch upload and all rule checks keep working.
src/app/ page, API routes: /api/chat (stateless), /api/batch, /api/status
src/components/ App, ChatTab, BatchTab, ReportView
src/lib/engine/
rules.ts R-01..R-10, pure functions
carriers.ts fixed rate card, hard weight filter, priority scoring, cost cap, justification
report.ts findings + carrier + plain-language summary
conversation.ts state machine: slots, patch ops, stale totals, phases (state is plain JSON)
extractor.ts output sanitising + the keyless offline parser
gemini.ts Gemini extractor with model fallback (server-only)
sheets.ts Bookings + Items workbook / CSV / .ods loader and batch runner
fixtures/ sample workbook + CSV pair, golden.json
public/samples/ sample files served to the browser
fixtures/golden.json holds outputs of the original Python engine; npm test asserts this TypeScript
engine reproduces every finding, carrier pick, justification and chat reply exactly.