This is a Drupal 9 site, migrated from Drupal 6 site and then Drupal 8. It features a large photo gallery, tagged by event date. The migration was done by creating Data Export views (as csv) on the old site, and writing a bit of custom php on the new site to process the csv. The code loops thru each gallery item, retrieving and saving the image file locally, then a creates a node for it, complete with taxonomy.
Similar code is used after each meeting, to quickly import lots of photos. I just drop all the photos in the proper folder, run the PHP, and the nodes are imported and properly tagged.
The site uses the free Personal Blog Theme by Weebpal, with a few twig customizations. I installed Twig Tweak which allows easy embedding of views with arguments into the nodes. The twig passes the taxonomy tag from the meeting node to the view, so that only related photos are shown in each node's slideshow.
Also important to the look of the site is the use of Masonry Views on the main page and in the various photo galleries. Without that, the differing sizes of photos and content left unsightly gaps in the grid. Masonry "tucks" everything up so that the gaps are eliminated.