// extension + backend [Personal tool]
Volley
Voice-trained reply drafting for X and Threads
Personal growth tooling
Growing on X and Threads means writing a lot of thoughtful replies, and generic AI replies read as slop and get ignored. Volley is the opposite of an autopilot bot: it learns your voice from your own past posts, drafts a reply into the platform's native box, and leaves you to edit and send it. Nothing posts itself. It's a personal tool I built and run for myself — a writing aid, not automation.
- Rust
- axum
- SQLite
- React 19
- TypeScript
- Chrome MV3
- Claude
- Vercel AI Gateway
// architecture
Extension (reads the post via DOM) ──► Rust backend (bearer auth) ──► Claude via AI Gateway ──► draft into the native reply box ──► you edit & send
// how it's built
Not fine-tuning — you paste your real posts once and they're stored with engagement scores; the top samples are injected into every generation so output matches your voice. Immediate, free, works with any model, and easy to add to or prune.
Replies are drafted into the platform's own reply box; you review, edit, and click send. There is no auto-reply, no auto-like, and no auto-follow anywhere in the codebase. A soft pace guard warns past a sane replies-per-hour rate rather than encouraging spam.
For replies, the extension reads the visible post from the DOM — no platform API calls, no scraping-to-repost. Publishing your own original posts is optional and goes through Meta's official Threads Graph API, with minimal scopes.
Cycle tones (natural, supportive, witty, contrarian, curious, add-a-data-point), pick short/medium/auto length, optionally ask a question, and include the thread root for context. Optional image reading describes an attached image with a cheap model before drafting.
Add keywords and accounts as targets; a manual page scan harvests visible posts into ranked candidates by engagement, surfacing high-opportunity posts worth replying to — no background harvesting.
Output is kept human: em and en dashes are stripped server-side, crutch words are banned, the current date is injected, and an anti-fabrication rule keeps it from inventing facts. Compose tools cover rewrite, variants, opening hooks, and original post ideas.
An axum + SQLite service behind Caddy/TLS on a small VPS. Bearer-token auth on every route; the Threads OAuth token is AES-256-GCM encrypted at rest. A model mix (Opus / Sonnet / Haiku) matches cost to the task.
// highlights
Trained on your own posts via few-shot prompting, so drafts match your voice instead of reading as generic AI.
Every reply is drafted for review and sent by you. No auto-posting, no auto-engagement — a writing aid, not a bot.
One extension, per-platform adapters for x.com and threads.com, with a consistent drafting flow on both.
Track keywords and accounts, then scan a page to surface the highest-opportunity posts to reply to, ranked by engagement.
Rewrite a rough idea, generate variants and opening hooks, or draft original post ideas — all in your voice.
Server-side guards strip AI tells (including em dashes), ban crutch words, and refuse to fabricate facts.
// components
Manifest v3 React extension with per-platform DOM adapters, a side panel for daily engagement and voice training, and drafts inserted into the native reply box.
axum + SQLite service that holds the voice profile, reply log, and Radar data, routes AI calls, and encrypts platform tokens at rest.
Your pasted posts and engagement signals power voice matching; tracked targets and scanned candidates power opportunity discovery.
// related work