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