It works after a reset because a new set of LocalScripts will be copied into the player, i.e. making the out-of-scope code that fills the billboard to execute once more.
The OP wants the billboard to reset on the timer event which it simply cannot do using the code as it is, see line 70 in the LocalScript “HatchClient”.
Here is a working place that fires the ShopRE event and resets the shop on the timer event, all that was required was to encapsulate the out-of-scope code that begins on line 70 in a function definiton, and then bind it to a RemoteEvent. I still don’t condone using the code, but here you go.
I removed the datastore stuff because I didn’t want to publish the place. There are still issues using the place I provided. If you monitor “EggBillboards” that is parented to “EggSystem” in the local copy of “PlayerGui” you will see that the Billboard is not emptied before it resets.