Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Shiprocket for cross-border freight, with a pre-flight checker. UK sellers book pallets to Germany, France or the Netherlands by chatting or uploading a spreadsheet; every booking gets Red/Amber issues with exact fixes, a recommended carrier with the reasoning shown, a confirmation with next steps, and a draft commercial invoice.
No login. Open the site, then either Book by chat (try the clickable example, then change a detail such as "add a pallet") or Upload a file (use "Download a sample file to try", or the case template). Click any booking row to see its full detail.
chat message ──► LLM extracts fields ─┐
├─► Booking ─► runChecks() ─► recommendCarrier() ─► buildConfirmation() ─► UI + invoice
.xlsx upload ──► parse.ts (no LLM) ───┘ (R-01…R-10 (feasibility, (status, next steps)
+ DATA checks) ranking, ETA)
Both flows produce the same Booking object and go through the same pipeline (lib/rules, lib/recommend.ts, lib/confirm.ts).
All rule results and carrier maths are deterministic TypeScript (lib/rules, lib/recommend.ts). The Gemini API (server routes only; key never reaches the browser) is used only to: extract fields from chat, write friendly replies, flag dangerous goods from free text as a backstop, and suggest HS codes (always labelled "Suggested — please confirm"). In chat the reply writer is given the engine's results and told not to contradict them. If the API is down or unconfigured, uploads still work completely (keyword-only dangerous goods, no HS suggestions) and chat shows an "assistant unavailable" banner.
090111 into 90111. Exactly 5 digits → the message says so and offers the zero-padded code to confirm. HS codes are always handled as strings.DATA-xx issues (Lyon + Germany, unsupported city, no items, orphan items, duplicate IDs, non-numeric/negative values, zero pallets, unreadable dates).05-11-2026 is 5 November). "Today" is computed at request time in Europe/London./ratesA separate mode for parcels between any two addresses, using live carrier rates from Shippo (SHIPPO_API_KEY). It does not touch the case flow above.
lib/countries.ts, lib/shippoRules.ts): declared values are in the dispatch country's currency; every rate is converted into it (ECB reference rates via frankfurter.dev) and the original quote is shown too; the checks and "what usually applies" export notes follow that country (e.g. UK EORI/export declaration, US EEI above US$2,500, EU export declaration outside the EU)..xlsx only.GEMINI_API_KEY; without it chat cannot read messages (upload is unaffected)./result/[id]) are not implemented; everything works without Supabase.cp .env.example .env.local # add GEMINI_API_KEY
npm install
npm run dev # http://localhost:3000
npm test # Vitest: rules, recommender, parser, chat merge
npm run make-sample # regenerates public/sample-test-data.xlsx (dates relative to today)
Env: SHIPPO_API_KEY (live rates), GEMINI_API_KEY, GEMINI_MODEL (default gemini-3.8-flash), GEMINI_FAST_MODEL (default gemini-3.5-flash-lite).
Reference material is in docs/ (case brief and template workbook).