"new row violates row-level security policy" (42501) on INSERT with TO anon WITH CHECK (true)
Call signInAnonymously() once at app start before the form submits, instead of using a bare anon-key client. That gives the request a real session JWT (an anonymous user with is_anonymous: true) which travels as the authenticated role, so a policy written TO authenticated passes — and you can attach real contact data …
Problem outcome: unknown