There were several exciting detours this project took. Here's a few of the highlights.
Each user is asjed three yes/no/maybe questions and returns a fortune tailored to their answers. With 50 possible questions asked three at a time, that's 529,200 unique question/answer combinations. That's too many to generate on the fly with any hardware that fits in a hotel lobby.
Three approaches got tried before landing on the one that worked:
1.) Cloud inference (Gemini, over a cellular modem) was ruled out over convention Wi-Fi reliability, API churn, and model deprecation changing the fish's "personality" over time.
2.) The Raspberry Pi AI HAT+ 2. This was genuinely promising on paper, but on-device generation on a 16 GB Pi 5 took over a minute per fortune, and smaller local models weren't producing usable output.
3.) Pre-generate all 529,200 fortunes with Gemini ahead of time, dump them into a SQLite database, and load that onto the Pi. Zero inference at runtime, zero network dependency, and a fixed personality that won't drift when a model gets deprecated. (This is what I ended up doing)
The display side has its own story. A WaveShare E-Ink panel handles asking users questions. This is behind a dark sheet of glass with LED's that light up. This allows me to hide the refreshes. Unfortunately the specific panel used has since been discontinued, and WaveShare's suggested replacement takes 21 seconds to refresh, which doesn't work for something meant to hold a stranger's attention in a hotel lobby. I ended up cracking the screen getting it into its enclosure. This led to a whole wild goose chase across the global supply chain.
Rounding out the electronics: a thermal receipt printer spits out a physical fortune with a QR code linking to a shareable web version, and custom PCBs were designed for the project for the first time.
This was by far the most difficult project I've ever created, but I learned the most from it. I hope you enjoy. :)
Makerinator