Skip to content
CAI
Software that uses CAICheck a score

DockYard-Academy/curriculum

50.7

Adequate · 23 September 2026

9.6k

lines of production code

Elixir

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a comprehensive Elixir and Phoenix LiveView curriculum and development toolkit. It provides a structured learning path with modular lessons, exercises, and example projects like PicChat and a blog application. The system also includes utility libraries and automated Mix tasks for maintaining and validating the curriculum's Markdown notebooks and documentation.

How it got here

2022 — Curriculum restructuring and tooling

12 changes.

This period focused on reorganizing the course curriculum into a modular, hierarchical structure with standardized templates and navigation. The team introduced a new utility library to automate notebook maintenance, formatting, and dependency updates, supported by a comprehensive test suite to ensure content integrity.

2023 — Example project expansion

8 changes.

This period focused on expanding the repository's example projects, introducing new templates for a counter app, a blog, a chat application, and interactive games. Each example was scaffolded with full-stack Phoenix LiveView features, Tailwind CSS styling, and comprehensive test coverage.

Features

Add Phoenix blog example project with Tailwind CSS and Heroicons

Added the 'blog' example project to the repository, providing a complete starter template for building a blog application with Phoenix LiveView. The project is configured with Tailwind CSS for styling and includes the full set of Heroicons (v2.0.16) for UI elements. This example demonstrates a modern Phoenix setup with a formatter configuration, asset pipeline integration, and standard build artifacts ignored.

_example\projects/blog · high confidence

Add PicChat example project with full-stack Phoenix LiveView features

The PicChat example project is introduced, providing a complete reference implementation for a chat application. It includes user authentication, message management, and email notifications via Swoosh. The project integrates background job processing with Oban to schedule daily summary emails, and utilizes Ecto for database interactions and LiveView for the interactive UI. Configuration files for development, test, and production environments are also added to support the application's lifecycle.

_example\_projects/pic\chat · high confidence

Add interactive games example project

The Games example project now includes a menu-driven interface for playing three games: a number guessing game, Rock Paper Scissors, and Wordle. A shared ScoreTracker GenServer tracks points across sessions, and the Wordle implementation features colored terminal output for feedback. Tests have been added for the ScoreTracker and Wordle logic.

_example\projects/games · high confidence

Add new reading materials and template for the curriculum

Added a new \\_template.livemd\ file to standardize the structure of reading lessons, including a consistent header, navigation bar, and footer. Introduced new reading materials for Advanced Pattern Matching, Agents and ETS, APIs, Arithmetic, Atoms, Benchmarking, Big O Notation, and more. Each lesson includes review questions, code examples, and navigation links to previous and next lessons.

reading · high confidence

Added LiveView example project with Tailwind CSS and Heroicons

The \example\_projects/live\_view\_counter\ directory now contains a complete Phoenix LiveView example application. This includes configuration for code formatting, asset compilation, and Git ignore rules. The project is configured to use Tailwind CSS for styling, with a custom \tailwind.config.js\ that integrates Heroicons as SVG-based UI components. The JavaScript layer is set up to initialize Phoenix sockets and LiveView, enabling real-time, interactive user experiences directly in the browser.

_example\_projects/live\_view\counter · high confidence

Added counter demo application scaffolding

The demos/counter directory now contains a complete Phoenix application structure, including the main module, application supervisor, mailer, web layer (router, controllers, layouts, components), and telemetry setup, providing a functional starting point for a counter demo.

demos/counter · high confidence

Adds Tailwind CSS and Heroicons to the PicChat example project

The PicChat example project now includes a Tailwind CSS configuration and a full set of Heroicons SVGs in the assets directory. This enables the use of Tailwind utility classes and Heroicon components in the frontend, supporting the project's interactive features like infinite scroll and live view updates.

_example\_projects/pic\chat/assets · high confidence

Introduce new Utils library structure for curriculum management

The \utils/lib\ directory has been restructured with new modules to manage curriculum notebooks. A \Utils.Notebooks\ module now handles loading, formatting, and updating \.livemd\ notebooks, including title casing for headings and updating dependencies. A \Utils.Notebooks.Notebook\ struct defines the data model for notebooks, and a basic \Utils.Application\ OTP application has been added to support the library.

utils/lib · high confidence

New Mix tasks for curriculum maintenance and automation

The repository introduces a suite of new Mix tasks to automate and streamline curriculum maintenance. These include \add\_notebook\_boilerplate\ to inject standard headers and footers into notebooks, \format\_notebooks\ to apply formatting and link to documentation, and \update\_deps\ to update dependencies within notebooks. Additional tasks include \update\_readme\_outline\ to sync the README with the course outline, \deprecate\_unused\_files\ to mark unused notebooks, \stats\ to display course statistics, \spell\_check\ for content validation, and \all\_tasks\ to run the full maintenance pipeline. A deprecated \bc\ task now redirects to \all\_tasks\.

utils/lib/mix · high confidence

New exercises and templates for Phoenix, Agents, and Algorithms

The curriculum now includes a comprehensive set of new exercises for building a Phoenix blog application, covering authentication, comments, cover images, deployment, and custom features. Additionally, new exercises have been added for implementing an Agent-based Journal, creating a Battle Map using protocols, and solving Anagrams. A new \_template.livemd file has been introduced to standardize the structure of exercise files across the curriculum.

exercises · high confidence

Behavioural changes

Added Credo configuration and project scaffolding for the utils library

The utils library now includes a Credo configuration file (.credo.exs) that defines a comprehensive set of code quality and style checks for the project. Additionally, supporting files for project formatting (.formatter.exs), build artifacts (.gitignore), and documentation (README.md) have been added to establish the utility library's development environment and tooling.

utils · high confidence

Removed Elixir Structs, Modules, Behaviors, and Protocols lesson

The lesson file for the 'Structs, Built-In Modules, Behaviors, and Protocols' section has been deleted from the curriculum. This removes the instructional content covering Elixir structs, built-in modules, behaviors, and protocols, likely as part of a broader curriculum restructuring or content update.

curriculum/2 Fundamentals/2.4 Structs, Built-In Modules, Behaviors, and Protocols · high confidence

Removed legacy Operators lesson content

The previous version of the Operators lesson (lesson.livemd) has been deleted from the curriculum. This change removes the old lesson content in favor of a new modular structure, as indicated by the commit messages referencing a style update and separation of content into modules.

curriculum/2 Fundamentals/2.2 Operators · medium confidence

Restructured Data Types lesson into modular components

The lesson content for Data Types has been split from a single file into separate modules, with the original lesson and test files deleted in favor of a new modular structure. This change reorganizes the curriculum to separate content into distinct modules, likely to improve navigation and maintainability of the Elixir Data Types lesson.

curriculum/2 Fundamentals/2.1 Data Types · medium confidence

Simplified and restructured the course outline and setup instructions

The curriculum's entry point and documentation have been significantly reorganized. The \start.livemd\ file now provides a comprehensive, hierarchical outline of all lessons and exercises, replacing the previous flat structure. The \README.md\ has been simplified to focus on prerequisites, installation, and a link to the new outline, while removing older philosophical and grading sections. Additionally, a \.env\ file was added to configure the Livebook home directory, and the \start.livemd\ file was created to serve as the main navigation hub for the course.

(repo-wide) · high confidence

Updated Heroicons library to version 2.0.16

The \demos/counter\ demo has been updated to use Heroicons v2.0.16. This update includes a new set of optimized SVG icons, a Tailwind CSS configuration for integrating the icons, and a license file for the icon set.

demos · high confidence

Test coverage

Added comprehensive test coverage for PicChat example project; Added comprehensive test suite for notebook validation and formatting; Added test for README outline update task.

Dependencies

Update example project dependencies to Phoenix 1.7 and LiveView 0.18.18

The example projects (counter, blog, games, live\_view\_counter, pic\_chat) have been updated to use Phoenix 1.7.2, Phoenix Live View 0.18.18, and other supporting libraries. This ensures the examples remain compatible with the latest stable versions of the Phoenix ecosystem, providing users with up-to-date templates for building modern Elixir web applications.

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

Lenses

  • Code Health 99 → 98 (-0.5)
  • Architecture 100 → 88 (-12.2)
  • Maturity 59 → 59 (+0.0)
  • Readiness 24 → 42 (+17.9)
  • Security 26 → 57 (+31.3)
  • Accessibility 59 → 50 (-9.4)

Resolved (40)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Duplicated block (11 lines × 2) (example_projects/blog/lib/blog/accounts/user_token.ex)
  • Duplicated block (12 lines × 2) (example_projects/blog/lib/blog/accounts/user.ex)
  • Duplicated block (15 lines × 4) (demos/counter/lib/counter_web/telemetry.ex)
  • Duplicated block (17 lines × 2) (example_projects/blog/lib/blog_web/telemetry.ex)
  • Duplicated block (5 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (6 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (8 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (8 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (9 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (9 lines × 2) (example_projects/blog/lib/blog/accounts/user_token.ex)
  • Duplicated block (9 lines × 2) (example_projects/pic_chat/lib/pic_chat_web/live/message_live/form_component.ex)
  • Duplicated block (9 lines × 4) (demos/counter/lib/counter_web/components/core_components.ex)
  • High CVE: [GHSA redacted] (example_projects/blog/mix.lock)
  • High CVE: [GHSA redacted] (example_projects/blog/mix.lock)
  • High CVE: [GHSA redacted] (utils/mix.lock)
  • High CVE: [GHSA redacted] (example_projects/blog/mix.lock)
  • High CVE: [GHSA redacted] (example_projects/blog/mix.lock)
  • High CVE: [GHSA redacted] (example_projects/pic_chat/mix.lock)
  • …and 20 more

New (122)

  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (11 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (11 lines × 2) (example_projects/blog/lib/blog/accounts/user_token.ex)
  • Duplicated block (11 lines × 2) (example_projects/blog/lib/blog_web/user_auth.ex)
  • Duplicated block (13 lines × 2) (example_projects/blog/lib/blog/accounts/user.ex)
  • Duplicated block (14 lines × 2) (example_projects/blog/lib/blog/accounts/user_token.ex)
  • Duplicated block (14 lines × 2) (example_projects/pic_chat/lib/pic_chat_web/live/user_confirmation_instructions_live.ex)
  • Duplicated block (17 lines × 2) (demos/counter/lib/counter/application.ex)
  • Duplicated block (28–31 lines × 4) (demos/counter/lib/counter_web/telemetry.ex)
  • Duplicated block (40 lines × 2) (example_projects/blog/lib/blog_web/telemetry.ex)
  • Duplicated block (5 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (5 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (5 lines × 2) (example_projects/blog/lib/blog/accounts/user.ex)
  • Duplicated block (57 lines × 2) (example_projects/blog/lib/blog/accounts/user_notifier.ex)
  • Duplicated block (6 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (6 lines × 2) (example_projects/blog/lib/blog/accounts.ex)
  • Duplicated block (6 lines × 2) (example_projects/blog/lib/blog/accounts/user.ex)
  • Duplicated block (6 lines × 2) (example_projects/blog/lib/blog_web/user_auth.ex)
  • …and 102 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

DockYard-Academy/curriculum 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 23 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 a5e30772dc22ed4da43f039539adcf532626a483 — 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-955b9cee9818.