a13n
Build AI agents and run them on cloud.
In-browser document extraction: multi-model extraction, arithmetic checks, cross-verification
Translation pending
Developer toolsHTML · JavaScriptGitHub @clkhoo5211OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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
AI invoice & document extraction — batch upload, A/B cross-check, manual review, register reconciliation. EN/中文/BM. Mirror: https://lapis-bloom-hav8.here.now/
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗▶ Live demo: GitHub Pages · here.now mirror
In-browser document extraction: invoices, receipts, delivery orders, shipment lists and more. Images (incl. iPhone HEIC), PDF, Excel/CSV, Word and video → OpenAI-compatible or Anthropic models → arithmetic checks, A/B cross-verification, manual review, export. UI in English (default), 中文 and Bahasa Melayu.
| Path | What |
|---|---|
site/index.html | The app (libraries from jsDelivr with pinned versions) |
site/route.js | Delivery route planning (stops, geocoding, road matrix, optimiser) |
tests/ | Playwright end-to-end tests + synthetic fixtures (tests/fixtures/make_fixtures.py) |
proxy/ | Optional Cloudflare Worker CORS proxy |
python/invoicelens.py | Command-line / server version with the same prompt, checks, cross-check and reconciliation as the web app |
.github/workflows/ | tests.yml → on success pages.yml + herenow.yml deploy; proxy.yml deploys the worker |
npm ci
npx playwright install chromium # once
npm test
The tests serve site/index.html locally, map the jsDelivr libraries to node_modules (same pinned versions) and mock every model call, so they need no network or API keys. They cover: extraction and all result tabs, arithmetic checks, batch queue (concurrency, failure, retry, CSV), manual review (A/B pick, inline edit, undo, reviewed, export), autosave/restore, HEIC/Excel/Word/CSV, progress/cancel/timeout, i18n (no untranslated text in en/ms/zh), mobile overflow at 375px, and provider presets.
When you change a library version in site/index.html, change it in package.json too.
Same extraction rules as the web app, for batch or server use (any OpenAI-compatible endpoint or Anthropic):
pip install -r python/requirements.txt
export IL_A_KEY=sk-... # model A; optional model B via IL_B_KEY / --b-*
python python/invoicelens.py invoices/ register.pdf \
--a-base https://openrouter.ai/api/v1 --a-model google/gemini-2.5-flash --out out/
Writes results.json, summary.csv, tables.csv and reconcile.csv to --out. Run python python/invoicelens.py -h for all options (--tiles, --no-enhance, --pdf-image, --concurrency, --b-type anthropic, …). Text-based PDF pages are sent as their text layer by default (exact digits, fewer tokens); summary.csv includes token usage. Tests: pytest python/tests (a test fails if the prompt drifts from site/index.html).
Every push runs Tests. Only when they pass do GitHub Pages and here.now deploy that exact commit (here.now needs the HERENOW_API_KEY repository secret). Both deploy workflows can also be run manually.
Some OpenAI-compatible providers block calls from web pages. proxy/ is a Cloudflare Worker that only accepts requests from the two sites above and forwards them to the X-Target-Base URL without storing keys. Add CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID secrets, run “Deploy CORS proxy”, and paste the worker URL into Model settings → Advanced.
All interfaces used for stop locations (OpenStreetMap, Google Places, SerpApi, local helpers), their parameters, limits and first-use checklist: docs/location-apis.md.