Skip to content
CAI
Software that uses CAICheck a score

thinkinglabs/toggl-google-sheet

46.5

Weak · 21 September 2026

410

lines of production code

JavaScript

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Google Apps Script application that generates timesheets by fetching time entries from the Toggl API and rendering them into a Google Sheet. It employs a modular architecture with dedicated components for data retrieval, modeling, and sheet operations. The project utilizes a modernized build pipeline with Babel and Webpack for JavaScript transpilation and Jest for testing.

Features

Initial implementation of the Timesheet Generator application

The application is introduced with a new architecture that fetches time entries from the Toggl API, aggregates them by day and client, and renders the resulting timesheet into a Google Sheet. Key components include \FetchTimesheet\ for data retrieval, \Timesheet\ and \TimesheetDayEntry\ for data modeling, and \GoogleSpreadsheetAdapter\ for sheet operations. The entry point \App.js\ wires these components together, while \Code.js\ provides the Google Sheets menu trigger. Comprehensive Jest test suites are added for all modules, including \Dates\, \Strings\, \TogglRepository\, and the renderer.

src · high confidence

Behavioural changes

Modernize build pipeline with Babel, Webpack, and Jest

The project now uses Babel and Webpack to transpile ES6+ code to ES5, enabling the use of modern JavaScript features while maintaining compatibility with Google Apps Script. A new Webpack configuration and Babel preset are introduced to handle the build process. Additionally, the test suite has been migrated from QUnit to Jest, providing a more robust testing environment.

(repo-wide) · high confidence

Dependencies

Update project dependencies and lockfile

The project's dependency graph has been updated, introducing a new package-lock.json and upgrading several dev dependencies including Babel, Webpack, Jest, and Clasp. These updates ensure the project uses the latest stable versions of its build and testing tools.

(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 51 → 47 (-4.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 69 → 67 (-1.2)
  • Architecture 69 → 69 (+0.0)
  • Maturity 45 → 47 (+2.1)
  • Readiness 44 → 33 (-10.8)
  • Security 75 → 80 (+5.0)

Resolved (39)

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

New (43)

  • Critical CVE: [GHSA redacted] (package-lock.json)
  • Critical CVE: [GHSA redacted] (package-lock.json)
  • Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (the committed lockfile is in a format this engine cannot resolve)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • …and 23 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

thinkinglabs/toggl-google-sheet 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 2e4e7a5ee5484e13bcfcb69648ebe56f2c64e602 — 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-fa71c66cabd8.