Case study / Internal product

CodeBook

Internal UI Source of Truth for Design, Development, Product, and QA

A custom internal component documentation and discovery tool, built from scratch in Angular and shaped by a familiar Storybook-style experience.

Internal ToolAngular 20/21Built from ScratchStorybook-inspiredCross-functional
Build Custom Angular internal product.
Experience Storybook-style familiarity.
Audience Design, development, product, and QA.

What is CodeBook?

A shared workspace for the real UI component system

CodeBook is a custom internal Angular application that documents and renders the reusable UI components used across product applications. It brings live examples, supported variants and states, usage guidance, implementation references, and accessibility checks into one shared workspace for design, development, product, and QA.

Built within the same Angular codebase as the shared component system, CodeBook renders the maintained implementation rather than recreating it for documentation.

It follows a familiar Storybook-style browsing pattern, but its product structure, documentation model, and implementation were created from scratch for the organisation’s workflow.

CodeBook connects the shared Angular component system with live previews, states, guidance, and accessibility.

Cross-functional value

Built for the whole UI delivery team

CodeBook creates one shared reference across the complete UI delivery lifecycle, helping design, development, product, and QA make better decisions from the same maintained component system.

  1. 01

    Designers

    Experience how components are implemented, verify design fidelity, and confirm that design intent holds across real states, interactions, and technical constraints.

  2. 02

    Developers

    Reuse maintained components with confidence using clear standards, supported variants and states, and implementation-ready references.

  3. 03

    Product managers

    Understand what already exists, verify that product screens use standard components, and separate genuine product needs from unnecessary one-off variations.

  4. 04

    QA

    Validate UI against a stable baseline for expected behaviour, variants, states, and accessibility, making testing more consistent and less subjective.

Why it needed to exist

The issue was not only documentation. It was workflow friction.

UI knowledge was fragmented across tools and people, making standards difficult to locate and decisions difficult to verify.

Where knowledge lived

  • UI knowledge scattered across repos, Figma, chat, and team memory.
  • Component guidance depended on knowing where to look and whom to ask.
  • Design intent, implementation details, and validation expectations lived in different places.
  • Important states and edge cases were not consistently documented.

What fragmentation caused

  • Teams recreated patterns when the standard was difficult to discover.
  • Repeated clarification slowed design and development decisions.
  • Components and edge states became inconsistent across screens.
  • QA validation became subjective when expected behaviour was unclear.
  • One-off implementations increased avoidable rework and maintenance.

Goals

The goal was to improve the complete UI delivery workflow

The aim was to create a more standardised, discoverable, and repeatable way for teams to make UI decisions, reuse established patterns, and validate implementation with less ambiguity and rework.

01

Standardisation

Establish one trusted baseline for component behaviour, states, usage patterns, and styling decisions across applications.

02

Discoverability

Help teams quickly understand what already exists without searching through repositories, design files, chat threads, or individual memory.

03

Design fidelity

Give designers a reliable view of implemented components so design intent can be validated against real behaviour and supported states.

04

Product clarity

Help product teams distinguish between an existing standard, a valid enhancement, and an unnecessary one-off variation.

05

Repeatable QA

Provide QA with a stable reference for expected component states, interactions, validation behaviour, and accessibility expectations.

06

Faster delivery with less rework

Reduce repeated clarification, duplicate implementation, and late-stage correction by aligning teams around the same reference earlier.

My role and ownership

Owned end to end, from identifying the product gap to delivering the internal tool

I identified the workflow gap, defined the product direction, designed the experience, and led frontend implementation, validation, and rollout.

My scope covered product vision, information architecture, documentation structure, frontend delivery, manual testing, enablement, and final decision-making.

Product vision Conceived and initiated
Problem framing Defined and validated
UX direction Planned and led
Frontend implementation Led and delivered
Documentation experience Structured and implemented
Testing and validation Led and completed
Final decisions Fully accountable
Iteration priorities Defined and prioritised

Product thinking

Make the standard choice easier than creating a one-off

The product decisions reduce friction around choosing an existing standard and make deviations deliberate.

Core product principle: Make the standard path the easiest path.

Discoverability

Make standards easy to find.

Organise components, states, and guidance around how teams actually search, reducing dependence on scattered references and individual memory.

Fidelity

Make real components visible.

Use live implementation as the source of truth, so decisions are based on actual behaviour rather than static mock-ups or assumptions.

Predictability

Make states explicit.

Document loading, disabled, error, empty, and validation states early so expected behaviour is not left open to interpretation.

Actionability

Make usage practical.

Pair examples with guidance and implementation references so teams can move directly from understanding a component to using it correctly.

Alignment

Make alignment cross-functional.

Give design, development, product, and QA one shared reference for discussing, reviewing, and validating UI decisions.

Reuse

Make reuse faster than reinvention.

Reduce the effort required to find and apply an existing pattern, making consistency easier than building another one-off solution.

UX approach

A clear workspace hierarchy keeps the component central

Sidebar navigation frames the workspace, a compact toolbar controls mode, the preview leads, and supporting documentation sits below.

Simplified CodeBook workspace anatomy with component navigation, a toolbar, live preview, and documentation tabs.
Storybook-style layout A familiar component-first workspace reduces the effort required to understand the interface.
Preview-first experience Visual priority keeps the implemented component central while supporting information remains secondary.
Component states exposed clearly Keeping edge conditions near the default view makes expected behaviour easier to interpret.
Documentation tabs Related information is grouped below the preview without competing with the component itself.
Copy-ready references Implementation material stays close to guidance, shortening the path from reference to use.
Integrated accessibility checks Accessibility is evaluated within the component documentation experience, making it part of the standard rather than a late-stage checklist.
Theme mode support Applicable visual modes can be reviewed without leaving the component workspace.

Core features

A practical feature set for discovery, reuse, validation, and alignment

Together, these capabilities form the complete documentation and discovery product.

Discovery

Component Sidebar

Organises components and references into browsable sections so teams can quickly understand what already exists.

Trust

Live Component Preview

Renders the shared Angular component directly so its current implementation can be inspected.

Consistency

Variants and States

Documents supported variants and important states such as disabled, loading, error, empty, validation, and focus.

Decision Support

Usage Guidance

Explains when to use a component, when not to use it, and which defaults or patterns are recommended.

Implementation

API and Attribute Details

Surfaces configurable options and examples so developers can apply the standard component correctly.

Speed

Copy-ready References

Provides practical implementation references that reduce repeated searching and manual mistakes.

Validation

Theme Support

Displays components in applicable visual themes within the same documentation workspace.

Quality

Accessibility Visibility

Makes accessibility expectations and component-level checks visible inside the documentation workflow.

Sharing

Route-based Pages

Gives each component a stable page URL that can be opened and shared directly.

Product preview

Inside a CodeBook component page

A typical component page brings the live implementation, supported variants and states, usage and implementation guidance, and accessibility checks into one shared reference. The Button walkthrough below will show how these parts work together.

01 Component usage
02 Component description
03 Component attributes
04 Component accessibility

Technical architecture

A modular Angular documentation shell connected to the real component system

CodeBook is implemented as a modular feature within the existing Angular codebase. Route selection opens a component-specific page that renders the maintained shared component alongside reusable documentation panels, interaction utilities, and accessibility support.

Architecture overview

How CodeBook connects components, documentation, and validation

The architecture keeps the maintained Angular component at the centre of the documentation experience. The CodeBook feature shell combines route-driven page configuration, live component rendering, documentation panels, shared interaction utilities, and accessibility support within one consistent workspace. This keeps the documentation connected to the maintained implementation, reducing the risk of documentation drifting from the components used in the product.

CodeBook architecture showing how the shared component system connects with the Angular feature shell, route-driven component pages, live previews, documentation panels, and accessibility support.

Decision

Angular feature shell

Structure
A dedicated CodeBook feature module provides the documentation workspace and page composition within the existing Angular application.
Responsibility
Hosts navigation, mode state, routing, and the shared documentation layout.

Decision

Route-driven page model

Structure
Route selection resolves the configuration for a specific documented component.
Responsibility
Connects navigation state to a stable component documentation page.

Decision

Shared component rendering

Structure
Preview areas import components from the same shared UI system used by product applications.
Responsibility
Keeps the documented rendering connected to the maintained implementation.

Decision

Modular documentation panels

Structure
Reusable panels compose usage, description, attribute, and accessibility content.
Responsibility
Keeps documentation types consistent while allowing component-specific content.

Decision

Shared interaction utilities

Structure
Common utilities manage toolbar controls, tabs, panel resizing, and theme state.
Responsibility
Centralises interaction behaviour across component pages.

Decision

Accessibility scan support

Structure
Scan results and guidance connect to the documentation model for the selected component.
Responsibility
Places component-level accessibility information within the same page structure.

AI-assisted workflow

AI accelerated implementation, but ownership stayed human

AI supported implementation, debugging, exploration, and refinement. Its output remained subject to human review, testing, and final approval.

01 / Define

Human-led direction

  • Observed the internal workflow gap
  • Defined the product purpose
  • Planned the information architecture
  • Set UX and engineering priorities
  • Established the implementation direction

AI did not determine what needed to be built or why.

02 / Accelerate

AI-supported execution

  • Explored implementation approaches
  • Supported code scaffolding
  • Assisted with debugging
  • Helped refine repetitive implementation work
  • Suggested code and structural improvements

AI output was treated as input for review, not as a final answer.

03 / Validate

Human-reviewed delivery

  • Reviewed generated and suggested code
  • Integrated changes into the actual application
  • Manually tested functionality and edge cases
  • Refined UX and implementation details
  • Approved final decisions and remained accountable

Nothing was complete until it was reviewed, tested, and validated in context.

AI increased implementation velocity. Human judgment protected product quality.

Adoption and enablement

Designed to fit into everyday delivery conversations

CodeBook became useful because it could be referenced during the moments where UI standards are decided, reviewed, and validated.

Design reviewsDevelopment planningCode reviewsQA validationUI bug triageOnboarding

Short walkthroughs and lightweight internal storyboards helped reinforce a “CodeBook-first” habit before recurring questions returned to chat or individual memory.

Outcomes

A stronger shared vocabulary for UI quality

The observed value was a more consistent reference point for routine UI decisions, reviews, onboarding, and validation.

The clearest signal of value was a change in team language: "Check the CodeBook standard."

Stronger UI consistency.
Faster component discovery.
Less repeated clarification and rework.
Better cross-team alignment.
Easier onboarding for new team members.
A shared vocabulary for component quality.
More reliable QA validation.

Learnings

Internal tools need the same product rigor as public products

Building and introducing CodeBook clarified where shared standards succeed or fail in daily work.

Internal tools are products

Internal tools still need strong UX, clear structure, and user-centred product thinking.

Trust drives adoption

Documentation becomes useful only when teams trust that it reflects the maintained component system.

States reveal inconsistency

Loading, disabled, error, empty, and validation states need the same attention as the default component.

Alignment needs one system

Cross-functional consistency improves when design, development, product, and QA work from the same reference.

Accessibility belongs in the standard

Accessibility is more effective when it is built into component guidance and validation rather than added at the end.