A simple example is imagine a game with 10 tickets sold for $1 each and a single $9 grand prize.
If 1 ticket is sold each day and if the lottery publishes the number of remaining winning tickets each day, then you can just wait 1 day and if 1 ticket was sold and 9 tickets remain and the prize wasn't claimed, well now there is a 1/9 chance of winning $9 and the expected value is even.
I started scraping several state for daily numbers and calculating the expected value of each game. Every now and then one gets over 100% EV. (Not taking into account annuity discounts and taxes)
It's also an excuse to try out a lot of different technology and patterns that would be too experimental for most real jobs, so it's a great side project.
I'm currently working on a user section with Clojure, Fulcro (https://fulcro.fulcrologic.com/), and Crux (https://github.com/juxt/crux).
Another fun little side project that was also an excuse to work with Clojure was https://ezmonic.com/. The app was built with ShadowCLJS, Re-Frame, and ReactNative. I've used the Major System mnemonic to remember things like my credit card numbers and I've always wanted to know how optimally short the mnemonics I come up with are. That app uses the CMU phonetic dictionary to search for an optimal phrase.