The trickiest part was getting initData validation right — Telegram's docs don't mention you need to sort the parameters alphabetically before hashing. The code in the repo handles that plus the full Stars payment lifecycle.
Also wrote a step-by-step guide for the Stars integration specifically: https://dev.to/haskelldev/how-to-accept-payments-in-a-telegr...