Every generation costs money, and every upload is a personal photo.
The constraint
Uploads are content-checked before any paid generation, images are stored encrypted and only temporarily, and one credit covers a generation plus up to two retries.
The approach
A React landing page and signed-in funnel on Cloudflare Workers, with asynchronous OpenAI image generation, a credit ledger and Hotmart payments reconciled event by event.
The outcome
Live at levanteataca.app with eight national teams, five aspect ratios and two quality levels.