DEV Community

JonathanSolvesProblems
JonathanSolvesProblems

Posted on

I built an AI agent that runs a local business's weekly marketing (Next.js + Gemini)

For the last couple of weeks I've been building Bloom, an AI marketing agent for local businesses like cafes, salons, and gyms. You set it up once, and every week an agent decides what to feature, writes the content in your brand voice, checks its own work, and (on the paid tier) emails your newsletter to your subscribers. On its own.

It's an early work in progress and I'm sharing it to get honest feedback.

90-second demo: https://www.youtube.com/watch?v=huHCDcUhIGM

The problem

Most local owners get under an hour a day for marketing, so it slips, and posting irregularly quietly costs them reach. It's a time-and-consistency problem, not a talent one. I wanted to build the thing that just never skips a week.

What it does

You enter your business once (type, city, brand voice). Then every Monday a scheduled agent runs with no human trigger and:

  • decides the week's angle and promotion
  • writes 3 social posts and an email newsletter in your voice
  • scores its own draft 0-100 and rewrites it if it falls below the bar
  • on the Pro tier, emails the newsletter to your subscribers from a verified domain

Every decision is logged to a public activity feed, so you can actually watch it work.

The parts that were actually interesting to build

  • The self-QA gate is real, not decorative. After generating, a second Gemini call reviews the draft and scores it. Below the threshold, the agent rewrites once and keeps the better attempt. Making this reliable meant forcing a JSON response schema, because Gemini would occasionally return an array instead of an object and silently break the gate.
  • Structured generation via Vertex AI. Content is Gemini 2.5 Flash through Vertex AI with a forced response schema, so the output is always a clean object.
  • Idempotent weekly delivery. The sender claims each send atomically, so a newsletter can never go out twice even if two workers fire the same Monday.
  • Runs on a plain Docker/Traefik box as a standalone Next.js server, with a cron sidecar driving the weekly run.

Stack: Next.js, TypeScript, Gemini 2.5 Flash (Vertex AI), Prisma + Neon, Stripe, Resend, Docker + Traefik.

Where it's at (honestly)

It's live. I've run a real payment through it and had it generate and deliver a real newsletter end to end. But it has basically no real users yet, which is exactly why I'm posting. I'd rather hear what's wrong now.

Try it, and tell me what's missing

Free preview (no card, about a minute): https://bloom.jonathanandrei.com

I'd genuinely love feedback on:

  • Would you, or a local business you know, actually use this?
  • Does the generated content look good enough to post as-is?
  • What would need to be true before you'd pay for it?

Built for the Build with Gemini XPRIZE hackathon. Happy to answer anything in the comments.

Top comments (0)