Architecture
cursor-automation.com is a single Phoenix LiveView application backed by SQLite
and Oban. All workflow advancement that lives in
.cursor/issue-workflow/workflow.exs (the open-source spec) is ported into
CursorAutomation.Workflow.Engine and a small set of Oban workers.
Components
Browser/LiveView ──┬──► Phoenix 1.8 LiveView (Ecto + SQLite)
├──► Stripe Checkout/Portal (webhooks back)
└──► GitHub App (webhooks back, REST/GraphQL via Req)
▲
│
Oban workers ──► GitHub REST ──► Cursor Cloud Agents API
──► Swoosh Mailer (transition emails)
Data caching
GitHub data is cached locally in the main Ecto.Repo (sqlite). LiveView reads
from the cache and Phoenix.PubSub (repo:#{id}) pushes incremental updates
when sync workers / webhooks land.
Background jobs (Oban queues)
-
:github_sync—EnsureLabelsWorker,SyncRepoWorker(runs every minute per active repo). -
:workflow—Advance{Plan,Pick,Waiting,WaitingForCi,Demo}Worker,KanbanCommandWorker,LaunchInitialAgentWorker. -
:cursor_api— Cursor Cloud Agents calls (rate-limit-friendly). -
:mailer—NotifyTransitionWorker,SendInvitationWorker. -
:webhooks—IngestEventWorker(fan-out fromPOST /webhooks/github).