This is a good use of vibecoding. The main "algorithm" to be implemented is very straightforward , and for the hard stuff, we have an expert.
replies(1):
Single file including all html/js/css, Vanilla JS, no backend, scores persisted with localStorage.
Deployed using ubuntu/apache2/python/flask on a £5 Digital Ocean server (but could have been hosted on a static hosting provider as it's just a single page with no backend).
Images / metadata stored in an AWS S3 bucket.
If anyone is interested: Coded using Gemini Pro 2.5 (free version) in about 2-3 hours. Single file including all html/js/css, Vanilla JS, no backend, scores persisted with localStorage.