Strukku
A receipt bookkeeping tool built on an open-weight vision-language model. It offers freelancers and small merchants a photograph-to-entry automated bookkeeping solution with support for recognizing multilingual informal receipts, validating structured output, and exporting to CSV.
Timeline (last 90 days)
Strukku is a receipt bookkeeping tool built on the Gemma open-weight vision model, submitted in the second week of the Hacktoberfest open-source AI challenge.
Strukku calls the google/gemma-4-31b-it:free free inference endpoint through OpenRouter for receipt recognition, where it indicates the instruction-tuned version.
Strukku uses the Zod runtime data validation library to validate model output before writing to the database, and if strict structured output is not supported there is also a pure JSON fallback parser, trusting no unvalidated model output.
Strukku's technology stack includes TanStack Start, TypeScript, TanStack Router, TanStack Query, TanStack AI (@tanstack/ai + @tanstack/ai-openrouter), with Supabase providing Postgres and storage on the backend, and Tailwind CSS for styling.
Strukku's processing flow is: receipt photo → base64 encoding → store in Supabase Storage → call the vision model → structured JSON output → Zod validation → write to the receipts table → generate the ledger and support CSV export.
Strukku's entire AI call is isolated in a single module, src/server/ai/adapter.ts, so switching models or providers requires changing only one line of code.
The Strukku project was completed within the challenge window, and both type checking and the production build pass, but it has not yet been fully run end-to-end with real photographed receipts in a live Supabase + OpenRouter environment, and extraction accuracy in real scenarios remains unverified.
Strukku's code is hosted at github.com/fatik07/strukku, the README includes Supabase SQL setup instructions, and it uses an MIT-style license.
All Facts (8)
Strukku is a receipt bookkeeping tool built on the Gemma open-weight vision model, submitted in the second week of the Hacktoberfest open-source AI challenge.
50%UnverifiedStrukku calls the google/gemma-4-31b-it:free free inference endpoint through OpenRouter for receipt recognition, where it indicates the instruction-tuned version.
50%UnverifiedStrukku uses the Zod runtime data validation library to validate model output before writing to the database, and if strict structured output is not supported there is also a pure JSON fallback parser, trusting no unvalidated model output.
50%UnverifiedStrukku's technology stack includes TanStack Start, TypeScript, TanStack Router, TanStack Query, TanStack AI (@tanstack/ai + @tanstack/ai-openrouter), with Supabase providing Postgres and storage on the backend, and Tailwind CSS for styling.
50%UnverifiedStrukku's processing flow is: receipt photo → base64 encoding → store in Supabase Storage → call the vision model → structured JSON output → Zod validation → write to the receipts table → generate the ledger and support CSV export.
50%UnverifiedStrukku's entire AI call is isolated in a single module, src/server/ai/adapter.ts, so switching models or providers requires changing only one line of code.
50%UnverifiedThe Strukku project was completed within the challenge window, and both type checking and the production build pass, but it has not yet been fully run end-to-end with real photographed receipts in a live Supabase + OpenRouter environment, and extraction accuracy in real scenarios remains unverified.
50%UnverifiedStrukku's code is hosted at github.com/fatik07/strukku, the README includes Supabase SQL setup instructions, and it uses an MIT-style license.
50%