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.
  • 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 payee so the money goes straight to the school's or pharmacy's PayPal.
    • Server-side capture checks on amount, currency and our reference_id, plus PayPal-Request-Id idempotency.
    • Webhooks (PAYMENT.CAPTURE.*) verified with verify-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.

Built With

  • ag-charts
  • ag-grid
  • agentic-commerce
  • ai-agents
  • anthropic
  • claude
  • claude-opus
  • composer
  • css3
  • github
  • hostinger
  • html5
  • javascript
  • mysql
  • passkeys
  • paypal
  • paypal-orders-api
  • paypal-sandbox
  • paypal-vault
  • paypal-webhooks
  • php
  • rest-api
  • web-speech-api
  • webauthn
Share this project:

Updates

Submission history