# I shipped my first AWS + Vercel product in 7 days during a Meta attribution crisis 👋

> Source: <https://dev.to/member_8be1f66f/i-shipped-my-first-aws-vercel-product-in-7-days-during-a-meta-attribution-crisis-162c>
> Published: 2026-06-13 00:07:47+00:00

Hi dev.to 👋

I'm Andres. Long-time builder, first-time dev.to poster. (Pretty sure I should have done this years ago.)

Just shipped **Ad Engine** — a 24/7 AI ad-ops monitoring tool for DTC telehealth brands — in 7 focused days for the H0 hackathon. The build had teeth because there was a real reason for it: on February 14 this year, Meta enforced new health-data restrictions that killed pixel-based conversion tracking for the entire DTC telehealth space. At 11 PM the day it happened, I watched a single ad set at Bliss Health burn $4,200 with no alert. The tool I wanted didn't exist, so I built it.

**Amazon Aurora PostgreSQL Serverless v2** (us-east-2, 0.5–1.0 ACU)

**Next.js 16** — App Router, Server Components, Server Actions

**Vercel Fluid Compute + Cron** — 15-min polling cadence on Meta + Google APIs

**Claude Sonnet 4.6** with schema-enforced structured output via Zod + AI SDK Output.object()

**Drizzle ORM** with postgres-js driver

The juiciest engineering decision was rejecting DynamoDB for Aurora Serverless v2. The workload turned out to be multi-entity joins + time-series windowing for 7-day baselines, and DynamoDB's GSI-design tax made that worse than a relational engine's OVER ROWS BETWEEN 336 PRECEDING window function.

Wrote the full decision matrix + schema + SQL + the postgres-js Fluid Compute connection-pool pattern prepare: false, max: 1) here:

→ [Read the full decision matrix here](https://dev.to/member_8be1f66f/why-i-replaced-dynamodb-with-aurora-postgresql-serverless-v2-for-an-ad-ops-monitoring-workload-b47)

Three questions for the community — and I'd genuinely love feedback:

**For 24/7 polling workloads with bursty Claude diagnosis calls** — would you reach for Vercel Fluid Compute or stand up a separate worker? Curious about the threshold where the answer flips.

**Anyone hit the postgres-js prepare: false + max: 1 Fluid Compute pattern?** Worked great for my scale (1 cluster, ~96 polls/day). Curious if anyone has stress-tested it past that.

**What would you have built differently** in a 7-day sprint targeting this kind of operational-monitoring shape? Open to the roast.

Live: [https://runadengine.com](https://runadengine.com)

2-min walkthrough: [https://youtu.be/poFYDHB9WyU](https://youtu.be/poFYDHB9WyU)

Happy to be here. 🚀
