<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Orlane Remy</title>
    <description>The latest articles on DEV Community by Orlane Remy (@orlaneremy).</description>
    <link>https://dev.to/orlaneremy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4089305%2Fe39385d1-f57e-4dd0-b7e5-c07e2757892d.png</url>
      <title>DEV Community: Orlane Remy</title>
      <link>https://dev.to/orlaneremy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/orlaneremy"/>
    <language>en</language>
    <item>
      <title>I'm a Marketer, Not a Developer. I Built an Autonomous AI Agent That Learns My Brand Rules.</title>
      <dc:creator>Orlane Remy</dc:creator>
      <pubDate>Sat, 22 Aug 2026 08:05:39 +0000</pubDate>
      <link>https://dev.to/orlaneremy/im-a-marketer-not-a-developer-i-built-an-autonomous-ai-agent-that-learns-my-brand-rules-12em</link>
      <guid>https://dev.to/orlaneremy/im-a-marketer-not-a-developer-i-built-an-autonomous-ai-agent-that-learns-my-brand-rules-12em</guid>
      <description>&lt;p&gt;I study e-commerce and growth marketing. I've never taken a computer science class. This week I opened a code editor on a real project for the first time, and there's now an autonomous agent running on Google Cloud that scans a product catalog every six hours, diagnoses compliance errors with Gemini, proposes fixes, and — this is the part I'm proud of — learns my brand rules when I reject its suggestions.&lt;br&gt;
Here's the whole story, including the parts where everything broke.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem nobody in the room was solving&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When the hackathon opened, I looked at what people were building: MLOps control centers, agent governance layers, dataset curation tools. Excellent projects, all of them. All built by engineers, for engineers.&lt;/p&gt;

&lt;p&gt;I picked a different problem, because I'd lived it.&lt;/p&gt;

&lt;p&gt;If you run e-commerce ads, you know this silent leak: Google Merchant Center quietly disapproves products. A missing GTIN. A 180-character title stuffed with keywords. A promo banner burned into a product photo. Each disapproved SKU stops serving on Shopping ads and free listings — and nobody notices, because your dashboards still show green ROAS on the products that are serving.&lt;/p&gt;

&lt;p&gt;It's revenue evaporating with no alarm attached. Marketers discover it weeks later, in a spreadsheet, by accident.&lt;/p&gt;

&lt;p&gt;That's the kind of pain engineers don't see, because they're not the ones staring at Merchant Center on Monday morning. It was my unfair advantage in this hackathon: I didn't need to research the problem. I needed to research how to build the solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Feed Medic actually does&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03hj2ek3be9lmzawcqo5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03hj2ek3be9lmzawcqo5.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Five things, in a loop:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Scans autonomously. Cloud Scheduler fires every six hours. No one clicks anything. The agent works while I sleep — this was non-negotiable, because an agent you have to talk to is a chatbot, not an agent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Diagnoses with Gemini 3.5 Flash. Each product is checked against Merchant Center rules: title length, GTIN validity, missing prices, empty descriptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sees the images. A multimodal flow sends product photos to Gemini Vision to catch promotional text overlays — the -50% SOLDES badge burned into a packshot that Google will reject. Checking the image filename would have been the cheap trick. Actually looking at the image is the real feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Asks before acting. Nothing auto-publishes. Every fix lands in an approval queue with a confidence score and a plain-English explanation. Below its confidence threshold, the agent defers to me instead of inventing something. It refuses to guess.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learns from my rejections. This is the one that matters. More below.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Every action is written to an audit log with a reasoning trace, so I can always answer "why did it do that?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The feature I'd build again: an agent that learns your brand&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most feed tools apply generic Google rules. Fine — but Google's rules don't know that my brand never uses the word SOLDES in a title, or that I don't want anyone touching my GTIN fields.&lt;/p&gt;

&lt;p&gt;So I built the loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The agent proposes a fix. I reject it, and I say why — "never use promotional words like Promo or Soldes in my titles."&lt;/li&gt;
&lt;li&gt;A Genkit flow (learnBrandRule) turns that one-off complaint into a general, reusable rule, stored in Firestore.&lt;/li&gt;
&lt;li&gt;Every future diagnosis injects all learned rules into the prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first time I tested it end-to-end, I rejected exactly one fix on one product, then re-ran the diagnosis on two completely different products with the same error type. Both came back with clean titles — promotional words stripped, without me ever mentioning those products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 out of 2.&lt;/strong&gt; I actually said "oh my god" out loud to an empty room.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bj1hx49l1jap3a1edjk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bj1hx49l1jap3a1edjk.png" alt=" " width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's the difference between a script and an agent. A script applies rules someone wrote. This one writes its own rules, from my feedback, and applies them going forward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The three walls I hit, and what they taught me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm not going to pretend this was smooth. Here's what actually happened.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My AI coding tool ran out of credits mid-build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was coding with Cursor's free plan. Partway through building the diagnosis pipeline, premium models locked. Message: upgrade to Pro.&lt;/p&gt;

&lt;p&gt;I tried everything to avoid paying: a second free trial (already used), the GitHub Student Pack (I'm on summer break — no longer eligible), plugging in my own API key (blocked on the free tier). I nearly switched IDEs entirely.&lt;/p&gt;

&lt;p&gt;Then I did the math a founder would do: $20 to unblock a project I actually cared about, on a deadline I couldn't move. I paid, set a reminder to cancel after submission, and moved on.&lt;/p&gt;

&lt;p&gt;Lesson: budget constraints are real, but at some point the cost of protecting a constraint exceeds the constraint itself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini's free tier gave me 20 requests per day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This one nearly killed the project.&lt;/p&gt;

&lt;p&gt;My agent needed to scan 50 products. The free tier quota on the model I'd chosen: 20 requests per day. Not 20 per minute. Per day. My scans died mid-catalog, every single run.&lt;/p&gt;

&lt;p&gt;I tried everything a stubborn person tries. Two API keys with round-robin rotation. Batch sizes of two with 13-second pauses. Model fallback chains. Resume-safe caching. Every workaround worked slightly, and none of them solved the actual problem — I was fighting a quota designed to be a wall.The fix was strategic, not technical: I migrated from the AI Studio Developer API to Vertex AI. Same Gemini models, completely different billing path — Vertex bills your Google Cloud project, where my hackathon credits were sitting unused. Quotas: gone. Cost of scanning 50 products: a few cents.&lt;/p&gt;

&lt;p&gt;Lesson: when you've tried five workarounds for the same wall, stop optimizing the workaround and go around the wall.&lt;br&gt;
That migration is also why my README now says: no API-key free-tier roulette.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My own security rules locked me out of my own app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deployment stage. I wrote production Firestore rules (allow read, write: if false — nothing touches the database except my backend). Good practice. Except the local emulator loaded those same rules, and my dashboard went dark with a false for 'list' @ L8 error.&lt;/p&gt;

&lt;p&gt;The fix was trivial once identified: separate rule files for dev and production. But here's what I want to point out — my dashboard didn't crash. It showed a clean red banner: "Database connection lost — check the Firestore emulator, then refresh."&lt;/p&gt;

&lt;p&gt;I'd built that error state deliberately, during the reliability pass before deployment. Most hackathon projects hide their failure modes. I decided to show mine, because production-minded means handling the bad path, not pretending it doesn't exist. That decision paid me back the very first time something broke.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack (and why a non-developer could ship it)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini 3.5 Flash via Vertex AI — all diagnosis, vision, and rule-learning calls, authenticated with Application Default Credentials. Zero API keys in production.&lt;/li&gt;
&lt;li&gt;Genkit — three flows (diagnoseProduct, analyzeProductImage, learnBrandRule) with Zod-validated structured outputs. This mattered more than I expected: schema validation caught malformed model responses before they ever hit my database.&lt;/li&gt;
&lt;li&gt;Cloud Run — the Next.js dashboard and API routes, scale-to-zero.&lt;/li&gt;
&lt;li&gt;Cloud Scheduler — the six-hour heartbeat that makes it an agent instead of a tool.&lt;/li&gt;
&lt;li&gt;Firestore — four collections: products, fixes, brand_rules, agent_logs.&lt;/li&gt;
&lt;li&gt;Secret Manager — one secret, protecting the scan endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total running cost: around €6–22/month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffiz2zb6aybhwbbv3faf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffiz2zb6aybhwbbv3faf0.png" alt=" " width="800" height="1250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And yes: I wrote this with AI-assisted coding, in Cursor. I'm saying that plainly because it's the point, not a confession. The hackathon's own page says "you don't need to be an AI researcher to participate." I took them at their word.&lt;/p&gt;

&lt;p&gt;What I brought wasn't syntax. It was knowing which problem was worth solving, what the failure modes looked like from a marketer's chair, why the agent needed to ask permission before touching a live feed, and what number had to be on screen for someone to care. The AI wrote TypeScript. I made the product decisions — including the ones where I told it no.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Four things I'd tell myself at the start&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick a problem from your own life, not from a trend list. I never had to guess what mattered, because I'd felt it. That's worth more than technical firepower.&lt;/li&gt;
&lt;li&gt;Agents need gates, not autopilot. Nobody hands an AI write-access to the feed that pays their salary. Confidence scores, an approval queue, and an audit trail aren't friction — they're the thing that makes autonomy acceptable.&lt;/li&gt;
&lt;li&gt;Simulate the boring integration, ship the intelligence. I mocked the Merchant Center connector with a realistic JSON catalog matching the Content API's shape. Building live OAuth would have eaten most of the build window and demonstrated nothing about the agent. I labeled it honestly in the README and spent that time on the learning loop instead.&lt;/li&gt;
&lt;li&gt;Build the reset button before you need it. Once the features worked, I stopped adding and spent a full session on reliability: one command that returns the whole system to a clean demo state, with zero API calls. It let me rehearse the demo dozens of times without burning quota or nerves. Best time I spent on this project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What's next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Feed Medic works. It's live, it's autonomous, and it learns. The obvious next steps are a real Merchant Center Content API integration, a Shopify app, and confidence-based routing so mechanical fixes auto-approve while brand-sensitive edits wait for a human.&lt;/p&gt;

&lt;p&gt;Whether or not it places in the hackathon, I ended this build with something I didn't expect: proof that the gap between "I understand this problem deeply" and "I shipped software that solves it" is no longer measured in degrees.&lt;/p&gt;

&lt;p&gt;If you're non-technical and you've been telling yourself you need to learn to code first — you needed to learn to build first. Those aren't the same thing anymore.&lt;/p&gt;

&lt;p&gt;Live demo: &lt;a href="https://feed-medic-dashboard-374954733454.europe-west1.run.app" rel="noopener noreferrer"&gt;https://feed-medic-dashboard-374954733454.europe-west1.run.app&lt;/a&gt; Code: &lt;a href="https://github.com/orlane-create/feed-medic" rel="noopener noreferrer"&gt;https://github.com/orlane-create/feed-medic&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Built solo for the Google All Things Agentic Hackathon. #AllThingsAgenticHackathon&lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>ai</category>
      <category>ecommerce</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
