Bond Tech Stack
Bond runs on one human operator and a few AI agents. AI does the reading and drafting; a person signs every approval and decides every denial. Everything lives on Bond’s own accounts, separate from With Oye, Inc.
How a grant flows
- Applyweb form
- VerifyPlaid or paper
- AI draftcites criterion
- Human gateapprove or deny
- Card issuedStripe Issuing
Every denial is decided by a person.
A parent applies, verifies need by linking a bank account or uploading a document, and an AI agent drafts a decision that names the criterion it relies on. The operator signs off, Stripe issues a restricted card, and Quo texts the parent.
Components
| Layer | Tool | What it does |
|---|---|---|
| Code | VS Code + Wrangler | Where Bond is built and deployed from |
| Site and app | Cloudflare Workers (static assets) on joinbond.org | Landing page, application form, operator dashboard, API routes |
| Database | Cloudflare D1 | Applicants, applications, decisions, grants |
| Documents | Cloudflare R2 | Uploaded proof, deleted automatically after each decision |
| Spam and bots | Cloudflare Turnstile | Guards every form |
| Operator login | Cloudflare Access | Only the operator and auditors reach the dashboard |
| Verification | Plaid Consumer Report + Identity Match | Income and cash flow insights only; name on account matches ID |
| AI agents | Skydive | Decision drafts, fraud and duplicate checks, monthly audit sample |
| Cards | Stripe Issuing (Bond’s own account) | Restricted virtual cards: allowed merchants, no cash, capped, expiring |
| Donations | Stripe payments | Separate grant fund and operating fund |
| Messages | Quo | Status texts and card details to parents |
| Books | Aplos or QuickBooks | Restricted fund accounting and Form 990 support |
Data model
D1 holds decisions and the reasons for them, never raw bank data.
| Table | Key fields |
|---|---|
| interest | name, email, LinkedIn, why it matters (cofounder form) |
| parents | id, name, phone, email, city, country, created |
| applications | id, parent, child relationship proof (R2 key), barrier and cost, qualifying path (loss, budget, or income), verification path (Plaid or paper), status |
| decisions | application, AI draft, criterion cited, reviewer, outcome, reason, timestamp |
| grants | parent, amount, Stripe card id, merchant categories, expiry, spent |
| audits | month, sampled decisions, committee notes |
R2 stores uploaded documents under a key tied to the application, with a lifecycle rule that deletes them once a decision is recorded.
AI agents and human gates
| Agent | Does | Hands to |
|---|---|---|
| Decision drafter | Checks the application and verification results against the written signs of need; drafts approve or deny with the criterion cited | Operator queue |
| Fraud checker | Matches bank account name to ID; checks name, phone, and account against past applications | Flags on the draft |
| Audit compiler | Pulls a monthly random sample of drafts and outcomes, with any disagreements between AI and operator | Independent committee |
Human gates:
- Approvals within the cap: one-tap operator sign-off.
- Every denial: decided by the operator, with the FCRA notice sent when Plaid data was used.
- Loans and forgiveness, when they launch: always a human decision.
- The committee reviews the monthly sample for fairness and drift.
Privacy, security, compliance
- Plaid data goes straight to the decision agent. D1 stores only the outcome and its reason; raw bank data is never written to Bond’s database.
- Documents expire. R2 deletes uploads after each decision.
- FCRA: Plaid Check is a consumer reporting agency, so denials that rely on its report get a written notice. Counsel sets up the template.
- Separation from Oye: Bond has its own Cloudflare, Stripe, Plaid, and Quo accounts. No Oye membership data flows in.
- Access: Cloudflare Access protects the dashboard; secrets live in Worker environment variables, never in code.
- Canada: US-based cards work for Canadian parents with a 1% currency conversion fee; Plaid and Quo coverage in Canada needs confirming.
Build phases
| Phase | Scope | Unlocks |
|---|---|---|
| 0: Landing page | One page on joinbond.org (why Bond, how it works, cofounder form); Worker route saves to D1 with Turnstile | Recruiting a cofounder |
| 1: Pilot app | Application form, paper verification, decision drafter, operator dashboard, Stripe Issuing cards, Quo texts | First grants, after IRS approval or under a fiscal sponsor |
| 2: Bank verification | Plaid Consumer Report and Identity Match, fraud checker, FCRA notices | Faster, lighter applications |
| 3: Scale | Audit compiler, donation flows for both funds, accounting sync, more reviewers | Hundreds of grants a year |
| Future | Zero-interest loans, Circle guarantors, forgiveness | Loans program |
Open questions
- Confirm Stripe Issuing approval for grant cards to individuals in the US and Canada
- Confirm Plaid Check pricing and Canadian coverage
- Choose the Skydive setup for the three agents
- Decide whether a cofounder builds Phase 1 or a contractor does