Two job processors, one shared queue in PostgreSQL, atomic claiming, and production-grade reliability.
Job Architecture
Two job processors, one shared queue in PostgreSQL, atomic claiming, and production-grade reliability.
Job Lifecycle State Machine
Pending
→
Claimed
→
Processing
→
Completed
Failed
Cancelled
TypeScript Worker (Fly.io)
Job types: generate_proposal, generate_contract, parse_readme, extract_text
Polling: 100ms interval via claim_next_job() RPC
Timeout: 60s hard limit per job
Retry: Transient errors (rate_limit, timeout, ai_overloaded, network) auto-retry up to max_retries
Python Brain (Fly.io)
Job types: Brain proposals (7-agent pipeline)
Polling: claim_next_brain_proposal() RPC
Timeout: 300s wall-clock limit
Progress: Real-time updates via agent_runs table + Supabase Realtime
Kill Switches: Three levels of circuit breakers. Global kill switch in system_settings stops all processing. Per-org kill switch stops one tenant. Per-job cancellation marks individual jobs. The worker checks every 5 seconds during processing.
Ready to create AI-powered proposals?
Start Free