My bet is: the competitor site is older, so they may have a lot of backlinks crawled by Google (even if now are broken links) so Google still think that site is better.
You already tried a lot of things so my next step could be:
Improve search results. Tittles and meta description. If you are in WordPress I use rank math, because it shows more or less an usable point scale that tells you how good is your meta description versus your keywords. Just don’t aim for 100% is a waste of time, take it just as a guide of optimization.
Also I use screaming frog for the same.
Both tools give a mostly accurate idea of how people will se your site in the search result.
If you are already ranking just below tour competition, then a better description should help the CTR.
Then wait. Google take their time to crawl your website, you can go to search console and “inspect page” that helps some times. And update your sitemap.
Every new post should be added to your sitemap and then tell Google in the inspect page section than the new link exist so they crawl it a bit faster.
And be patient. We don’t control Google, and first position sound like is great, but people also click in the best description for what they are looking, being the second and third is also good, so take it easy 😉