Closing the loop here - this was indeed a Supabase configuration issue, not Plasmic.
The fix: Switched from Supabase’s direct database connection to their Transaction Pooler (Shared “Session Pooler” + using port 6543). This lets thousands of queries share a small pool of actual connections.
For anyone else hitting this with Supabase + Plasmic, just update your integration settings to use the pooled connection string instead of the direct one.
Builds are working perfectly now. Thanks @jason for pointing me in the right direction.