A desktop app for Windows and macOS that turns spreadsheets in locally synced SharePoint or OneDrive folders into interactive dashboards, PDF reports, and PowerPoint decks. Created by Noah Garrett.
You build visuals by clicking together a data sentence instead of writing formulas or a separate measures language. The weekly QA/QC dashboard I built for construction quality reporting ships as the first featured template, next to dashboards users create themselves.
Other pieces: guided spreadsheet intake and repair, quick chart suggestions, multi-select slicers, cross-filtering, portable dashboard packages, Team Libraries, and signed in-app updates. It's a Tauri 2 app with a React and TypeScript front end; charts are ECharts.
The screenshot uses the generated sample data in src/data/sampleData.ts. The contractors and IDs are made up.
Library
-> nested folders
-> projects
-> connected source folders
-> featured or custom dashboards
-> pages
-> draggable and resizable widgets
Custom visuals use a visible query sentence such as:
Count ID from Electrical Inspection Log
grouped by Work Week Observed
where Inspection Phase is Final
The sentence compiles to a typed predicate and aggregation tree (src/studio/domain). Nothing is evaluated as JavaScript or as a formula. Each visual keeps its source and rule visible, reports matched-row counts, and can show the rows behind a number.
- Absolute SharePoint and OneDrive paths stay in app data under the local operating-system profile.
- Optional SharePoint or Teams web shortcuts are stored locally and can only open
*.sharepoint.comand Teams HTTPS addresses. - Spreadsheet rows are read into memory and are not copied into an application database.
- Dashboard definitions are saved separately from source data.
- An incomplete sync never replaces the last valid source snapshot.
- Portable
.kpidashboardpackages leave out spreadsheet rows, credentials, and absolute source paths. - Team Libraries scan user-approved local sync folders and install dashboards as independent local copies.
More detail is in ARCHITECTURE.md, DESIGN.md, and PRODUCT.md.
Requirements: Node.js 24+, Rust stable, and the platform prerequisites for Tauri 2.
npm install
npm run dev # Vite dev server on http://127.0.0.1:5274
npm run typecheck
npm test # Vitest unit tests
npm run test:e2e # Playwright, starts its own dev server on port 5391
npm run tauri:devThe web build runs without Tauri. In the browser the featured dashboard opens with sample data, and you can load files by hand. Folder watching, native saves, Team Library folders, and signed updates need the desktop app.
npm run build:web
npm run tauri:buildUpdater bundles have to be signed with the same key existing installs already trust:
TAURI_SIGNING_PRIVATE_KEY="$(< "$HOME/.tauri/kpintelligence.key")" npm run tauri:buildInstallers and the update feed are published to noahfgarrett/kpintelligence-releases. The app's updater reads latest.json from that repo's latest release.
The release workflow in .github/workflows/release.yml creates a draft release, builds on macOS (universal) and Windows, writes SHA256SUMS.txt, and publishes only after every updater asset is uploaded. It needs two repository secrets:
RELEASE_REPO_TOKEN: token with Contents write access to the release repository.TAURI_SIGNING_PRIVATE_KEY: updater private key.
The Tauri bundle identifier is still com.noahgarrett.qcxintelligence from the app's earlier name, QCx Intelligence, so older installs get KPIntelligence as an update.
