-
-
Only 15% of small shops ever apply for the grants designed for them. AupaZu changes that — a human always submits.
-
Scheduler → brain → one WhatsApp question → draft with facts, gaps and citations → human review. One question in, a reviewed draft out.
-
6 learning docs, 9 known debts in writing, 100% of drafts end in human review — the draft is automatic, the decision human.
-
System architecture: events flow from scheduler and WhatsApp through the brain (ADK + Gemini) to drafts — one correlation ID end to end.
-
The real thing: the Gap Analyst's question on WhatsApp and the merchant's "2500" reply, accepted by Meta — evidence, not a mockup.
Inspiration
Small retailers miss public money — not because grants don't exist, but because eligibility rules live in dense PDFs, deadlines are short, and a two-person bakery has no grants department. In the Basque Country, where our pilot city Vitoria-Gasteiz sits, programs like the MEC 2026 modernization grants publish real money with real friction attached.
We wanted an agent that does the heavy lifting — watching, matching, asking, drafting — while being honest about the one thing it must never do: submit on someone's behalf.
What it does
AupaZu is an event-driven pipeline with a human gate at the end:
- A Cloud Scheduler job (HTTP + OIDC) wakes the system every morning.
- New grant calls are detected and normalized into a typed graph.
- A matcher scores each call against each merchant's profile.
- If a fact is missing — say, the investment amount — a Gap Analyst agent asks exactly one question over WhatsApp, in plain language.
- The reply updates the profile; the eligibility explanation is regenerated, and every claim carries a citation ID pointing to the official source.
- A Draft Builder produces a versioned draft: confirmed facts only, gaps as visible
[PENDING: field]markers, and a fixed label — "DRAFT: AupaZu does not submit the application; human review is mandatory."
The full cycle — scheduler to draft — takes about 85 seconds.
How we built it
Built with Gemini 3.7 Flash on Vertex AI and Google Cloud end to end: Google ADK orchestrates six small agents (Fetcher, Normalizer, Matcher, Synthesizer, Gap Analyst, Draft Builder) across two Cloud Run services — a private brain and a public webhook Meta can reach. Pub/Sub carries domain events (grant.detected, message.received, match.ready, merchant.profile.updated), each with an event_id for idempotency and a correlation_id that survives the whole journey — visible in Pub/Sub, in Cloud Run logs, and in the case file itself. Supabase/PostgreSQL is the system of record with versioned migrations; Secret Manager holds every credential behind a least-privilege service account; the WhatsApp Cloud API is the channel to the merchant.
Governance is treated as a feature: no submit button exists anywhere, the system of record stores a reference token instead of phone numbers, every demo merchant is flagged is_demo: true in the database itself, and the repo keeps a written list of nine known debts.
Challenges we ran into
The freeze caught what our test suite didn't. Our acceptance criterion — two consecutive end-to-end runs under five minutes, no manual retries, console evidence — surfaced two blocking bugs: a database CHECK constraint that rejected the canonical event name merchant.profile.updated, and a webhook validator that answered 403 to legitimately signed Meta callbacks. Both were fixed with migrations, re-verified, and documented with their commit hashes.
The other battle was calendar, not code: provisioning a real business phone number through Telnyx and registering it with Meta took long enough that the freeze demo ran on the WhatsApp test number instead.
Accomplishments that we're proud of
- The freeze criterion was defined before we ran, and met in public: two consecutive end-to-end runs — 1 min 25.6 s and 1 min 16.8 s — with no manual retries and console evidence linked from the repo.
- The freeze itself found the bugs: two blocking issues surfaced, were fixed with evidence, and are documented with their commit hashes.
- Zero invented facts: every eligibility claim carries a citation ID, and every gap in a draft is a visible marker, never a guess.
- Privacy that survives an audit: the system of record holds a reference token, not a phone number — verifiable by looking at a single database row.
- Governance you can read: an AGENTS.md operating contract, demo data flagged in the database, and a nine-item known-debt list written down instead of forgotten.
What we learned
- Observability designed for operations turned out to be the best demo material: one correlation ID, filterable logs, saved queries.
- A written debt list builds more trust with reviewers than claiming completeness.
- Next time, specs live in the repo from day one — retrofitting governance works, but costs double.
- External dependencies (telephony providers, platform verification) belong in week one, not in the final sprint.
What's next for AupaZu
- The Vitoria-Gasteiz pilot with real merchants: the business number is already provisioned and registered with Meta; moving from the test number to production is the first post-hackathon step.
- Paying down the nine known debts, starting with dead-letter queues, IAM scope, and scaling the webhook consumer to zero.
- More programs, more regions: the typed-graph model generalizes beyond MEC 2026 to other Basque and Spanish grant calls.
- Keeping the human gate non-negotiable: the roadmap brings advisors and gestorías into the review loop — the draft stays automatic, the decision stays human.
Links and bonus materials
- 🎥 Demo video: https://youtu.be/2iESHE0NlbA
- 💾 Code: https://github.com/feelsgo/aupazu-brain (private repository — access granted to [email protected] and [email protected] per the hackathon rules)
- ✍️ Build article (bonus): https://dev.to/feelsgo/aupazu-an-agent-that-drafts-grant-applications-and-refuses-to-submit-them-published-25j5
- 📣 Social post (bonus): https://www.facebook.com/61592313606554/posts/pfbid0eR4xKHGpPPQWjULkCpXEcpEx76oRBpDqTAfv8LbXLe19gW9ruyuviqkjV2ngCL97l
Built With
- aiagent
- cloud-run
- cloud-scheduler
- docker
- gemini
- google-adk
- google-cloud
- postgresql
- pub-sub
- python
- secret-manager
- supabase
- vertex-ai
Log in or sign up for Devpost to join the conversation.