Using something else instead of using 9 wp_query

I don’t have a full detailed response for you, but here’s a few things I’d suggest:

1) Use template parts for each of those segments. That will help clean up the template so it’s easier to work with in the future. ( see here: https://konstantin.blog/2013/get_template_part/ )

2) You could then create a helper function for the entire query, basically get EVERYTHING, then have login in the helper function to filter the results. So that within each new template part you’d have something like this:

prefix_index_query($posts_per_page = 3, $post_status="publish")

See here: https://tommcfarlin.com/wordpress-helper-functions-for-templates/

Those two things alone will get you going in the right direction for a much cleaner file structure.