DockYard-Academy/curriculum
50.7
Adequate · 23 September 2026
9.6k
lines of production code
Elixir
primary language
5
measurements over time
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.