- build-image/: Dockerfile bundling JDK 17, the Android SDK, and
Node.js (needed by Gitea's JS-based actions) - the app has no
native code, so no NDK
- build-image.sh/upload-image.sh: extended to also build/push this
image alongside the existing OCR pipeline tools image
- run-image.sh: runs `make android` inside the image against a live
checkout, for a CI-equivalent local build
- Makefile: `make android` builds and versions a release APK into
dist/, from the current git tag
- .gitea/workflows/build.yml: now pulls the custom image and just
runs `make android`, replacing the ad-hoc Node/SDK install steps
- README.md: describes the pipeline, server, app, and build tooling
- registry.env.example: fix REGISTRY_IMAGE to be fully-qualified
(an unqualified name was silently resolving pushes to Docker Hub
instead of the configured registry)
Self-hosted, verifiable pipeline for extracting structured data (station,
date/time, price per litre, litres, discount, total) from German fuel
receipt photos: grayscale + mild bilateral filter + contrast stretch,
Tesseract OCR, then LLM structuring via a small local model (Qwen 2.5,
served by Ollama). Each step is independently runnable and inspectable
through numbered scripts against a shared tooling container.
Ollama runs as its own long-lived container (0_run_ollama.sh), separate
from the stateless per-receipt pipeline steps, so the model stays loaded
in memory between runs. Includes a containerized ground-truth batch test
(test_batch.sh) that reproduces the full pipeline over the test receipts
and reports per-field accuracy.
Targets eventual deployment on a Raspberry Pi 4 k3s cluster.