Skip to content
CAI
Software that uses CAICheck a score

anvaka/city-roads

35.6

Weak · 2 October 2026

3.9k

lines of production code

JavaScript

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a web-based mapping application built on Vue 3 and Vite, designed for visualizing geospatial data through a multi-layer rendering engine. It allows users to customize individual map layers with granular color controls, manage draggable labels, and export views as vector or raster images. The platform supports flexible data querying with custom projections and bounding box searches, optimized for mobile interaction and efficient data caching.

Behavioural changes

Major refactoring of the rendering engine and data loading architecture

The core library has been significantly restructured to support a multi-layer rendering system and more flexible data queries. The previous single-layer scene model is replaced by a GridLayer system that allows multiple independent layers, each with its own color and line width settings, and the ability to hide layers without removing them. Data loading is now handled by a new LoadOptions and Query architecture that supports custom projections, bounding box searches, and raw query templates. The scene API exposes methods to manage these layers, set global colors, and export scenes to SVG or PNG, while internal modules like Grid and Progress have been updated to support these new capabilities.

src/lib · high confidence

Migrate to Vue 3 and enable per-layer color customization with SVG export

The application has been upgraded from Vue 2 to Vue 3, updating the initialization logic in main.js and component imports. This release introduces granular color controls, allowing users to customize the colors of individual map layers via the settings panel rather than applying a single global color. Additionally, users can now export the current view as a vector image (.svg) alongside the existing raster (.png) option. The app also features draggable labels and overlays, improved touch handling for mobile devices, and a switch to Cloudfront for data caching.

src · high confidence

Migrated components to Vue 3 composition and directive APIs

The components in this directory have been updated to be compatible with Vue 3. This includes replacing the Vue 2 \value\ prop and \input\ event with the Vue 3 \modelValue\ prop and \update:modelValue\ event (seen in \ColorPicker.vue\ and \EditableLabel.vue\), swapping the \beforeDestroy\ lifecycle hook for \beforeUnmount\ (\FindPlace.vue\), and updating the \v-click-outside\ directive to use the new \created\, \updated\, and \unmounted\ hooks instead of the deprecated \bind\, \update\, and \unbind\ hooks (\clickOutside.js\). Additionally, \ColorPicker.vue\ now imports a local \Sketch.vue\ component from the new \vue3-color\ directory rather than the external \vue-color\ package.

src/components · high confidence

Migrated to Vue 3 and Vite build tooling

The application has been upgraded from Vue 2 to Vue 3, accompanied by a migration from the legacy Vue CLI build system to Vite. This change is evidenced by the removal of older configuration files (\.babelrc\, \.eslintrc.js\, \.postcssrc.js\) and the introduction of \vite.config.js\ and a Vue 3-specific ESLint configuration. Additionally, the HTML entry point was updated to use Vite's module-based script loading (\type="module"\) and the root DOM container was renamed from \\#app\ to \\#host\ to align with the new framework setup.

(repo-wide) · high confidence

Removal of legacy Webpack 1.x configuration files

The project has removed the legacy configuration files \config/dev.env.js\, \config/index.js\, and \config/prod.env.js\. These files previously managed development and production environment variables and Webpack 1.x-specific settings such as the dev server port, proxy table, and source map options. Their deletion indicates a migration away from the older Webpack template structure, likely requiring users to rely on environment variables or a new configuration system for build and development settings.

config · high confidence

Removed legacy Webpack 3 build configuration

The project's Webpack 3 build scripts have been removed, including the production and development configuration files (webpack.prod.conf.js, webpack.dev.conf.js), base configuration, and utility modules. This change eliminates the manual build orchestration and legacy loader setup previously handled by these files.

build · 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 35 → 36 (+1.1)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 59 → 59 (+0.1)
  • Architecture 100 → 100 (+0.1)
  • Maturity 44 → 44 (+0.0)
  • Readiness 18 → 20 (+2.1)
  • Security 80 → 82 (+1.9)
  • Accessibility 39 → 39 (+0.0)

Resolved (3)

  • Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (6)

  • Outdated (npm): d3-geo
  • Outdated (npm): ngraph.events
  • Outdated (npm): pbf
  • Outdated (npm): tinycolor2
  • Outdated (npm): vue
  • Outdated (npm): w-gl

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

Survey your own repository

anvaka/city-roads 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 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 0d89417bb942b34fa87775897cc8cf8437d17b79 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.