Skip to content
CAI
Software that uses CAICheck a score

solid-logic-studios/bucketwise-planner

55.9

Adequate · 21 September 2026

19k

lines of production code

TypeScript

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Bucketwise Planner is a personal finance application that enables users to manage budgets and track bank transactions. It supports importing financial data via CSV and QIF files, with backend logic handling multi-user data isolation and timezone-aware date processing. The system provides a frontend interface for viewing budgets and importing transactions, alongside a backend API for data management and validation.

Features

Introduce dark mode support and CSV/QIF transaction import

Users can now toggle between light and dark themes via a new ThemeToggle component, with preferences persisted in local storage. Additionally, a new CSV/QIF import wizard allows users to upload and map transaction files, with support for custom presets and detailed preview/commit workflows. The API client was refactored to use a dedicated ApiClientError class for better error handling, and transaction models were updated to support source/destination buckets for transfers.

frontend/src · high confidence

Support for importing bank transactions via CSV and QIF files

Users can now import bank transactions from CSV and QIF files. The backend introduces a new CSV import system that supports multiple bank formats (including a specific importer for Commonwealth Bank Australia) and a generic mapped CSV format, alongside QIF import. This includes validation schemas, use cases for previewing and committing imports, and a registry to detect and parse different CSV formats. Additionally, the database schema is updated to support multi-user data isolation by making user\_id the primary key for budget profiles, and new columns are added to track timezone-aware fortnight boundaries for accurate date handling.

backend · high confidence

Behavioural changes

The project has been renamed from 'budgetwise-planner' to 'bucketwise-planner' across the codebase. This includes updating GitHub repository links in the README, CONTRIBUTING, and SUPPORT files to point to the new repository name. The Docker Compose configuration has been updated to use the new image names (bucketwise-planner-backend, bucketwise-planner-frontend) and network name (bucketwise). Additionally, the ESLint configuration has been consolidated into a single root-level config file (eslint.config.mjs) that applies to both frontend and backend TypeScript/JavaScript files, replacing the previous separate configurations.

(repo-wide) · high confidence

Fixes

Fixes for Docker build, linting, and API path configuration

The frontend build process has been improved by removing the standalone ESLint configuration file in favor of a workspace-level setup, and the Dockerfile has been updated to install 'curl' in the runtime image. Additionally, Vite environment variables (VITE\_API\_BASE, VITE\_AUTH\_BASE) are now explicitly set to use relative paths (/api, /auth) to ensure correct proxying in Docker deployments, and the README has been updated to reflect these changes and clarify date handling patterns.

frontend · high confidence

Dependencies

Update build tooling and backend dependencies

The project updated several dependencies and build configurations to improve tooling and runtime support. The backend added the date-fns-tz library for timezone-aware date handling and upgraded multer from 2.0.2 to 2.1.1. The frontend development environment upgraded Vite from 7.2.4/7.3.0 to 7.3.2. The workspace root added ESLint and Prettier configuration scripts and devDependencies, while removing duplicate ESLint-related packages from the frontend's devDependencies. Version numbers for the backend (1.0.6), frontend (0.0.6), and workspace root (0.5.0) were also updated.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 56 → 56 (-0.4)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 87 → 82 (-5.1)
  • Architecture 97 → 91 (-5.8)
  • Maturity 83 → 81 (-2.1)
  • Readiness 51 → 48 (-3.2)
  • Security 60 → 70 (+10.4)
  • Accessibility 48 → 48 (+0.0)

Resolved (49)

  • Coverage not included — suite not readable by the collector
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (frontend/pnpm-lock.yaml)
  • …and 29 more

New (147)

  • BarefootAdvisorService.formatPageContext (cognitive 45) (backend/src/domain/services/barefoot-advisor.service.ts)
  • BarefootAdvisorService.formatPageContext (cyclomatic 22) (backend/src/domain/services/barefoot-advisor.service.ts)
  • ChartsView.ChartsView (cognitive 16) (frontend/src/views/ChartsView.tsx)
  • ChatWidget.ChatWidget (cognitive 21) (frontend/src/components/ChatWidget.tsx)
  • ChatWidget.ChatWidget (cyclomatic 22) (frontend/src/components/ChatWidget.tsx)
  • ClassTooLong: CsvImportWizardModal (frontend/src/components/transactions/import/CsvImportWizardModal.tsx)
  • ClassTooLong: DebtsView (frontend/src/views/DebtsView.tsx)
  • ClassTooLong: TransactionsView (frontend/src/views/TransactionsView.tsx)
  • Coverage not measured — JavaScript/TypeScript suite
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • CsvImportWizardModal.CsvImportWizardModal (cognitive 68) (frontend/src/components/transactions/import/CsvImportWizardModal.tsx)
  • CsvImportWizardModal.CsvImportWizardModal (cyclomatic 61) (frontend/src/components/transactions/import/CsvImportWizardModal.tsx)
  • CsvImporterRegistry.resolve (cognitive 18) (backend/src/application/import/csv/csv-importer-registry.ts)
  • CsvParser.parse (cognitive 22) (backend/src/application/import/csv/csv-parser.ts)
  • CsvParser.parse (cyclomatic 16) (backend/src/application/import/csv/csv-parser.ts)
  • DashboardView.DashboardView (cognitive 25) (frontend/src/views/DashboardView.tsx)
  • DashboardView.DashboardView (cyclomatic 31) (frontend/src/views/DashboardView.tsx)
  • DebtPayoffMilestones.DebtPayoffMilestones (cognitive 23) (frontend/src/components/charts/DebtPayoffMilestones.tsx)
  • DebtPayoffMilestones.DebtPayoffMilestones (cyclomatic 21) (frontend/src/components/charts/DebtPayoffMilestones.tsx)
  • …and 127 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

solid-logic-studios/bucketwise-planner was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 27ff33ad401dd8d2c565cf4f6009f418e512cb76 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.