Upload a bank statement (CSV / Excel / PDF), store it locally in SQLite, and ask
questions about it in plain language. The language model runs fully on your
machine via node-llama-cpp — there is
no Ollama, no external server, and no cloud. After you download a model once,
the app works completely offline and your bank data never leaves your device.
Works on macOS and Windows (and Linux). No C/C++ compiler required —
both the LLM engine (prebuilt llama.cpp binaries) and SQLite (Node's built-in
node:sqlite) ship ready to run.
- Node.js ≥ 22.5 (uses the built-in
node:sqlite). Check withnode --version. Download from https://nodejs.org.
npm install
npm startThen open http://localhost:3000 in your browser.
- Download a model — on first launch, pick a small model and click Download. It downloads once from Hugging Face. After that you'll see the "This app is now offline" notice and never need the internet again.
- Upload your bank statement — CSV,
.xlsx/.xls, or a text-based PDF. It's parsed and stored in a local SQLite database (data/bank.db). - Ask anything — e.g. "How much did I spend in total?", "What was my biggest debit?", "List all grocery transactions."
Tip: for accurate totals and arithmetic, use the 1B or 3B model. The 0.5B model is fast but unreliable with numbers.
| Concern | Implementation |
|---|---|
| LLM inference | node-llama-cpp (embedded llama.cpp), streamed token-by-token |
| Model download | node-llama-cpp model downloader, from Hugging Face, into models/ |
| Storage | Built-in node:sqlite with FTS5 (data/bank.db) |
| File parsing | papaparse (CSV), xlsx (Excel), pdf-parse (PDF) |
| Retrieval | Whole statement fed to the model when it fits; FTS5 keyword search otherwise |
| UI | Express server + a single static HTML/JS page |
- Models and your data are stored under
models/anddata/and are git-ignored — they never get committed. - This replaces the previous Python/Streamlit + Ollama prototype (
app.py), which required a separately-installed Ollama server.
server.js Express server + API routes
src/
models.js Catalog of downloadable models
llm.js node-llama-cpp: download, load, streamed chat
db.js node:sqlite storage + FTS5 search
ingest.js CSV / XLSX / PDF parsing
rag.js Builds the context/prompt from the stored statement
public/ Frontend (index.html, app.js, style.css)