Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Calculate the cost of bouquet using voice recognition and your own price list
翻訳待ち
Loading the full README. The saved excerpt is shown below.
A Progressive Web App for florists: dictate a bouquet, get its sale price.
See SPEC.md for requirements and decisions.
Current stage: core app (roadmap step 3): calculator with on-device Whisper, catalog, price table, settings.
• data/catalog-draft.xlsx — built-in catalog (names in he/ru/en, no prices). Edit it, then run npm run catalog.
• private/my-prices.xlsx — the price table used as default prices in the app
(npm run catalog builds them into src/data/catalog.json, which is public).
The folder itself (invoices, working copies) is git-ignored.Read the full README ↗A Progressive Web App for florists: dictate a bouquet, get its sale price. See SPEC.md for requirements and decisions.
Current stage: core app (roadmap step 3): calculator with on-device Whisper, catalog, price table, settings.
npm install
npm run dev # dev server
npm run build # type-check and production build (includes the service worker)
npm run preview # serve the production build on http://localhost:4173
npm run icons # regenerate PNG icons from public/favicon.svg
npm test # unit tests (phrase parsing, pricing)
npm run photos # generate missing catalog pictures (OpenAI; key in .env.local)
npm run photos:app # shrink generated pictures into public/photos/
npm run catalog # rebuild src/data/catalog.json from data/price-list.tsv
data/price-list.tsv — the built-in catalog with default prices: the Google Sheet
"Bouquet Calculator Prices" downloaded as TSV (Hebrew, Russian, English, Price, Bought as;
section rows Flowers / Roses / Greenery). Replace it and run npm run catalog; the result,
src/data/catalog.json, is public.data/catalog-ids.json — keeps each item's ID stable (Hebrew name → ID);
data/spoken-names.json — extra names people say out loud, per item ID.data/photo-prompts.xlsx — the picture for every price-list row and what to draw;
generated-photos/ (git-ignored) holds the generated originals.private/ — invoices and working copies, git-ignored.The app is published on GitHub Pages: https://bouquetprice.github.io/
(repository bouquetprice/bouquetprice.github.io, organization owned by the author's account)
Every push to main runs .github/workflows/deploy.yml: tests, build (at the site
root for a <owner>.github.io repository, otherwise under /<repository>/), deploy. Installed apps then show
"A new version is ready" and update when the florist taps it.
Microphone access requires HTTPS. For a quick check of unpublished changes, serve the build and open a temporary tunnel (free, no account; the link changes every time and app data is stored per address):
npm run build && npm run preview -- --port 4173
cloudflared tunnel --url http://localhost:4173
src/model/ — data model, pricing rules, phrase parsing (parseBouquet.ts), sound-alike matching, Excel.src/store/ — on-device storage (IndexedDB), photos, backup.src/speech/ — Whisper (on-device recognition) worker and client, audio recording, hints.src/screens/ — Calculator, Catalog, Prices (+ item editor), Settings (+ speech diagnostics).src/i18n/ — UI translations (English, Hebrew, Russian). Add a language by adding a file.src/platform.ts, src/pwaUpdate.ts — install hints, update prompt.