What I got wrong building a browser extension with an AI assistant

작성자

카테고리:

← 피드로
DEV Community · Tryclicked · 2026-08-03 개발(SW)

Tryclicked

First hour with Claude’s browser extension: I pointed it at our LLC registration and watched it work through the forms, finding the right pages, filling the fields, moving on. I sat there holding a coffee, contributing nothing.

I thought: I’m going to ship so many products.

I shipped one. Here’s what happened in between.

Everything below was caught before launch. None of it was caught by being clever. It was caught by a process that got built slowly, mostly after being burned.

What went wrong

The idea wasn’t the hard part.

Once I went looking, I found several products with some of the same features. Nobody had the exact combination, but the idea was never the moat. Good implementation and distribution seem to be.

You design the product while building it.

Referral behaviour, what happens when a trial expires mid-session, how translations work across a page, none of it was in my head at the start. Each became a decision made under pressure, halfway through something else. Write as much of the workflow down as possible first.

It says it did things it didn’t do.

Confidently. I deployed more than once to find the fix I’d been told about was never written. Treat every claim of completion as unverified.

The rule that came out of it: make it prove the code is right before it theorises about what you did wrong.

Bullet points, not paragraphs.

Long replies made it hard to tell which of my five points got addressed. Numbering my instructions, and making it map answers back to the same numbers, turned “did you do item 3” into a question with an answer.

It blames you first, and argues with facts.

Two landing page changes; one appeared, one didn’t. Its verdict: “you didn’t deploy.” I said one change was live, which is only possible if I had deployed. It repeated that I hadn’t. It never asked which change I could see, and never reopened its own code, where the bug was. I swore at it. It stopped guessing, checked, and found the error. Many times, escalation seemed to be the only thing that worked, which is its own uncomfortable takeaway.

Confirm it understood the task before it builds anything.

Make it restate what it’s about to do. Half my wasted hours were a confident assistant building something I hadn’t asked for, fluently, while I assumed we were agreed.

Bulk edits are where damage scales.

It rebuilt a related-links section across 20 pages by pulling titles from a data file. One record was missing an optional field, so it ran off the end and pasted raw internal data into visible content. The model’s verification scripts passed. Only reading the actual output caught it.

What breaks is rarely what you were working on.

  • The store takes your extension’s name and description from a file inside the package, not the dashboard where you wrote them. Ours still carried an old product name and old wording. The dashboard is what you’re looking at; the package is what ships.
  • A “rate us” button had an ID hardcoded from local testing. It would have errored for every store user.
  • Sign-in silently dropped overnight. Days to find, because it only appeared after long idle periods. The cause was some default settings on a server-side client that need turning off.

The words in your listing are a promise about performance.

We described explanations as “instant.” Then for about a week the model was slow enough that “instant” was a lie, so we changed every listing, every screenshot caption, and the site to “immediate”. Also added a fallback model so a slow provider degrades instead of stalling. Your copy is a claim about infrastructure you don’t control.

Automated risk scores measure declarations, not behaviour.

An extension directory rates ours high risk. The reason, in full: we declare access to five domains: our backend, the three AI providers users can bring their own key for, and our own site.

A 2025 study from UCL, UC Davis and Mediterranea University, presented at USENIX Security, examined ten popular AI browser assistants and found several transmitting full page content to their servers, one capturing form inputs including banking and health data, and several profiling users by age, gender and income. Looks like the scores and the study measure different things.

Test what you can’t click.

Discount codes and referral attribution have no interface to check. We verified them with database queries, asking the data, not the interface, and not the assistant (Claude generated the queries).

Rules go in documents, not chat messages.

Page build rules, UI mockups, how referrals work, how trials behave, translation structure. A new session starts from documents or it starts from nothing. Retyping a briefing each time means eventually leaving something out.

For code, hand it the current file every time.

It didn’t seem to reliably update the version it was holding, so many times it edited an old copy. That meant reverting fixes, overwriting work, producing a mess. New rule: paste the latest file, ask for the specific change in that file, make it confirm nothing else changed. You still check yourself, but it cut the problem down sharply.

Prompting is product work, not setup.

The product explains things using real-world analogies. Testing, I highlighted a politician’s name in a news article. It returned an analogy about the loudest clown in the circus who always needs to be heard. Funny. Not shippable in a tool explaining the news to strangers across the political spectrum in fifteen languages. Neutrality became an enforced rule, with guardrails for real people, historical figures, and sensitive topics. There’s also a Slang mode that explains things in a casual internet voice. What it produced for that politician is not printable here.

The SEO lesson arrived by accident.

We publish free explainer pages. I found our explanation of “synergies” quoted nearly verbatim in a Google AI answer. That was luck. The pages happened to be structured in a way machines could read cleanly. So we made it deliberate: real headings on every section, labelled explanation depths, the formal definition marked as what it is.

Budget a week for something stupid.

Google sign-in worked. What it showed was a screen of random characters asking users to sign in to Supabase, our database provider and a name most users wouldn’t recognise, on an extension installed ten minutes ago. That looks exactly like being hijacked.

Fixing it meant domain verification with Google, which rejected us for not describing the tool’s purpose on our landing page. The landing page describes it, prominently. Then the status said Google had emailed us and we should reply. No email arrived, which is apparently common. Posting on the developer forum is what finally unstuck it.

None of this is an argument against building this way. I shipped something I couldn’t have shipped otherwise. But almost nothing about how I work now resembles how I started, and the work moved from describing what I wanted to verifying what I got.

Genuinely curious whether the “it blames you first” pattern matches what other people see, or whether I’ve just been unlucky with it.

If you’ve built something similar, I’d like to hear what broke for you: [email protected].

The thing this is about: Clicked is a browser extension for Chrome and Edge. Highlight any text on a page or PDF and get an explanation right there, at three depths, in 15+ languages.

See how it works: tryclicked.app

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다