Skip to content
CAI
Software that uses CAICheck a score

DenverCoder1/readme-typing-svg

61.7

Adequate · 26 September 2026

881

lines of production code

PHP

with JavaScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a PHP-based service that generates animated typing SVGs for display in GitHub README files. It provides a controller-driven architecture to render customizable text animations, supporting features like multiline text, font embedding, and various styling options. The project includes an interactive demo site for previewing configurations and a robust error handling mechanism to ensure reliable output.

Features

Added HTTP status code enumeration and exception interface

The library now includes a new \ResponseEnum\ that enumerates standard HTTP response status codes (1xx through 5xx) as typed constants, providing a structured way to reference status codes. Additionally, an \IStatusException\ interface has been introduced to define a contract for exceptions that return a \ResponseEnum\ status, with a concrete \UnprocessableEntityException\ implementation provided to demonstrate this pattern.

denvercoder1/readme-typing-svg, src/exceptions, src/interfaces · high confidence

Added jscolor color picker library to the demo site

The demo site now includes the jscolor JavaScript library (jscolor.min.js), enabling interactive color selection capabilities within the demo interface.

src/demo/js · high confidence

Initial project scaffolding and documentation

This change establishes the foundational structure for the Readme Typing SVG project. It introduces essential configuration files including a \.gitignore\ to exclude vendor, IDE, and environment files, a \.prettierignore\ for code formatting, and a \Procfile\ to define the Heroku web process. It also adds \app.json\ for Heroku deployment metadata, a \CODE\_OF\_CONDUCT.md\ based on the Contributor Covenant v2.1, and a \CONTRIBUTING.md\ detailing local setup and testing procedures. The \README.md\ is significantly expanded to include a quick setup guide, a demo site link, an extensive list of user examples, and a comprehensive table of configuration options.

(repo-wide) · high confidence

Introduction of dedicated view classes for rendering and error handling

The application now uses specific view classes to manage output generation. RendererView handles the rendering of typing SVGs by extracting a comprehensive set of parameters (including font, color, background, size, multiline support, pause duration, repeat options, and letter spacing) from its model into the template scope. Additionally, a new ErrorView class has been introduced to render error messages using a dedicated ErrorModel, ensuring that error states are handled with their own distinct view logic.

src/views · high confidence

New RendererController centralizes SVG rendering and error handling

A new RendererController has been introduced to manage the generation of SVG outputs. This controller encapsulates the logic for instantiating the appropriate model and view classes, handling template paths, and managing HTTP response headers such as content type and cache directives. It also implements robust error handling by catching exceptions during initialization and switching to an error model and view, ensuring that status codes are correctly set based on the type of exception encountered.

src/controllers · high confidence

New demo site for Readme Typing SVG

A new interactive demo page (src/demo/index.php) is now available, allowing users to configure and preview typing SVGs directly in the browser. The interface supports customizing text lines, font family, weight, size, letter spacing, colors, and animation timing (duration, pause, repeat, random order). It includes a live preview, dark mode toggle, and options to copy the generated Markdown or HTML code. The site also integrates GitHub buttons for starring and sponsoring, Google Analytics tracking, and links to the FAQ.

src/demo · high confidence

New model layer for SVG rendering and error handling

This change introduces a new set of model classes in src/models to handle SVG generation logic and error reporting. RendererModel centralizes parameter validation (including font, color, size, and layout options) and manages the fetching and conversion of Google Fonts into base64-encoded CSS via the new GoogleFontConverter class. Additionally, a new ErrorModel is added to structure error messages and associated templates for consistent error display.

src/models · high confidence

New visual styles and dark mode support for the demo site

The demo site now includes dedicated CSS files that establish a modern visual identity, featuring a responsive layout, styled form inputs, and a prominent dark mode toggle. Users will see a new loading animation while images process, and the interface now supports a dark theme that adjusts colors for backgrounds, text, and borders, with the toggle button positioned in the top-right corner (moving to the bottom-right on small screens).

src/demo/css · high confidence

Behavioural changes

New error template and refactored main template with enhanced animation controls

The \src/templates\ directory now includes a dedicated \error.php\ template that renders a centered, red monospace error message within an SVG. The \main.php\ template has been restructured to support multiline text rendering, allowing multiple lines to be displayed sequentially. This update also introduces new user-configurable parameters: \vCenter\ to control vertical text alignment, \letterSpacing\ for character spacing, and \repeat\ to disable the looping animation. Additionally, the template now accepts a \background\ color parameter to style the SVG background.

src/templates · high confidence

Simplified entry point with controller-based rendering

The application entry point (src/index.php) has been refactored to delegate rendering logic to a RendererController. The script now initializes the environment, instantiates the controller with request data, sets headers, and outputs the rendered result, centralizing the request handling flow.

src · high confidence

Test coverage

Added unit tests for renderer options and card generation

Added new test suites (\OptionsTest\ and \RendererTest\) that verify the \RendererModel\ and \RendererController\ classes. These tests cover validation of input parameters such as font, color, size, width, height, and centering, ensuring that invalid inputs trigger appropriate exceptions or fallbacks. They also validate the SVG output for normal card rendering, multiline support, error handling when lines are missing, and the embedding of Google fonts.

tests · high confidence

Dependencies

Initial project setup with PHP 8.1 and PHPUnit 11

This change introduces the initial \composer.json\ and \composer.lock\ files for the project, establishing the dependency baseline. It sets the minimum PHP version to 8.1 and configures \vlucas/phpdotenv\ at version ^5.3 for environment variable management. For development, it upgrades the testing framework to PHPUnit 11, replacing previous 9.x versions, and includes scripts for starting a local server and running tests.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 45 → 62 (+16.6)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 69 → 69 (+0.0)
  • Maturity 59 → 49 (-10.5)
  • Readiness 35 → 74 (+39.3)
  • Security 40 → 74 (+33.7)

Resolved (13)

  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • No tests found
  • Test reliability not included

New (21)

  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • High CVE: [GHSA redacted] (composer.lock)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • No ADRs found
  • Orphaned files with no living knowledge
  • Outdated: vlucas/phpdotenv
  • …and 1 more

Changes since last survey

  • 5 commits — 4 feature/other, 1 fixes

By area

  • (root) — 4 commits
  • src/demo — 1 commit

Notable commits

  • fix: fix(demo): escape parentheses in generated markdown/HTML output (#482)
  • change: chore: Bump version to 0.10.0
  • change: docs(readme): Clean up examples list
  • change: docs: Add usage examples to README (#484)
  • change: docs: Update search results image source

Architecture

  • Containers 0 added · 0 removed · contexts 1 added · 0 removed · edges 0 added · 0 removed

Added bounded contexts (1)

  • denvercoder1/readme-typing-svg

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

Survey your own repository

DenverCoder1/readme-typing-svg 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 26 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 d6509f04777899a54f33c6d5d930afd20ecee769 — 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-a15879f6f801.