What: supabase-py is a sync HTTP client but is called directly from async routes (e.g. home page renders, server detail). Every db.* call blocks the event loop.
Why: Under concurrent load this serializes the whole app on Supabase round-trips. healthz.py already routes db.ping through asyncio.to_thread; nothing else does.
Approach: Either consistently wrap db.* in asyncio.to_thread, or replace with an async PostgREST client (postgrest-py async).
What:
supabase-pyis a sync HTTP client but is called directly from async routes (e.g. home page renders, server detail). Everydb.*call blocks the event loop.Why: Under concurrent load this serializes the whole app on Supabase round-trips.
healthz.pyalready routesdb.pingthroughasyncio.to_thread; nothing else does.Approach: Either consistently wrap
db.*inasyncio.to_thread, or replace with an async PostgREST client (postgrest-pyasync).