Custom Post Type Pagination & duplicate posts

I think the best way to implement this is to use pre_get_posts hook. Take a look at this code

function customize_query( $query ) {
    $post = get_posts(array(
         'post_type' => 'projects',
         'taxonomy' => 'featured',
         'numberposts' => 1
    ));
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', 'projects' );
        $query->set( 'posts_per_page', 6 );
        if($post && !empty($post))
            $query->set( 'post__not_in', array($post[0]->ID) );
    }
}
add_action( 'pre_get_posts', 'customize_query' );

Then in your home page

$post = get_posts(array(
     'post_type' => 'projects',
     'taxonomy' => 'featured',
     'numberposts' => 1
));
// display the post just retrieved, it must be coming from cache

// we can use the global query since now it contains the 6 posts we want
while(have_posts()) :
    the_post();
    // display the post
endwhile;

You’ll need to modify it a lot but it might help you achieve what you want. In here the pagination should wotrk as normal since you just modified the main page query

tech