Skip to content

About

Local-first desktop app that turns synced SharePoint spreadsheets into dashboards and decks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

KPIntelligence

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.

Weekly QA/QC dashboard with generated sample data

The screenshot uses the generated sample data in src/data/sampleData.ts. The contractors and IDs are made up.

Product model

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.

Local-first data

  • 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.com and 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 .kpidashboard packages 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.

Development

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:dev

The 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.

Build

npm run build:web
npm run tauri:build

Updater bundles have to be signed with the same key existing installs already trust:

TAURI_SIGNING_PRIVATE_KEY="$(< "$HOME/.tauri/kpintelligence.key")" npm run tauri:build

Releases

Installers 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.

About

Local-first desktop app that turns synced SharePoint spreadsheets into dashboards and decks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages