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.
Translation pending
NIRIKSHA — AI-powered verification of packaged commodity declarations against the Legal Metrology (Packaged Commodities) Rules, 2011.
Translation pending
BusinessTypeScript · PythonGitHub @anantgagan29-sketchOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
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
Loading the full README. The saved excerpt is shown below.
AI-assisted compliance screening for packaged commodities, against the Legal
Metrology (Packaged Commodities) Rules, 2011.
Photograph a product label; the declarations on it are read, normalised, and
tested against the requirements that apply to that package. The result says
what was found, what it was tested against, and — where the reading was not
confident enough to be sure — says that instead of guessing.
NIRIKSHA is a decision-support tool. It is not a statutory inspection and it
is not a government certification. Findings need confirmation by a person.Read the full README ↗AI-assisted compliance screening for packaged commodities, against the Legal Metrology (Packaged Commodities) Rules, 2011.
Photograph a product label; the declarations on it are read, normalised, and tested against the requirements that apply to that package. The result says what was found, what it was tested against, and — where the reading was not confident enough to be sure — says that instead of guessing.
NIRIKSHA is a decision-support tool. It is not a statutory inspection and it is not a government certification. Findings need confirmation by a person.
frontend/ React + Vite interface
backend/ FastAPI service: vision, rules engine, storage
docs/ Architecture and deployment
How the system is put together, where the data lives, and what it deliberately does not claim: docs/ARCHITECTURE.md.
Two terminals. The backend first, because the frontend looks for it.
Backend
cd backend
python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt
echo "GEMINI_API_KEY=your-key-here" > .env
./.venv/bin/python -m uvicorn main:app --port 8000
Frontend
cd frontend
npm install
cp .env.example .env.local # points at http://localhost:8000
npm run dev -- --port 5180
Open http://localhost:5180.
Without .env.local the interface starts on built-in demonstration data
rather than calling the backend — it looks like it is working, so it is worth
knowing which of the two you are looking at.
.env is git-ignored. The key belongs there and in the host's environment
settings — never in the frontend, and never committed.
The frontend is a static build and goes anywhere. The backend is a Python service and needs a Python host. These instructions use Vercel and Render, both of which have a free tier.
Deploy the backend first: the frontend needs its URL, and the backend needs the frontend's origin, so one of them has to go first and be told about the other afterwards.
git init
git add -A
git commit -m "NIRIKSHA"
git branch -M main
git remote add origin https://github.com/<you>/niriksha.git
git push -u origin main
render.yaml, so the build and start commands are already
set. Confirm Root Directory is backend.GEMINI_API_KEY — your key.ALLOWED_ORIGINS — leave empty for now; step 4 supplies it.https://<your-service>.onrender.com/health — it should return
{"status":"healthy"}.frontend. vercel.json covers the rest.VITE_API_BASE_URL = https://<your-service>.onrender.comVITE_API_BASE_URL is not optional here. Vite reads it at build time, and
with it unset the deployed site quietly runs on demonstration data instead of
calling your API — everything appears to work, and none of it is real. If a
scan returns a result instantly and always says the same thing, this is why.
Back in Render, set ALLOWED_ORIGINS to the Vercel URL, for example
https://niriksha.vercel.app, and redeploy.
This is not a formality. The backend names the origins it will answer, rather than allowing any site to call it, so until it knows the frontend's address the browser blocks every request as a CORS failure.
Open the deployed site, go to Inspect Product, and upload a label. A real scan takes twenty to sixty seconds and returns declarations read from your image. If it answers instantly, the frontend is on demonstration data — go back to step 3.
Everything below has a working default; set them only to change behaviour.
Backend (backend/.env locally, environment settings on the host)
| Name | Default | What it does |
|---|---|---|
GEMINI_API_KEY | — | Required. Vision model access. |
ALLOWED_ORIGINS | localhost origins | Origins the API answers. Comma-separated. |
AI_MODELS | eight models, fastest first | Tried in order. Each carries its own daily free-tier allowance, so several models means a day's use does not end with the first. |
ENABLE_READABILITY | false | A second vision call per scan, adding per-declaration confidence. Off halves the API requests an inspection costs. |
SCAN_CACHE_ENABLED | true | Identical images are answered from the store rather than sent again. |
GEMINI_TIMEOUT_SECONDS | 70 | Whole-request budget for the vision stage. |
PER_MODEL_TIMEOUT_SECONDS | 22 | One model's slice, so a slow model cannot consume the budget and leave the rest untried. |
Frontend (frontend/.env.local, environment settings on the host)
| Name | Default | What it does |
|---|---|---|
VITE_API_BASE_URL | empty | Where the API lives. Empty means no backend: the interface runs on built-in demonstration data instead of calling one. |
VITE_FORCE_CLIENT_PIPELINE | false | Forces on-device OCR and rules, ignoring the backend. |
Quota runs out, and models have slow days. The inspection does not stop:
image → cache hit? → result, no API request
↓ miss
first model that answers, exhausted ones skipped
↓ none answer
the device reads the label itself: OCR → fields → the same rules
A model that reports exhausted quota is set aside rather than asked again on the next scan. Nothing is invented along the way — when a field cannot be read confidently it is reported for review, never passed or failed on a guess.
192.168.x.x address will not work; localhost is exempt.cd backend && ./.venv/bin/python test_ai_provider.py
./.venv/bin/python test_date_normalizer.py
./.venv/bin/python test_compliance_dates.py
./.venv/bin/python test_compliance_rules.py
cd frontend && npx tsc --noEmit -p tsconfig.app.json && npm run build