So, a basic workflow:
1. Generate server seed(s).
2. Hash server seed, show hash to user.
3. Get client seed from user.
4. If needed, add some nonce (which is a publicly available value!) to make this bet different from the previous one if seeds haven't changed.
5. Generate the game using server seed, client seed, nonce.
6. Repeat steps 5 and 6 until the player or server decides to change seeds.
7. Reveal previous server seed(s) to player.
Using something like random.org can be fair, but it's not provably fair. There is no way for the player to verify that you indeed used the value random.org provided and not computed something yourself that gives you better results.
thank You very much for jumping in with Your explanation. the user JoelKatz wrote
For single player:
1) Casino commits. (To everything it will use to shuffle the deck but the user's seed.)
2) User reveals his seed.
3) Game is played.
4) Casino reveals.
5) User checks that casino revealed what it committed to, that deck was shuffled correctly, and that cards correspond to shuffled deck.
as we all know now that I am not the expert of "provably fair" implementation I have to ask You if the different point You added here to the list from JoelKatz with a "nonce" is it a must or only a possible and good point to add?