If it’s a public app then it rules out the option to use a rollup and count the number of submissions from an account, let’s say in the past 24 hours.
But I think you can build a table with a single row to serve as your “public user profile” row, and build your tab on top of that row. Add a “session ID” user-specific column.
When the user opens the form, before showing the form, set a unique ID to that “session ID” column, and pass that value later on to the submissions table. Use a relation + rollup to count how many rows were added by that “session ID” and hide the form button as needed.
The session ID might reset when the “user” closes the app and opens it again, IP banning would have been better, to be honest.