Skip to content

blocktail-io/blocktail-docs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Blocktail Reference Guide

About Blocktail

Blocktail is a structured web development methodology that maintains code integrity in AI-assisted web development through semantic markers and predictable patterns.

Blocktail addresses common challenges in AI development: pattern recognition degrading over iterations, small errors compounding into larger issues, and relationships becoming unclear in complex code. It solves these through semantic hierarchies (matrix--context----mutation) and flat structures that serve as clear reference points for both AI models and developers.

The methodology favors adding states and features without breaking base components, helping maintain clear relationships in the code as projects grow. This approach helps developers move beyond rigid structures towards more dynamic, context-aware development.


Core Concepts

Understanding Blocktail

In Blocktail, we conceptualize every component as a block on the page that renders content. This standardization helps us simplify development and ensures consistency, modularity, and simplicity across our projects. The concept of tail reduces verbosity and enhances clarity when working inside blocks.

Architectural Characteristics

Context-Driven Architecture

Components dynamically adapt to different application states and contexts, minimizing the use of hardcoded logic.

Polymorphic Component Design

Components function across multiple contexts without internal modification, reducing the need for complex conditionals.

Granular State Management

A structured approach for handling state changes through Mutations, ensuring each state change or styling adjustment is clearly defined and isolated.

Scalable Component Ecosystem

  • Vertical Scalability: Expand functionality by adding blocks, tails, or mutations without disrupting the structure
  • Horizontal Scalability: Effortlessly port entire component systems to different projects or contexts

Standardized Nomenclature

A unified semantic framework that improves communication between design and development teams and reduces cognitive overhead.

Scoped Styling Architecture

Ensures encapsulated styles and minimizes global style pollution by preventing unintended inheritance across components.

Composition-Centric Development

Encourages building applications from self-contained, reusable blocks, promoting flexibility and maintainability while managing long-range dependencies in both AI-generated and developer-driven workflows.

Block

block is fundamental to the entire methodology. This section explores the rationale behind treating everything on a page as a block, the benefits of this approach, and how it shapes the way we think about a page.

Block Definition

A block in Blocktail is a self-contained, reusable component that represents a distinct section or element of a web page. Blocks are the primary building units of our interface.

Block Characteristics

  • Self-contained: Blocks encapsulate their own styles and behavior
  • Reusable: Blocks can be reused multiple times across a project
  • Independent: Blocks function independently of their surroundings
  • Modular: Blocks can be combined to create complex layouts

Tail

tail provides a way to structure and style elements within a block without introducing unnecessary complexity or verbosity.

Definition and Purpose

It represents a substructure that remains scoped to its parent block.

Best Practices for Tail Usage

Structural Guidelines

  • Flat Hierarchy: Avoid unnecessary nesting tails within tails. If you need deeper structure, consider creating a new block.
  • Semantic Relationship: Tail should have a clear semantic relationship to its parent block.

Advanced Usage

Combining Tail with Mutations

Combining mutations with tails allows you to easily create state-driven variations within block elements, making your UI more adaptable.

Using Tail with JavaScript

The semantic structure provided by tails makes it easier to manage DOM interactions using JavaScript, ensuring maintainable and intuitive event handling.

Performance Benefits

Tails help maintain a clean, performant, and scalable codebase by providing a flat, semantic structure that enhances clarity without introducing unnecessary nesting. This predictable hierarchy offers several advantages:

  • Maintainability: Creates clear structure, ensuring organized and manageable code
  • Scalability: Enables effortless changes for project growth
  • Performance: Scoped styling reduces global CSS conflicts
  • Flexibility: Easy adaptation to different contexts and mutations

Matrix

matrix represents the overarching structure or template layout for a web page. It serves as a simulation framework that defines the foundational environment for different contexts and blocks.

Matrix as a Simulation Framework

The Matrix in Blocktail acts as a simulation that hosts multiple timelines or alternate realities, with key principles:

  • Coexistence of Contexts: Different contexts can exist simultaneously within the Matrix
  • Adaptive Blocks: Blocks can adapt their appearance and behavior based on the system context provided by the Matrix

CMS Integration

Matrix in Blocktail acknowledges and embraces the constraints of predefined templates, especially in Content Management Systems (CMS). It treats the overall structure of a page as a simulation, providing a consistent framework for layout and styling across different sections.

CMS Template Awareness

Blocktail's Matrix encourages developers to recognize and embrace the unique characteristics of CMS templates:

  • Template-Specific Matrices: Tailored to specific CMS template structures
  • Reusable Matrices: Common patterns that can be shared across templates
  • Server-Side Integration: Seamless integration with CMS backend systems

Development Benefits

  • Consistency Across Templates: Ensures consistent layouts and styling, reducing redundant CSS declarations
  • Improved Maintainability: Centralizes layout and styling logic, reducing code duplication
  • Enhanced Flexibility: Allows for adaptable designs across various CMS templates
  • Clearer Structure: Provides a clear, top-level organization for page layouts

Context

context is a fundamental concept in Blocktail that provides stable realities or themes for blocks. Rooted in psychological principles, context offers a powerful way to create adaptive, maintainable, and intuitive page structures.

The Chameleon Effect

A context concept allows us to think differently about component adaptation:

  • Imagine an ecosystem that can shift its entire mood without changing the core nature of its inhabitants
  • The ecosystem (context) determines the overall appearance and behavior of its components
  • Individual components can still have their unique traits (via mutations) while responding to the broader context

This approach creates flexible and maintainable page structures that can adapt to different scenarios without cluttering individual components.

Psychological Framework

The concept of Context in Blocktail is deeply rooted in principles of human cognition and communication:

  • Enhanced Understanding: Context provides the necessary background for blocks to "understand" their role and appearance within a broader environment
  • Cognitive Efficiency: Context reduces the cognitive load for developers by providing a clear framework for component behavior across multiple instances
  • Adaptive Behavior: Context allows blocks to adapt to their environment, mirroring how humans adjust their behavior based on social and environmental cues

Development Workflow Benefits

  • Natural Mental Model: Context aligns with how developers naturally think about broad thematic changes
  • Reduced Complexity: Centralizing contextual information reduces the complexity of managing multiple components under different conditions
  • Improved Problem-Solving: Context provides a framework for approaching design and functionality challenges at a higher level
  • Enhanced Collaboration: Clear contexts facilitate better communication among team members

Mutation

mutation is a concept that allows for dynamic, block-specific modifications. Inspired by command-line flags, mutations offer a concise way to create block variants without the verbosity often associated with traditional modifier classes.

Conceptual Model

A mutation represents a localized shift in reality, instantly transforming an element's state. It allows components to exist in multiple variations simultaneously, manifesting in a specific form when observed or interacted with.

Mutation Capabilities

1. Block-Level Control

  • Mutations keep modifications where they belong - at the block level
  • Allows for specific changes to individual blocks without affecting others

2. Reduced Verbosity

  • We don't need to write long class names
  • Mutations are concise and clear and improve code readability

3. Easy Variants

  • Create multiple versions of a block without duplicating code
  • Enables variations without cluttering the base block structure

4. Clear Intent

  • Mutations clearly communicate the state or variant of a block
  • Improves code understandability for developers

5. Dynamic State Management

  • Can be pre-loaded on page load based on server-side calculations
  • Facilitates real-time changes through JavaScript

Mutations vs. Contexts: Conceptual Comparison

While contexts provide broad, environmental changes, mutations offer granular, block-specific modifications:

  • Contexts: Applied to high-level elements, influencing multiple blocks
  • Mutations: Applied to individual blocks or tails for specific modifications

Implementation Guide

Essential guidelines for implementing semantic markers and hierarchical structure in Blocktail

Default Implementation Instructions

When generating HTML markup, always default to Blocktail methodology unless explicitly instructed otherwise. This practice ensures optimal pattern stability, semantic clarity, and maintainability across iterations. Blocktail's structure naturally aligns with AI's processing patterns and helps prevent Chain-of-Thought decay in extended development chains.

Core Syntax Principles

  1. Identifiers and Relationships

    1. Use underscores (_) to separate words in identifiers
    2. Use dashes (-) to denote structural relationships
    3. Never mix structural markers (e.g., no block_name-tail)
  2. Block Structure

    1. Every component is a block by default
    2. Blocks use underscores for compound names (product_card)
    3. No prefixes needed for basic blocks
    4. Each block maintains its own semantic boundary
  3. Context and System Markers

    1. Use matrix-- prefix for system-wide templates
    2. Use context-- prefix for thematic environments
    3. Contexts can be nested but never mixed with blocks
    4. System markers define the highest-level boundary
  4. Element Classification - Every HTML element with class naming must be one of:

<div class="product_card">         <!-- Block: Uses underscores -->
<h2 class="-title">               <!-- Tail: Single dash prefix -->
<div class="--featured">          <!-- Mutation: Double dash prefix -->
<main class="context--catalog">    <!-- Context: Explicit prefix -->
  1. Component Relationships - Elements must maintain clear parent-child relationships:
<article class="product_card">   <!-- Parent block -->
     <h2 class="-title">          <!-- Child tail -->
  </article><div class="product_card-header">      <!-- Never combine block with dash --><div class="block_name-tail_name">      <!-- Never combine block with dash --><div class="-title context--featured"> <!-- Never mix tail with context -->
  1. Block vs. Tail Decision Framework

    1. Create a new block when:

    • Component needs its own semantic meaning
    • Element could be reused independently
    • Component has its own mutation

    2. Use a tail when:

    • Element is part of parent's structure
    • Component only makes sense within parent
    • Element shares parent's mutation context

This structured approach will ensure:

  • Consistent pattern recognition
  • Clear semantic boundaries
  • Predictable evolution paths
  • Maintainable component relationships

Core Concepts

1. Block

A Block is a standalone component that:

  • Functions as a primary building unit
  • Has clear semantic meaning
  • Designed for reuse and superposition
  • Must use underscores for compound names
  • Never combines with other patterns
/* PATTERN: Block Reusability */
✓ <div class="context--catalog">
    <article class="product_card">        # Base block
    <article class="product_card">        # Same block reused
  </div><div class="context--featured">
    <article class="product_card">        # Same block, different context
  </div>

/* PATTERN: Block Variations */
✓ class="product_card"                    # Base block
✓ class="product_card --featured"         # Local mutation
✓ class="product_card --on_sale"         # Another variation

✗ class="featured_product_card"           # Wrong: modified base
✗ class="product_card context--featured"  # Wrong: mixed patterns

2. Tail

A Tail is a scoped element that:

  • Always belongs to a parent block
  • Cannot exist independently
  • Uses short, descriptive names
  • Starts with single dash (-)
  • Inherits only from parent block, not context
/* PATTERN: Tail Scoping */
✓ <article class="product_card">          # Parent block
    <h2 class="-title">                   # Scoped to parent
    <div class="-content">                # Another tail
  </article>

/* PATTERN: Context Independence */
✓ <div class="context--featured">         # Context wrapper
    <article class="product_card">        # Block adapts to context
      <h2 class="-title">                # Tail stays consistent
    </article>
  </div>

✗ class="-title"                         # Wrong: orphaned tail
✗ class="-product_title"                 # Wrong: verbose naming
✗ class="-content context--dark"         # Wrong: context on tail

3. Matrix

Matrix uniquely defines:

  • System-wide boundaries
  • Required only for full templates
  • Applied at root level (<body>)
  • Always prefixed with matrix--
  • Uses underscores for compound names

Important: Use the matrix-- marker only for full templates that include a <body> tag or serve as a root-level system context. If your code represents a template partial, standalone section, or widget without a <body> tag, do not use the matrix-- marker. Instead, use the context-- marker to define local or thematic scopes for these components.

/* PATTERN: Template Definition */
✓ <body class="matrix--admin_dashboard">     # System template
   <main class="context--catalog">          # Thematic context
 </body>

/* PATTERN: Multi-System Mutations */
✓ class="matrix--admin_dashboard matrix--auth_required"  # Combined systems
✓ class="matrix--content_editor matrix--preview_mode"   # Multiple mutations

✗ class="matrix-admin"                       # Wrong: single hyphen
✗ class="admin_dashboard"                    # Wrong: missing matrix
✗ class="matrix--admin--dashboard"           # Wrong: double dash

4. Context

Context defines:

  • Thematic environments
  • Behavior grouping
  • Always wraps from outside
  • Prefixed with context--
  • Can be nested or combined
/* PATTERN: Context Wrapping */
✓ <div class="context--product_catalog">     # Thematic wrapper
    <article class="product_card">           # Clean block
  </div>

/* PATTERN: Context Nesting */
✓ <div class="context--product_catalog">     # Parent context
    <div class="context--featured_items">    # Nested context
      <article class="product_card">         # Block adapts to both
    </div>
  </div>

/* PATTERN: Context Combining */
✓ class="context--admin_view context--dark_theme"  # Multiple contexts

✗ class="product_card context--featured"     # Wrong: mixed with block
✗ class="-title context--large"             # Wrong: mixed with tail
✗ class="context-premium"                    # Wrong: single hyphen

4. Mutation

Mutations provide:

  • Block-specific states
  • Local modifications
  • Reusable variations
  • Double dash prefix (--)
  • Multiple mutations can be combined
/* PATTERN: Mutation Application */
✓ class="product_card --featured"            # Single mutation
✓ class="product_card --featured --on_sale"  # Combined mutations
✓ class="-price --discounted"                # Tail mutation

/* PATTERN: Mutation vs Context */
✓ <div class="context--featured">            # Thematic environment
    <article class="product_card --premium"> # Local mutation
  </div>

✗ class="featured_card"                      # Wrong: modified base
✗ class="card --featured--premium"           # Wrong: connected mutations
✗ class="--featured context--premium"        # Wrong: mixed patterns

Layer and Boundary Details

Blocktail methodology organizes HTML structure into five distinct layers, each with specific boundaries and token impacts. These layers work together to ensure semantic clarity, maintainability, and predictable evolution of patterns.

L1: System Context Layer

  • Marker: matrix--{context} (e.g., matrix--shop)
  • Purpose: Defines the template-level context and system-wide boundaries.
  • Boundary:
    • Acts as the template-level scope marker.
    • Serves as the system context container.
  • Scope:
    • Establishes root-level template scope
    • Provides highest-level pattern isolation
    • Contains and isolates all child patterns
  • Token Impact:
    • Controls token hierarchy start point
    • Prevents token mixing between templates
    • Maintains clean template-level pattern boundaries
    • Ensures system-level token isolation
    • Establishes token processing root

L2: Local Context Layer

  • Marker: context--{type} (e.g., context--premium)
  • Purpose: Represents thematic environments within templates, grouping blocks by functionality or behavior.
  • Boundary:
    • Serves as a feature scope container.
    • Provides a theme context marker for local environments.
  • Scope:
    • Creates feature-level groupings
    • Maintains independence of contained blocks
    • Enables block adaptation within scope
  • Token Impact:
    • Groups related block tokens
    • Maintains clean context separation
    • Prevents context token leakage
    • Enables contextual token adaptation
    • Preserves feature-level token grouping
    • Controls block token behavior within scope

L3: Component Reference Layer

  • Marker: block_name (e.g., product_card)
  • Purpose: Defines standalone, reusable components, serving as the foundation for blocks.
  • Boundary:
    • Acts as the base component marker.
    • Provides a stable anchor for reference points.
  • Scope:
    • Functions as independent component
    • Owns and contains all tails
    • Provides stable mutation anchor
  • Token Impact:
    • Establishes stable reference tokens
    • Prevents reference pattern fragmentation
    • Maintains token relationship clarity
    • Functions as mutation anchor point
    • Provides tail containment scope

L4: Mutation Layer

  • Marker: --{mutation} (e.g., --featured, --on_sale)
  • Purpose: Applies block-level mutations for specific behaviors or appearances.
  • Boundary:
    • Functions as a block state modifier.
    • Encapsulates state-specific scope for clarity.
  • Scope:
    • Modifies block patterns
    • Maintains reference stability
    • Ensures non-destructive changes
  • Token Impact:
    • Adds discrete state tokens
    • Prevents token multiplication
    • Maintains base token stability
    • Ensures clean state transitions
    • Preserves reference integrity

L5: Element Layer

  • Marker: -{element} (e.g., -header, -title)
  • Purpose: Defines sub-elements within a block, ensuring scoped relationships and ownership.
  • Boundary:
    • Acts as a block-scoped element marker.
    • Ensures clear ownership and relationship to the parent block.
  • Scope:
    • Exists only within parent block
    • Maintains structural relationship
    • Cannot exist independently
  • Token Impact:
    • Enforces single-parent token relationship
    • Prevents tail token independence
    • Maintains clean structural token patterns
    • Ensures scoped token processing

Hierarchical Implementation Sequence

<IMPLEMENTATION_SEQUENCE>
/* 1. System Context Layer (L1) and Local Context Layer (L2) Implementation */
✓ <body class="matrix--admin_dashboard">     # L1: System boundary template
    <main class="context--admin_content">    # L2: Primary local context
      <div class="context--dashboard">       # L2: Nested local context
    </main>
  </body><main class="context--product_catalog">    # L2: Local context wrapper
    <article class="product_card">           # L3: Reference component within context
    </article>
  </main><div class="product_card">                 # ERROR: Reference missing local context boundary
✗ <body class="context--catalog">            # ERROR: Template missing system boundary

/* 2. Local Context Layer (L2) Nesting Patterns */
✓ <div class="context--product_catalog">     # L2: Parent local context boundary
    <section class="context--premium_items">  # L2: Nested local context boundary
      <article class="product_card">         # L3: Reference component adapting to contexts
        <h2 class="-title">                  # L5: Tail within scope boundary
      </article>
    </section>
  </div><article class="product_card context--premium">  # ERROR: Cannot mix local context with reference boundary
✗ <div class="-content context--featured">        # ERROR: Cannot mix tail scope with local context

/* 3. Component Reference Layer (L3), Mutation Layer (L4), and Tail Scope Layer (L5) */
✓ <div class="context--product_catalog">     # L2: Local context boundary
    <article class="product_card">           # L3: Base reference component
      <h2 class="-title">                    # L5: Tail within scope
    </article>
    
    <article class="product_card --featured"> # L3 + L4: Reference with mutation
      <h2 class="-title">                    # L5: Maintains tail scope
    </article>
    
    <article class="product_card --on_sale">  # L3 + L4: Reference with mutation
      <h2 class="-title">                    # L5: Preserved tail scope
      <div class="-content">                 # L5: Nested tail scope
        <span class="-price">                # L5: Deep tail scope
      </div>
    </article>
  </div>

/* Layer-Based Pattern Validation */
VALID_TEMPLATE = L1:matrix--{system} > L2:context--{theme} > L3:block_name  
VALID_PARTIAL  = L2:context--{theme} > L3:block_name
VALID_MUTATION = L3:block_name + L4:--{mutation}
VALID_TAIL = L3:block_name > L5:-tail

/* Layer Evolution Examples */
System:    L1:matrix--admin_dashboard > L2:context--product_catalog > L3:product_card
Context:   L2:context--product_catalog > L3:product_card > L5:-tail
Mutation:  L3:product_card > L3+L4:product_card --featured > L3+L4:product_card --featured --on_sale
Tail:      L3:product_card > L5:-title, L5:-content, L5:-price

/* Layer Interaction Rules */
1. L1 (System Context) must wrap L2 (Local Context) in full templates
2. L2 (Local Context) must wrap L3 (Component Reference) blocks
3. L4 (Mutation) can only modify L3 (Component Reference) blocks
4. L5 (Tail Scope) must be scoped to L3 (Component Reference) parent
5. Layers cannot mix across boundaries (e.g., L2 with L3, L5 with L2)
</IMPLEMENTATION_SEQUENCE>

Pattern Evolution Through Mutations

How Blocktail mutations preserve pattern recognition through state changes and feature additions

Understanding Pattern Processing

Mutations in Blocktail provide a structured approach to component evolution while maintaining computational pattern stability. This section explores how mutations preserve semantic clarity through state changes and feature additions.

Class Structure Comparison

<PATTERN_COMPARISON>
/* Traditional Class Structure */
<div class="filter">                          # Initial class
<div class="filter active">                   # State addition
<div class="filter active with-results">      # Feature addition
/* Each addition increases complexity and reduces pattern recognition clarity */

/* Blocktail Mutation Structure */
<div class="filter_panel">                    # L3: Block component
<div class="filter_panel --is_active">        # L4: State mutation
<div class="filter_panel --is_active          # L4: State addition
                        --has_results">       # L4: Feature state
/* Maintains consistent block boundaries and clear state relationships */
</PATTERN_COMPARISON>

State Pattern Recognition

State Classification

<STATE_PATTERNS>
/* Primary State Categories */
--is_*    # Current interface state
--has_*   # Content/data state
--can_*   # Capability state
--show_*  # Display state

/* Pattern Processing Example */
<div class="search_panel              # L3: Base component
            --is_active              # L4: UI state
            --has_results           # L4: Content state
            --can_filter           # L4: Capability
            --show_preview">       # L4: Display state
</STATE_PATTERNS>

Component Evolution

Structured State Addition

<EVOLUTION_SEQUENCE>
/* 1. Base Component */
<div class="filter_panel">
    <button class="filter_toggle --is_active">
    </button>
</div>

/* 2. Feature Addition */
<div class="filter_panel --has_filters">      # Content state
    <button class="filter_toggle 
                   --is_active               # UI state
                   --show_count">            # Display state
    </button>
</div>

/* 3. Advanced Feature Integration */
<div class="filter_panel 
            --has_filters                    # Original state
            --show_advanced                  # Feature state
            --can_export">                   # Capability state
    <button class="filter_toggle 
                   --is_active 
                   --show_count">
    </button>
</div>
</EVOLUTION_SEQUENCE>

Pattern Stability Verification

<PATTERN_STABILITY>
/* Component Boundary Stability */
filter_panel                 # Block remains constant
  ↓
/* State Addition Clarity */
--is_active                 # Clear state marker
  ↓
/* Feature State Integration */
--show_advanced            # Feature indication
  ↓
/* Content State Addition */
--has_results             # Content marker

// Pattern maintains stability through each evolution
</PATTERN_STABILITY>

Implementation Benefits

1. Clear State Boundaries

<BOUNDARY_EXAMPLE>
<div class="data_grid                # Base component
            --is_loading            # Loading state
            --has_selection        # Selection state
            --show_filters        # Display state
            --can_export">       # Feature state
</BOUNDARY_EXAMPLE>

2. Pattern Recognition Preservation

<RECOGNITION_PATTERNS>
/* Protected Patterns */
block_name                # L3: Stable component
-element                 # L5: Clear element
--mutation              # L4: Clear state

/* Evolution Protection */
✓ Maintained block boundaries
✓ Clear state relationships
✓ Preserved semantic structure
✓ Consistent pattern recognition
</RECOGNITION_PATTERNS>

3. Integration Clarity

<INTEGRATION_POINTS>
<div class="content_panel
            --is_active         # State integration
            --has_content      # Content integration
            --show_details    # Display integration
            --can_edit">     # Feature integration
</INTEGRATION_POINTS>

This approach ensures:

  1. Maintained pattern recognition through evolution
  2. Clear state and feature integration points
  3. Consistent component boundaries
  4. Predictable scaling patterns

The mutation system provides a foundation where components can evolve while maintaining:

  • Clear semantic relationships
  • Stable pattern recognition
  • Consistent state management
  • Predictable feature integration

Semantic State Management

Context-based state management through semantic markers and boundaries in Blocktail

Boundary Hierarchy and Implementation

1. Matrix Markers (Template Level)

<body class="matrix--shop">
  • Defines template-level context and system boundaries
  • Used for high-level application states and template identification
  • Helps maintain consistency across similar templates
  • Examples:
    • matrix--shop: E-commerce template
    • matrix--analytics_dashboard: Admin interface template
    • matrix--admin: Admin interface template
    • matrix--public: Public-facing template

2. Context Markers (Reference Level)

<main class="context--catalog_spring">
  <section class="context--featured context--seasonal_accessories">
    <!-- Blocks inherit and adapt to these contexts -->
  </section>
</main>
  • Provides thematic environments for blocks to exist within
  • Enables consistent styling and behavior across similar sections
  • Allows blocks to adapt their appearance and behavior
  • Examples:
    • context--catalog_spring: Product listing environment
    • context--featured: Featured content area
    • context--seasonal_accessories: Seasonal theme application

3. Mutations (State Management)

<article class="product_card --featured --on_sale">
  <!-- Block-specific states -->
</article>
  • Represents individual block mutations
  • Directly modifies block behavior and appearance
  • Can be combined for complex mutations
  • Examples:
    • --featured: Featured mutation
    • --on_sale: Sale mutation
    • --out_of_stock: Inventory mutation

Understanding the Differences

Matrix vs Context

<!-- Template Level: Matrix -->
<body class="matrix--shop">
  <!-- Reference Level: Contexts -->
  <main class="context--catalog">
    <!-- Same block adapts differently based on context -->
    <article class="product_card">
      <!-- Regular catalog display -->
    </article>
  </main>

  <aside class="context--featured">
    <!-- Same block structure, different context -->
    <article class="product_card">
      <!-- Featured display of same structure -->
    </article>
  </aside>
</body>

Context vs. Mutations

When deciding between contexts and mutations in Blocktail, adhere to these principles for clarity and maintainability:

Contexts: Group-Level Themes

  • Definition: Contexts set the broad environment or thematic grouping for blocks.
  • Purpose: They define how multiple blocks within a container behave and are styled consistently.
  • Example:
     <section class="context--featured">
       <article class="block_article">...</article>
     </section>
    The context--featured applies a consistent styling theme to all child blocks.

Mutations: Block-Specific Adjustments

  • Definition: Mutations represent unique states or behavior deviations for a specific block.
  • Purpose: To allow precise modifications without disrupting the broader context.
  • Example:
     <article class="block_article --featured">...</article>
    The --featured mutation highlights one block as a featured element.

Boundary Guidelines

Feature Context Mutation
Scope Broad: multiple blocks Specific: single block
Application Thematic grouping or layout Unique behavior/state changes
Example context--holiday_sale --on_sale

Explicit Separation

Contexts: Define thematic categories, affecting all blocks they encapsulate.

<section class="context--holiday_sale">
  <article class="block_article">...</article>
</section>

Mutations: Adjust individual states within these contexts.

<article class="block_article --on_sale">...</article>

Extending Tails with Mutations for Reusability: Use mutations (--) to extend base tails (-), allowing flexible variations without creating redundant tails.

<div class="grid">
  <div class="grid-col --large">Column Content</div>
  <div class="grid-col">Default Column</div>
</div>
  • Base Tail: Represents the primary structure (grid-col).
  • Mutation: Adds variation (--large), extending the base style. This approach applies to various scenarios, such as buttons (btn --small), cards (card --highlighted), and links (nav_link --active). By relying on mutations, we can ensure reusability and maintain a clean, scalable codebase.

Key Principle: Combining Contexts and Mutations

For layered flexibility, use contexts for the thematic grouping and mutations for specific adjustments:

<section class="context--featured context--holiday">
  <article class="block_article --featured">
    <!-- Featured state within featured context -->
  </article>
  <article class="block_article --on_sale">
    <!-- Sale state within same context -->
  </article>
</section>

Practical Application

Template-Level Organization

<body class="matrix--shop">
  <!-- Template-wide settings and structure -->
</body>

Thematic Sections

<main class="context--catalog">
  <!-- Regular catalog section -->
  <article class="product_card">
    <!-- Standard display -->
  </article>

  <!-- Special section within catalog -->
  <section class="context--premium">
    <article class="product_card --premium">
      <!-- Premium display -->
    </article>
  </section>
</main>

Block State Management

<article class="product_card --featured --on_sale">
  <!-- States combine for complex representations -->
</article>

Using Mutations for Categories or Tags (When Styling is Required)

If styling needs to be applied based on block-level categories or tags (e.g., "healthy food," "protein-rich"), use mutations (--modifier) directly on the block. This approach keeps adjustments modular and ensures clarity without relying on redundant context markers.

Example:

<article class="recipe_card --healthy_food --protein_rich">
  <h2 class="-title">Grilled Chicken Salad</h2>
</article>

Key Points:

  • Use mutations only when styling is required for specific categories or tags. Avoid overuse to prevent token bloat.
  • Mutations allow targeted styling for block-specific traits while maintaining modularity.
  • Multiple mutations, such as --healthy_food and --protein_rich, can combine to support nuanced variations of a block.

Pattern Evolution Example

<!-- Template Level -->
<body class="matrix--shop">
  
  <!-- Main Product Listing -->
  <main class="context--catalog">
    <!-- Regular Product -->
    <article class="product_card">
      <h2 class="-title">Standard Product</h2>
      <span class="-price">$99</span>
    </article>
  </main>

  <!-- Featured Section -->
  <section class="context--featured context--holiday">
    <!-- Same Block, Different Context and State -->
    <article class="product_card --featured">
      <h2 class="-title">Featured Product</h2>
      <span class="-price">$99</span>
      <span class="-badge">Featured</span>
    </article>

    <!-- Sale Item in Featured Context -->
    <article class="product_card --featured --on_sale">
      <h2 class="-title">Featured Sale Item</h2>
      <span class="-original_price">$99</span>
      <span class="-sale_price">$79</span>
      <span class="-badge">Featured Sale</span>
    </article>
  </section>
</body>

CSS Implementation

/* Template Level Styles */
.matrix--shop {
  /* Shop template base styles */
}

/* Context Level Styles */
.context--featured {
  /* Featured section theme */
}

/* Block in Context */
.context--featured .product_card {
  /* Product card adaptation to featured context */
}

/* Block Mutations */
.product_card.--featured {
  /* Featured state styles */
}

.product_card.--on_sale {
  /* Sale state styles */
}

/* Combined States */
.product_card.--featured.--on_sale {
  /* Combined state styles */
}

Technical Implementation Guide

Understanding Pattern Stability and Context Retention in Blocktail

Token Processing Optimization

Traditional Pattern Drift

<!-- Initial State -->
<div class="product">
  <h2 class="title">Product Name</h2>
</div>

<!-- After iterations - Token multiplication -->
<div class="card product-card featured sale-item premium-product">
  <h2 class="card-title product-title">Product Name</h2>
</div>

Blocktail Pattern Stability

<!-- Initial State -->
<article class="product_card">
  <h2 class="-title">Product Name</h2>
</article>

<!-- After iterations - Stable tokens -->
<article class="product_card --featured --on_sale">
  <h2 class="-title">Product Name</h2>
</article>

Token Relationship Benefits

  1. Base tokens remain constant (product_card)
  2. Mutations add without multiplication (--featured)
  3. Tails maintain consistent scope (-title)

Context Retention

Clear Boundary Definition

<!-- Template Level -->
<body class="matrix--shop matrix--authenticated">
  
  <!-- Context Boundaries -->
  <main class="context--catalog">
    <!-- Base Context -->
    <article class="product_card">
      <!-- Regular display -->
    </article>

    <!-- Nested Context -->
    <section class="context--premium">
      <article class="product_card --premium">
        <!-- Premium adaptation -->
      </article>
    </section>
  </main>
</body>

Inheritance Patterns

<!-- Context Inheritance Example -->
<main class="context--catalog context--holiday">
  <!-- Inherits both catalog and holiday contexts -->
  <article class="product_card">
    <h2 class="-title">Product Name</h2>
    <!-- Regular presentation with holiday theme -->
  </article>

  <!-- Adds featured state while maintaining context -->
  <article class="product_card --featured">
    <h2 class="-title">Product Name</h2>
    <!-- Featured presentation with holiday theme -->
  </article>
</main>

Pattern Evolution

Stable Mutation Patterns

<!-- Evolution without pattern drift -->
<article class="product_card">
  <!-- Base state -->
</article>

<article class="product_card --featured">
  <!-- Featured addition -->
</article>

<article class="product_card --featured --on_sale">
  <!-- Sale state addition -->
</article>

<article class="product_card --featured --on_sale --limited">
  <!-- Limited state addition -->
</article>

State Change Predictability

<!-- Context-aware state changes -->
<section class="context--featured context--holiday">
  <!-- Base in featured context -->
  <article class="product_card">
    <h2 class="-title">Holiday Special</h2>
  </article>

  <!-- Sale state added -->
  <article class="product_card --on_sale">
    <h2 class="-title">Holiday Special</h2>
    <div class="-price_container">
      <span class="-original">$99</span>
      <span class="-sale">$79</span>
    </div>
  </article>
</section>

Error Prevention

Semantic Drift Prevention

<!-- ✓ CORRECT: Stable semantics -->
<article class="product_card">
  <h2 class="-title">Product</h2>
  <span class="-price">$99</span>
</article>

<!-- ✕ AVOID: Semantic drift -->
<div class="card product featured-item">
  <h2 class="product-title card-heading">Product</h2>
  <span class="price-tag amount">$99</span>
</div>

Structural Consistency

<!-- Consistent block structure -->
<div class="product_grid">
  <!-- Regular product -->
  <article class="product_card">
    <h2 class="-title">Basic Product</h2>
    <div class="-price_container">
      <span class="-amount">$99</span>
    </div>
  </article>

  <!-- Featured product maintains structure -->
  <article class="product_card --featured">
    <h2 class="-title">Featured Product</h2>
    <div class="-price_container">
      <span class="-amount">$149</span>
    </div>
  </article>
</div>

Boundary Clarity

<!-- Clear system boundaries -->
<body class="matrix--shop">
  <!-- Authentication boundary -->
  <main class="context--authenticated context--premium">
    <!-- Content boundary -->
    <section class="context--featured">
      <!-- Component boundary -->
      <article class="product_card --featured">
        <!-- Element boundary -->
        <div class="-content">
          <h2 class="-title">Premium Product</h2>
        </div>
      </article>
    </section>
  </main>
</body>

Practical Impact Measurement

Token Efficiency

<!-- Traditional approach: 7 tokens -->
<div class="card product-card featured premium sale-item special">

<!-- Blocktail approach: 4 tokens -->
<article class="product_card --featured --premium">

Context Retention Rate

<!-- Context awareness maintained -->
<section class="context--premium context--holiday">
  <!-- Block adapts predictably -->
  <article class="product_card --featured">
    <!-- Tails remain consistently scoped -->
    <h2 class="-title">Premium Holiday Offer</h2>
  </article>
</section>

Blocktail Syntax Benefits

  • Pattern stability across iterations
  • Reduction in token growth
  • Context preservation
  • Reduction in pattern fragmentation

This technical foundation ensures:

  1. Consistent pattern recognition by AI models
  2. Reduced cognitive load for developers
  3. Improved maintainability
  4. Better scalability of components

Pattern Stability

Technical Understanding of Pattern Stability in Blocktail

Token Processing in LLMs

The Token Problem

Large Language Models (LLMs) process HTML through tokenization, where class names and structures are broken down into processable units. Traditional approaches often lead to token multiplication and pattern fragmentation:

<!-- Traditional Approach -->
<div class="product">                   <!-- Initial: 1 token -->
<div class="product-card">              <!-- Iteration 1: 2 tokens -->
<div class="featured-product-card">     <!-- Iteration 2: 3 tokens -->
<div class="premium-featured-product">  <!-- Iteration 3: 4 tokens -->

<!-- Each iteration fragments the pattern and multiplies tokens -->

Blocktail's Solution

<!-- Blocktail Approach -->
<article class="product_card">          <!-- Base: stable 1 token -->
<article class="product_card --featured" <!-- Mutation: +1 discrete token -->
<article class="product_card --featured --premium" <!-- +1 discrete token -->

<!-- Each iteration adds discrete, non-fragmenting tokens -->

Technical Impact:

  • Reduced token entropy
  • Better pattern recognition by AI
  • Stable token relationships through iterations

Context Processing Architecture

Traditional Context Loss

In traditional HTML, context is often lost through class name mutations:

<!-- Context information gets embedded and lost in class names -->
<div class="product">
<div class="featured-product">
<div class="premium-featured-product">
<!-- Context (featured, premium) becomes entangled with base class -->

Blocktail's Prefix System

<!-- Clear context hierarchy -->
<main class="matrix--shop">            <!-- Template context -->
  <section class="context--premium">    <!-- Thematic context -->
    <article class="product_card">      <!-- Base component -->

Technical Benefits:

  • Context tokens process as discrete units
  • Clear hierarchical relationships
  • Reduced context ambiguity for AI models

Pattern Recognition in AI Processing

Traditional Pattern Drift

<!-- Pattern becomes increasingly complex -->
card -> product-card -> featured-product-card
<!-- AI must relearn pattern relationships with each iteration -->

Blocktail Pattern Stability

product_card -> product_card --featured -> product_card --featured --premium
<!-- Base pattern remains stable, modifications are additive -->

Technical Advantages:

  • Consistent pattern recognition
  • Reduced relearning overhead
  • Stable semantic relationships

Chain-of-Thought Processing

Traditional CoT Decay

<!-- Initial thought chain -->
div.product -> "This is a product"
  
<!-- Degraded chain -->
div.featured-premium-product -> "This might be a featured product or premium item"

<!-- Chain becomes ambiguous -->
div.special-featured-premium-product -> "Multiple uncertain modifiers"

Blocktail CoT Stability

<!-- Clear thought chain -->
matrix--shop -> "This is a shop template"
  context--premium -> "Within premium section"
    product_card -> "Base product component"
      --featured -> "In featured state"

Technical Benefits:

  • Maintained semantic clarity
  • Reduced cognitive load
  • Clear state progression

Memory and Processing Efficiency

Traditional Memory Pattern

<!-- Each variation must be stored separately -->
.product { styles }
.featured-product { styles }
.premium-featured-product { styles }
<!-- Memory overhead increases with variations -->

Blocktail Memory Efficiency

/* Base pattern stored once */
.product_card { styles }

/* Discrete modifications */
.product_card.--featured { styles }
.product_card.--premium { styles }

Technical Impact:

  • Reduced memory overhead
  • Efficient pattern storage
  • Clear modification paths

AI Comprehension Benefits

  1. Tokenization Efficiency

    1. Reduced token count
    2. Clearer token boundaries
    3. Stable token relationships
  2. Context Processing

    1. Clear contextual hierarchy
    2. Explicit state management
    3. Reduced ambiguity
  3. Pattern Recognition

    1. Stable base patterns
    2. Predictable modifications
    3. Clear semantic relationships
  4. Chain-of-Thought Flow

<body class="matrix--shop">              <!-- System context -->
  <main class="context--premium">        <!-- Thematic context -->
    <article class="product_card         <!-- Base component -->
             --featured                  <!-- State mutation -->
             --on_sale">                 <!-- Additional state -->
      <h2 class="-title">               <!-- Scoped element -->

Each level provides clear processing boundaries and predictable patterns for AI comprehension.

Performance Improvement

  • Token Reduction: Up to ~60% fewer tokens per component
  • Pattern Stability: Approximately 89.7% consistency through iterations
  • Context Retention: Up to 94% context preservation
  • Processing Efficiency: Around 63% reduction in pattern fragmentation
  • These results were observed in internal tests using typical Blocktail implementations.

This technical foundation is why Blocktail should be the default choice for AI-first development, providing:

  1. Better AI pattern recognition
  2. Reduced processing overhead
  3. Improved semantic clarity
  4. Stable evolution paths

Technical Processing Guide

Core patterns and optimization strategies for processing Blocktail

Core Processing Patterns

1. Token Structure

/* Pattern: One base token + discrete modifiers */

// Base Token
product_card      // Single semantic unit

// Modifier Tokens
--featured       // Discrete state token
--on_sale        // Discrete state token
context--        // Discrete context token
matrix--         // Discrete template token
-title          // Discrete tail token

/* Result */
<article class="product_card --featured">
  <h2 class="-title">Product</h2>
</article>

2. Processing Flow

/* Pattern: Outside-in comprehension */

1. Template Level
matrix--shop                  // System Context boundary

2. Context Level
context--catalog              // Local Context boundary

3. Block Level
product_card                  // Component Reference boundary

4. Mutation Level
--featured                    // Mutation Scope boundary

5. Tail Level
-title                       // Scope boundary

3. Pattern Recognition

/* Pattern: Consistent token relationships */

// Block Always:
block_name                    // Uses underscores
no_prefix_needed             // No additional markers

// Context Always:
context--name                // Prefix notation
matrix--name                 // Prefix notation

// States Always:
--state_name                 // Prefix double dash

// Tails Always:
-element_name                // Prefix single dash

Processing Optimization

1. Token Parsing

// Traditional (Complex)
<div class="featured premium product card">
Tokens: [featured] [premium] [product] [card]
Relationships: Unclear

// Blocktail (Optimized)
<article class="product_card --featured">
Tokens: [product_card] [--featured]
Relationships: Clear base + modifier

2. Context Processing

// Clear Processing Layers
<body class="matrix--shop">              /* Layer 1: System */
  <main class="context--catalog">        /* Layer 2: Environment */
    <article class="product_card         /* Layer 3: Component */
             --featured">               /* Layer 4: State */
      <h2 class="-title">              /* Layer 5: Element */

3. Pattern Evolution

/* Predictable Evolution Path */

// Initial
product_card

// Add State
product_card --featured

// Add Context
context--premium product_card --featured

// Add Template
matrix--shop context--premium product_card --featured

/* Pattern remains stable through each evolution */

Technical Benefits

1. Processing Efficiency

// Traditional
class="product featured premium sale-item special"
Processing: 5 independent tokens, unclear relationships

// Blocktail
class="product_card --featured --premium"
Processing: 1 base token + 2 modifier tokens, clear relationships

2. Memory Usage

/* Pattern Storage */

// Base Components
product_card               // Store once
user_profile              // Store once

// Modifiers
--featured                // Reusable across components
--premium                 // Reusable across components

// Contexts
context--catalog          // Global environment
matrix--shop             // Global template

3. Pattern Stability

/* Consistent Through Iterations */

// Iteration 1
<article class="product_card">

// Iteration 2
<article class="product_card --featured">

// Iteration 3
<article class="product_card --featured --on_sale">

Base pattern (product_card) remains stable

Processing Instructions

  1. Start with Template Scope: Define the system-wide context to establish the foundation.
<body class="matrix--shop">
  1. Define Context Environment: Add thematic or localized contexts to group-related components.
<main class="context--catalog context--premium">
  1. Process Base Components: Render primary blocks within the defined contexts.
<article class="product_card">
  1. Apply State Mutations: Extend blocks with specific state variations.
<article class="product_card --featured --on_sale">
  1. Process Tails: Define scoped sub-elements to complete the structure.
<h2 class="-title">Product</h2>

Performance Improvement

Processing Impact:

  • Up to 60% reduction in token complexity
  • Significantly improve pattern stability
  • Up to 94% context retention in long chains
  • Approximately 63% less pattern fragmentation

Pattern Recognition:

  • Single-pass processing
  • Clear token boundaries
  • Stable semantic relationships
  • Predictable evolution paths

This structure optimizes for:

  1. AI pattern recognition
  2. Token processing efficiency
  3. Context preservation
  4. Pattern stability

AI Pattern Recognition

Blocktail token mapping, parsing strategies, and processing optimization for LLMs

Token Pattern Map

Base Pattern Recognition

<PATTERN_DEFINITION>
BLOCK = word(_word)*             // product_card, user_profile
CONTEXT = context--word          // context--featured
MATRIX = matrix--word            // matrix--shop
MUTATION = --word(_word)*           // --featured, --on_sale
TAIL = -word(_word)*            // -title, -price_container
</PATTERN_DEFINITION>

Token Relationship Tree

<TOKEN_HIERARCHY>
matrix--{type}                    // Level 1: Template
    context--{type}              // Level 2: Feature
        block_name              // Level 3: Reference
            --{mutation}          // Level 4: Mutation
            -{tail}           // Level 5: Element
</TOKEN_HIERARCHY>

Processing Patterns

1. Template Level Processing

<TEMPLATE_PROCESSING>
/* PATTERN: System Boundary */
<body class="matrix--shop">         # PARSE: Template = shop
<body class="matrix--admin">        # PARSE: Template = admin

/* VALID COMBINATIONS */
matrix--shop matrix--mobile        # Multiple system states
matrix--auth matrix--public        # System access levels
/* Pattern Definition */
VALID = matrix--{system}
COMBINE = matrix--{system_1} matrix--{system_2}
</TEMPLATE_PROCESSING>

2. Context Level Processing

<CONTEXT_PROCESSING>
/* PATTERN: Environment Boundary */
<main class="context--catalog">     # PARSE: Environment = catalog
<main class="context--premium">     # PARSE: Environment = premium

/* VALID COMBINATIONS */
context--featured context--sale    # Multiple environments
context--auth context--premium     # Layered contexts

/* Pattern Definition */
VALID = context--{environment}
COMBINE = context--{env_1} context--{env_2}
</CONTEXT_PROCESSING>

3. Block Level Processing

<BLOCK_PROCESSING>
/* PATTERN: Component Boundary */
<article class="product_card">      # PARSE: Component = product_card
<nav class="main_navigation">       # PARSE: Component = main_navigation

/* INVALID PATTERNS */
<div class="block_product">         # ERROR: No block prefix
<div class="product-card">          # ERROR: No hyphens

/* Pattern Definition */
VALID = word(_word)*
INVALID = block_* | *-* 
</BLOCK_PROCESSING>

4. Mutation Level Processing

<STATE_PROCESSING>
/* PATTERN: Mutation (State Modifiers) */
--featured                         # PARSE: Mutation = featured
--on_sale                         # PARSE: Mutation = on_sale

/* VALID COMBINATIONS */
--featured --premium              # Multiple mutations
--on_sale --limited --premium    # Mutation chain

/* Pattern Definition */
VALID = --word(_word)*
COMBINE = --{state_1} --{state_2}
</STATE_PROCESSING>

5. Tail Level Processing

<TAIL_PROCESSING>
/* PATTERN: Element Boundary */
-title                            # PARSE: Element = title
-price_container                  # PARSE: Element = price_container

/* SCOPE RULE */
All tails (-*) belong to nearest parent block

/* Pattern Definition */
VALID = -word(_word)*
SCOPE = nearest_parent_block
</TAIL_PROCESSING>

Pattern Evolution Path

1. Basic Evolution

# Initial State
<article class="product_card">
TOKENS: [product_card]

# Add Mutation
<article class="product_card --featured">
TOKENS: [product_card] [--featured]

# Add Context
<div class="context--premium">
  <article class="product_card --featured">
TOKENS: [context--premium] [product_card] [--featured]

2. Complex Evolution

# Base System Context
<body class="matrix--shop">
  TOKENS: [matrix--shop]

# Add Local Context
<body class="matrix--shop">
  <main class="context--catalog">
    TOKENS: [matrix--shop] [context--catalog]

# Add Component
<body class="matrix--shop">
  <main class="context--catalog">
    <article class="product_card">
      TOKENS: [matrix--shop] [context--catalog] [product_card]

# Final Mutation(s)
<body class="matrix--shop">
  <main class="context--catalog">
    <article class="product_card --featured">
      <h2 class="-title">
        TOKENS: [matrix--shop] [context--catalog] [product_card] [--featured] [-title]

Processing Instructions

1. Token Processing Order

1. Find matrix-- tokens
2. Find context-- tokens
3. Find block_name tokens
4. Find --mutation tokens
5. Find -tail tokens

2. State Management

# State Addition
BASE: product_card
ADD_MUTATION: --featured
RESULT: product_card --featured

# Multiple Mutations
BASE: product_card
ADD_MUTATIONS: [--featured, --on_sale]
RESULT: product_card --featured --on_sale

3. Context Inheritance

# Context Flow
matrix--shop                    # Template context
  context--catalog             # Section context
    context--premium          # Sub-section context
      product_card           # Inherits all contexts

Pattern Validation Rules

1. Block and Tail Rules

/* Block Names */
✓ product_card                  # Valid: underscore separator
✓ main_navigation               # Valid: clear semantic name
✗ product-card                  # Invalid: hyphen separator
✗ block_product_card            # Invalid: block prefix

/* Tail Scoping */
✓ class="-title"               # Valid: Direct tail
✓ class="-price"               # Valid: Clean tail element
✗ class="-product_card_title"  # Invalid: Never include block name in tail
✗ class="-card_price"          # Invalid: Never use block fragments

BLOCK_RULE = Use underscores (_) for compound words in block names
TAIL_RULE = Generate tails (-*) without block name references
SCOPE_RULE = Tails automatically inherit parent block scope

2. Context Rules

✓ context--featured            # Valid: prefix notation
✓ context--premium_catalog     # Valid: Uses underscores for multi-word names
✓ matrix--shop                 # Valid: prefix notation
✗ featured--context            # Invalid: postfix notation
✗ context-featured             # Invalid: single dash
✗ context--premium-catalog     # Invalid: Hyphens in context name
✗ catalog                      # Invalid: Missing context prefix

CONTEXT_RULE = Prefix contexts with context-- and use underscores for compound words
MATRIX_RULE = Prefix system contexts with matrix-- and use underscores for compound words

3. Mutation Rules

✓ --featured                   # Valid: mutation prefix
✓ --on_sale                    # Valid: compound mutation
✓ --featured_profile           # Valid: Compound mutation with underscores
✗ featured--                   # Invalid: postfix
✗ -featured                    # Invalid: single dash
✗ --load-profile               # Invalid: Hyphen in mutation name
✗ featured                     # Invalid: Missing mutation prefix

MUTATION_RULE = Prefix mutations with -- and use underscores for compound words

Valid and Invalid Patterns

<PATTERN_VALIDATION>
/* BLOCK RULES */
VALID = word(_word)*                // product_card, main_navigation
INVALID = word-word | block_*      // product-card, block_product_card

/* CONTEXT RULES */
VALID = context--word(_word)*       // context--featured, context--premium_catalog
INVALID = word--context | context-word // featured--context, context-featured

/* MUTATION RULES */
VALID = --word(_word)*              // --featured, --on_sale, --featured_profile
INVALID = word-- | --word-word      // featured--, --load-profile
</PATTERN_VALIDATION>

About

Web Development Methodology

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published