Invoice automation · CLI · TUI · Apache-2.0

Turn your inbox into
spending dashboards.

OpenBoardCLI reads the receipts in your Gmail and turns them into per-biller spending dashboards — on a schedule, as tabs in one authenticated React app, under a master Overview tab that tracks spend across all of them. Seven fetchers ship ready; Biller Studio writes one for any biller you name, showing you the exact email before your model ever sees it. Privacy-first: pick Local only (Ollama / LM Studio, nothing leaves your machine), Hybrid, or All remote before anything else. Any CSV, Excel, or JSON file joins the same app the same way.

$ npm install -g openboard-cli
Read the quickstart
The OpenBoardCLI terminal UI: a boxed banner reading '[>_] OpenBoardCLI — Analytics Dashboard Generator — v2.3.0', above a menu with Onboarding — start here, Integrations, Dashboards, Settings, and Exit, a one-line description of the highlighted option, and the key hints 'arrows move, enter selects'.
The welcome screen — openboard

# the loop

A CSV, Excel, or JSON file you already have skips to step 03.

  1. 01connect gmail

    Pick your privacy mode first — Local only, Hybrid, or All remote — then an LLM provider. Add your inbox under Integrations → Gmail: the App Password is encrypted in ~/.openboard and reaches each fetcher through OPENBOARD_GMAIL_* in its environment at run time, never on disk.

  2. 02pick your billers

    Seven fetchers ship ready — Amazon, Amazon Pay, Rapido, Swiggy Food & Instamart, Uber, Urban Company, Zomato. For anything else, Biller Studio takes a sender address and a subject fragment and writes the fetcher for you.

  3. 03let it fetch

    Runs happen on a schedule or on demand, each biller's receipts landing in its own CSV. A CSV that gained rows refreshes that biller's dashboard; a biller with data but no dashboard gets one built. Watch the fetch log, or hit Stop fetch mid-run.

  4. 04the overview tab

    A master tab is generated across all your dashboards — total spend, past 7 days, cross-app trend, per-app breakdown. In All remote mode the app builds, pushes to GitHub, and deploys to Vercel, health-checked and tagged for rollback.

Run it once by hand — or host it and let the loop close by itself. In All remote mode, with agent billers sync on a scheduler (GitHub Actions, a VPS cron, any runner), steps 03 and 04 repeat unattended: receipts arrive, the dashboards that changed regenerate, and the live app redeploys and health-checks itself. You only ever open the Overview tab.

# biller studio

No shipped list covers your billers — so it writes the fetcher.

Forwarded receipts and PDF attachments count too. The model writes only the biller-specific regions and OpenBoardCLI splices them into its own skeleton — about 5× less output, so even a slow local model finishes without truncating. Ready-made fetchers ship for Amazon, Amazon Pay, Rapido, Swiggy Food & Instamart, Uber, Urban Company and Zomato; Biller Studio covers everything after that.

# what's in the box

Gmail in, dashboards out

Gmail lives under the Integrations menu and turns receipts into per-biller spending dashboards on a schedule. Seven fetchers ship ready. Your App Password is encrypted and reaches each one through its environment at run time — never written to disk.

Biller Studio — it writes the fetcher

Give it a sender address and a subject fragment. It samples one real email, shows you the exact text before anything reaches your model, then writes, compiles and dry-runs the fetcher. PDF and forwarded receipts included. Generated code is scanned — it reads mail and writes a CSV, nothing else.

Runs itself in the cloud

Put agent billers sync on any scheduler — GitHub Actions, a VPS cron, your own runner — and the loop closes without you. New receipts land, changed dashboards regenerate, and the live app redeploys itself. Runs are lock-serialised, so a cron tick overlapping an open TUI is safe.

Master Overview tab

A landing tab across all your dashboards: total spend, past 7 days, cross-app trend, per-app breakdown, and top spending + saving insights. One place to see what every biller cost you.

Three privacy modes

Your receipts are your bank statement, so the mode comes first. Local only — local LLM and local preview, nothing leaves your machine. Hybrid — cloud LLM, local preview. All remote — cloud LLM, GitHub, live Vercel app.

Bring your own model

Ollama or LM Studio for fully local generation — or OpenAI, Anthropic, Codex, Gemini, Moonshot, xAI, Mistral, OpenRouter. Pick a model, set the effort dial from low to max, switch any time with /model. Keys are encrypted with AES-256-GCM.

Fetches you can watch — and stop

Scheduled runs write to a persistent fetch log, and the screen says fetching now while one is in flight. Stop fetch aborts mid-run — even one the scheduler started.

Headless & scriptable

Drive the whole pipeline from an agent — NDJSON events, step-labelled progress, stable error codes, dry runs, idempotency keys. Flip to the view for the command contract.

Any file works too

Email isn't the only input. Hand it a CSV, Excel or JSON path and it parses, infers types, and summarizes the columns — then an internal chat drives the model. The result is another tab in the same app.

# quickstart

Node 18+. Fetchers need Python 3 with beautifulsoup4 (plus pdfplumber for PDF billers).

# install from npm
npm install -g openboard-cli

# launch the TUI — Integrations → Gmail to add billers and open Biller Studio
openboard

# …or wire the inbox up headlessly, then sync on a cron
openboard agent setup billers --scripts-dir ./fetchers \
  --biller-email "you@gmail.com" --biller-app-password "<16-char App Password>" --json
openboard agent billers sync --json

# any file works the same way (csv, xlsx, or json)
openboard agent create --data ./invoices.xlsx --name "Invoices" --type invoices
openboard agent update --dashboard invoices --prompt "add a month-over-month chart"

# from source instead
git clone https://github.com/syedateebulislam/openboard
cd openboard && npm install && npm run build

Built with TypeScript, Ink, and a pluggable LLM layer. Generated apps use React, Vite, Recharts, and Tailwind.