Standalone human-in-the-loop X engagement radar for founders.
It watches BYO X API targets, scores high-signal posts, drafts founder-style replies, sends Resend email approval prompts, and only auto-posts email-approved replies when the X account was summoned by mention. Unsummoned opportunities stay manual-open/copy.
A founder wants to be early when the right customers, investors, analysts, or competitors post on X, without handing an agent unsafe posting autonomy. Founder Attention Radar keeps an inbox of timely opportunities, drafts replies in the founder's voice, and lets the founder approve from email or the web queue.
This repo is its own deployable product surface instead of a Beevibe skill or Chrome extension. A skill can help an agent write replies from provided context, but it cannot safely own monitoring, credentials, approvals, budgets, or posting. The standalone service owns those long-running product concerns directly.
pnpm install
cp .env.example .env
pnpm migrate
pnpm devOpen http://localhost:4317, enter the admin token from FA_ADMIN_TOKEN, configure your profile and targets, then connect X.
- Express API and web UI in one process.
- Postgres persistence with migration in
migrations/001_init.sql. - Official X TypeScript XDK package is installed and loaded by the X adapter, with plain REST fallbacks for OAuth/search/posting where SDK surface differs.
- Resend outbound email and inbound webhook approvals.
- Anthropic scoring/drafting when
ANTHROPIC_API_KEYexists; deterministic local scoring otherwise.
POST 1posts draft 1 only when the opportunity issummoned=true.EDIT: <text>posts the edited reply only whensummoned=true.SKIPmarks the opportunity skipped.- Unsummoned or ambiguous email commands send a manual-required response and never call X write APIs.
- Approval tokens are one-use, hashed at rest, and expire.
GET /api/config?ownerId=...PUT /api/configGET /api/targets?ownerId=...POST /api/targetsDELETE /api/targets/:id?ownerId=...GET /api/opportunities?ownerId=...&status=queuedPOST /api/opportunities/:id/skipPOST /api/x/connect/startGET /api/x/callbackPOST /webhooks/resend/founder-attention
Authenticated routes require Authorization: Bearer $FA_ADMIN_TOKEN when FA_ADMIN_TOKEN is set.