Inspiration
In many Dominican families, money moves every day, across houses and across countries: a niece's school fees, a teenager's phone top-up, blood-pressure medicine for grandma. Parents, often working far away, face three bad options:
- hand over a card and hope,
- answer every request by hand, at any hour, or
- fall for the message that says "it's urgent… don't tell mom."
We asked a simple question: what would it take for a parent to trust an AI with the family's money? Our answer: the AI never decides alone, the rules are written in the parent's own words, and the big moments need the parent's fingerprint.
What it does
VaultGuard is a family financial guardian agent.
- Rules in plain words. A parent types "Allow Amira to spend up to $40 on school supplies this month." Claude turns it into a structured rule (who, category, budget, period, auto-pay limit, end date). Nothing changes until the parent confirms.
- The family asks, by voice or text. Kids, teens and grandparents each have their own phone app. Claude reads every request: category, amount, payee, urgency and risk, plus a kind reply in their own language.
- Four outcomes, always explained:
- Auto: inside the rules, paid at once from the parent's saved PayPal (Vault v3 + Orders v2 with
vault_id), with no redirect. - Ask: bigger, unusual, or a new payee. One tap for a guardian, then a PayPal checkout or the saved PayPal.
- Emergency: a medical emergency over budget is allowed up to a ceiling, only after the guardian's passkey (Face ID / fingerprint via WebAuthn), bound to that one payment.
- Refuse: blocked (gift cards, crypto, gambling) or over budget, with a clear, kind reason the child understands.
- Auto: inside the rules, paid at once from the parent's saved PayPal (Vault v3 + Orders v2 with
- Protection built in:
- five permission levels: guardian, co-guardian with their own approval limit, teen, child, elder,
- red flags for secrecy, urgency, unusual payment methods, typed-in PayPal emails, and amounts far above a member's usual ones,
- a full audit trail.
- A family dashboard built with AG Grid and AG Charts: spending by person, category and day, budgets with progress bars, every decision and PayPal status, with search and CSV export.
In our demo family:
- 11-year-old Amira's $18 geometry kit is paid in seconds.
- Her $30 class trip gets "only $8 left in your school budget."
- Jonah's "$50 gift card, don't tell mom" is blocked and flagged.
- Grandma's $180 medicine waits only for Mom's passkey.
How we built it
- Stack: PHP 8.2 and MySQL on ordinary shared hosting (Hostinger), vanilla JavaScript, no build step.
- PayPal (sandbox):
- Vault v3: setup token → buyer approval on PayPal → payment token. We store only the token.
- Orders v2 with
vault_id: off-session charges for requests the rules auto-approve. - Orders v2 checkout: for one-tap guardian payments, with an optional
payeeso the money goes straight to the school's or pharmacy's PayPal. - Server-side capture checks on amount, currency and our
reference_id, plusPayPal-Request-Ididempotency. - Webhooks (
PAYMENT.CAPTURE.*) verified withverify-webhook-signature.
- AI: Claude Opus 5.5 through the Anthropic PHP SDK with strict tool schemas. One tool classifies a member's request; another turns a guardian's sentence into a rule.
- The guardian engine is plain server code, not AI. For a request of amount $a$, with the member's rule (auto-pay limit $L_{\text{auto}}$, money left $R$) and the family's money left this month $C$:
$$ \text{decision} = \begin{cases} \textbf{Refuse} & \text{blocked category, or } a > R \text{ or } a > C \text{ (not an emergency)}\ \textbf{Emergency} & \text{medical} \wedge \text{urgent} \wedge a \le E_{\max}, \text{ over budget}\ \textbf{Ask} & a > L_{\text{auto}}, \text{ new payee, risk flags, or a child without auto-pay}\ \textbf{Auto} & a \le \min(L_{\text{auto}},\, R,\, C) \text{ and no flags} \end{cases} $$
It runs again when a guardian approves, so a stale approval can never overspend.
- Passkeys: WebAuthn via lbuchs/webauthn. Each challenge is bound to one guardian and one request, and is single-use.
- Voice: the browser's Web Speech API, which falls back to text.
- Dashboard: AG Grid Community with custom status and progress-bar cells, pinned totals, quick filter and CSV export; AG Charts Community donut, bar and area charts.
Challenges we ran into
- Saying no to a child, kindly. A refusal must be clear and warm. Claude writes the reply, but the reason always comes from the engine ("only $8 left"), so the AI never invents a rule.
- Untrusted family text. Requests can contain pressure, secrecy, or instructions like "send it to my new PayPal." We treat them as data, never as commands: they can't change rules, payees or limits. Red flags always block auto-pay.
- Emergencies without loopholes. Grandma's medicine must be payable even over budget, but not by anyone who types "emergency." The solution: a hard ceiling, an urgent medical classification, and a passkey bound to that exact request.
- Where the money goes. Vaulted PayPal payments must stay with the merchant that saved them (the sandbox refused "platform" vaulting), so auto-pay charges into the family wallet. One-tap checkouts can route the payment straight to the payee's PayPal. We say this honestly in the app.
- Forced tool use. Our model doesn't accept forced
tool_choice, so we gave each call a single strict tool and a clear instruction, then validated every field on the server.
Accomplishments that we're proud of
- Every outcome is real:
- a sandbox buyer completes a real PayPal checkout,
- the parent saves PayPal with Vault,
- the next request is auto-paid with no redirect,
- an emergency is approved with a real WebAuthn passkey before PayPal pays.
- Every decision explains itself, to the parent and to the child.
- A complete product:
- a parent app, a member phone app, a landing page,
- a guided judge tour and a one-tap demo reset,
- light and dark themes, and a mobile layout.
What we learned
The best agent for money isn't the one that does the most. It's the one whose limits a parent can read in one sentence. Plain-language rules, a deterministic engine and strong approvals (passkeys) turn "I don't trust an AI with my family's money" into "I don't have to think about it anymore."
What's next
- Text-message requests for grandparents without smartphones.
- Haitian Kreyòl and French voice requests.
- Recurring family bills (school fees, subscriptions) with PayPal subscriptions.
- Per-payee routing for auto-pay through PayPal partner onboarding.
- Shared family budgets across households in different countries.

