Every prompt, every tool call, every LaTeX template behind an O-1A, EB-1A, or NIW draft — published under a source-available license you can audit, fork, and self-host. Bring your own Anthropic key. Your case never touches our servers. Don't have an attorney yet? The hosted service can match you with a partner immigration law firm at a discounted review-and-file rate.
One repo · Two licenses · Zero telemetry when self-hosted
An AI that drafts a legal filing has to earn trust. You can't earn it behind a curtain. So we published the curtain. Read the system prompt. Read the tool schemas. Read the LaTeX skeleton the agent uses to build a petition. Then decide.
Self-host with your own Anthropic key. Your prompts and case data go directly to Anthropic. We're not in the loop.
agent-turn, agent-tools, petition-templates, exhibit-review, letters — all in the tree. Fork, tune, or audit.
No black box for the part that matters. If it drafts a bad section, you can see exactly why and fix it.
Everything that drafts a petition is open. Everything that runs the hosted business — Stripe, referrals, the lawyer network, transactional email — lives in a /ee folder under a proprietary license. Self-hosters get working stubs; the hosted service runs the real thing.
The boundary is enforced by CI: open code can only reach the enterprise surface through a single documented barrel with a no-op stub. Delete /ee and the app still builds, still drafts petitions — it just doesn't send emails or charge cards.
Supabase for storage. Bun for the dev server. Your own Anthropic key. That's the whole stack.
# clone git clone https://github.com/Job-Protocol/visaworker.git cd visaworker # install bun install # wire Supabase (local or hosted) supabase link --project-ref $YOUR_REF supabase db push # drop your Anthropic key in .env BYOK_ENCRYPTION_KEY=$(openssl rand -hex 32) # go bun run dev
Paste this into Cursor, Claude Code, Codex, Windsurf, or any shell-capable agent. It installs, wires Supabase, asks for your keys, and boots the dev server.
Self-host VisaWorker for me. It's a TanStack Start app on Cloudflare Workers, Supabase for data, BYOK Anthropic key. 1. Clone https://github.com/Job-Protocol/visaworker and cd into it. 2. Run `bun install` (or `npm install` if bun is missing). 3. Create .env from .env.example. Ask me for: - Supabase URL, publishable key, service-role key, and project ref - Anthropic API key Then generate BYOK_ENCRYPTION_KEY with `openssl rand -hex 32` and write it to .env. 4. Run `supabase link --project-ref <ref>` and `supabase db push`. Show the migration list first. 5. Run `bun run dev` and report the preview URL. Rules: - Never commit secrets. Confirm .env is in .gitignore before any git add. - /ee is proprietary and stubbed in the open build. `ee_required` errors are expected; note and continue. - Ask before installing anything outside the lockfile.
$0 + your Anthropic bill
Everything in the open repo. Your infra, your key, your data. Support is community-only.
Flat, per petition
Managed Anthropic billing, deliverability, human support. The proceeds fund the open codebase.
Self-hosted: your prompts hit Anthropic directly with your key. Nothing routes through our servers. Hosted: BYOK keys are encrypted at rest with AES-256-GCM before they touch the database; the encryption key never leaves the server runtime; source is public so you can verify.