Project
A project owns app metadata (name, description, category), the canvas state, and a list of generated screenshots.
Screenshot
A rendered output — one row per device + locale combination. Stored in R2; the database holds the key + dimensions only.
Credit ledger
Append-only. Every operation (purchase, debit, refund, monthly reset) adds a row. Balance is computed by summing the ledger — never mutated directly.
AI job
Trigger.dev task. Wraps debit + AI call + meter event in a single retryable unit. Status is observable via useRealtimeRun.