Sonqo Perú
I migrated a Peruvian NGO’s site from WordPress to Astro. Infrastructure and operating cost at zero, with one-time and monthly donations in production.

The problem
The site lived on WordPress, with infrastructure and operating costs. They had to drop to zero without losing the ability to receive donations or to edit content.
What I built
I rebuilt the site in Astro with a serverless backend and connected one-time and monthly donations to Mercado Pago (Checkout API and Bricks). Content is edited in Sanity.
Outcome
In production, processing real payments, with infrastructure and operating cost at zero.
Decisions that mattered
- 01
A payment is real when the provider confirms it
Webhooks are verified with an HMAC signature and the payment status is fetched from the Mercado Pago API, never trusted from the browser.
- 02
One validation
The same Zod schemas validate on the client and on the server, and Upstash Redis rate-limits requests per visitor.
- 03
Content without developers
Sanity lets the team edit figures, images and copy without touching the payment flows.
- 04
Deployed on Google Cloud
Cloud Build builds the image, Artifact Registry stores it and Cloud Run serves it; secrets live in Secret Manager.
Technologies
- Astro
- TypeScript
- Mercado Pago
- Sanity
- Supabase
- Resend
- Upstash Redis
- Cloud Run
C4 model. The pulsing line is the main path of a request.
Level 1 · who uses the system and what it connects to
Level 2 · the applications and data stores it is made of
Level 3 · the components inside the API
- Person
- System
- Container
- Database
- External
- Main path
- 01Donor
- 02Astro
- 03Mercado Pago
- 04Verified webhook
- 05Resend