Browser envelope encryption
A fresh AES-256-GCM key protects each upload before Supabase receives it. The data key is wrapped with DealFlo's current RSA public key.
Security & privacy
DealFlo is built for investment information that should never become an ad profile, a training set, or an accidental public record. We publish what is protected, who can process plaintext, and what no architecture can honestly promise.
Architecture statement · updated September 2, 2026Technical controls
A fresh AES-256-GCM key protects each upload before Supabase receives it. The data key is wrapped with DealFlo's current RSA public key.
Investment mandates, analyses, questions, answers, notes, pitches, citations, and deal names are encrypted before durable database writes.
Supabase row-level security is backed by owner-scoped server queries and composite foreign keys that prevent cross-user record references.
The model receives only the material needed for the requested analysis. It has no database credentials, storage credentials, payment access, or general-purpose action tools.
The honest encryption boundary
Supabase stores encrypted document bytes. A DealFlo server function on Vercel unwraps and decrypts a document only to perform the analysis the user requested, then sends the required plaintext to OpenAI over TLS. OpenAI necessarily processes that plaintext during inference.
Calling this workflow “true E2EE” would be misleading: true E2EE would prevent both DealFlo and OpenAI from reading the content and would require local inference or a separately attested confidential-computing design.
Data promises
OpenAI API handling
Every DealFlo Responses API request sets store: false. OpenAI states that API data is not used to train its models unless a customer explicitly opts in. Under standard controls, abuse-monitoring logs may still retain customer content for up to 30 days. DealFlo will only claim Zero Data Retention after OpenAI approves and enables it for the production project.
Prompt-injection containment
Documents and webpages are explicitly treated as data beneath developer instructions. Outputs must pass strict schemas, evidence IDs are allowlisted, deterministic calculations override generated arithmetic, URLs must use HTTPS, and the model has no privileged action tools. No provider can promise that prompt injection is impossible, so the system is designed to contain failure rather than trust model obedience alone.
Data lifecycle
The browser encrypts each file. Supabase receives opaque ciphertext at a randomized storage path.
Vercel decrypts transiently and sends only the requested material. OpenAI application storage is disabled.
Durable analysis is encrypted at the application layer. Operational metadata remains available to run the service.
Deleting a deal removes its vault objects and cascading database records and attempts immediate cancellation and deletion of temporary OpenAI artifacts.