A custom post type the site editor can template

A post type registered without the right arguments is invisible to the site editor, which means its template is still a PHP file.

register_post_type( 'case_study', array(
    'public'       => true,
    'show_in_rest' => true,        // required for the block editor
    'supports'     => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
    'has_archive'  => true,
    'rewrite'      => array( 'slug' => 'case-studies' ),
    'template'     => array(
        array( 'core/heading', array( 'level' => 2 ) ),
        array( 'core/paragraph' ),
    ),
) );

show_in_rest is the switch that makes the block editor available at all, and has_archive is what makes the site editor offer an archive template for the type. The template argument is a separate and useful thing — it seeds new posts with a starting block structure, which for a content type with a consistent shape saves an explanation to every author.