all work

// 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
Extension (reads the post via DOM) ──► Rust backend (bearer auth) ──► Claude via AI Gateway ──► draft into the native reply box ──► you edit & send
~ Voice matching via few-shot

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.

~ Assistive by design

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.

~ Reads the page, does not abuse the API

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.

~ Tone, length, and context controls

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.

~ Reply Radar

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.

~ Quality guards

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.

~ Rust backend + encrypted secrets

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.

$
Sounds like you

Trained on your own posts via few-shot prompting, so drafts match your voice instead of reading as generic AI.

$
You stay in control

Every reply is drafted for review and sent by you. No auto-posting, no auto-engagement — a writing aid, not a bot.

$
Unified X + Threads

One extension, per-platform adapters for x.com and threads.com, with a consistent drafting flow on both.

$
Reply Radar

Track keywords and accounts, then scan a page to surface the highest-opportunity posts to reply to, ranked by engagement.

$
Compose tools

Rewrite a rough idea, generate variants and opening hooks, or draft original post ideas — all in your voice.

$
Human-sounding by default

Server-side guards strip AI tells (including em dashes), ban crutch words, and refuse to fabricate facts.

Browser extension

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.

Rust backend

axum + SQLite service that holds the voice profile, reply log, and Radar data, routes AI calls, and encrypts platform tokens at rest.

Voice & Radar data

Your pasted posts and engagement signals power voice matching; tracked targets and scanned candidates power opportunity discovery.