shouldivibecodeit

Should I vibe codeGlasp?

Browser highlighting, notes, and shared knowledge discovery

A highlighter is one evening. A public page of everything you've read, quoting text you don't own, is publishing.

?

Their verdict, the Pro price and the build-time estimate come from their entry, MIT-licensed. Checked 2026-08-04.

Can you build it?asked by canivibecodeit.com ↗YESone-shottable · one sitting
?

Our verdict, the regret score and everything below it. Editorial and unsponsored — nobody can pay to be moved.

Should you ship it?asked by usDEMO ONLYvibe the v0, throw it away.

The honest answer

why the verdict is what it is

The highlighting is an evening: a content script, a serialised text range, a sync endpoint. What makes Glasp Glasp is that highlights are public by default and other people's highlights are the reason to open it — and that half does not clone, because a social product with one member is a text file with extra steps. Build the private version and you have a decent personal tool with a nasty maintenance tail attached to somebody else's extension APIs. Build the public version and you have quietly become a publisher: an indexed page of what you read, assembled from paragraphs you do not own.

What actually breaks

not "if". the specific failures.

  • Anchoring, when the page is re-rendered and your saved range now points at an ad, a paywall stub, or nothing at all
  • The visibility default — Glasp's own is public, and a private toggle that fails open publishes what somebody was reading
  • Manifest V3 and host permissions: a content script broad enough to highlight anything is broad enough to read your bank
  • The social half, which needs thousands of other people's highlights and does not exist at one user
  • Verbatim excerpts of paywalled articles sitting on your domain, on URLs a crawler will happily find
  • Export, if a highlight only exists as a row keyed to an internal article id rather than as text next to its source URL

Is that you?

the verdict is a default, not a law

ship it if
  • Every highlight is private in the schema and there is no public path at all
  • The extension runs on the page you clicked, not on every page you open
  • Highlights export to Markdown with the quote, the note, the date and the canonical URL
  • You are the only user and the corpus is your own reading
don’t ship it if
  • There are public profile pages, because that is a publishing product with your name on the takedown notice
  • The manifest asks for <all_urls> because activeTab was more work
  • You store full article text for anybody other than yourself
  • Losing the anchor loses the highlight, because you never stored the quoted text itself

If you build it anyway

the checklist, then the prompt that enforces it

  1. Store the highlighted text, not just an XPath or a character offset. Anchors rot within weeks; the quote is the thing you actually wanted to keep.
  2. Default visibility to private in the column, not in the UI. A public-by-default field is one careless migration away from publishing everyone's reading history.
  3. Ask for activeTab and inject on click. <all_urls> turns a note-taking toy into an extension with read access to every page you are logged into.
  4. Re-anchor with a strategy stack — exact quote, then context prefix and suffix, then position — and show the user when it failed instead of drifting silently.
  5. If anything is published, ship it noindex until you have decided what happens when a publisher emails you about the excerpt on your domain.
  6. Write the Markdown export in week one and run it on a schedule, so your database is never the only copy of a year of reading.
  7. Keep AI summaries and YouTube transcript features behind your own key and rate limit, or the first shared link is a bill.
the guardrail prompt
I am building a web highlighter as a browser extension with sync. Apply these
constraints and push back if I ask you to break them.

1. Highlights are private by default at the database level. Do not add a public
   profile, a discovery feed or a share page until everything below exists.
2. Store the highlighted text verbatim alongside any anchor. If re-anchoring
   fails on a later visit, show the saved quote and mark it orphaned — never
   drop it, and never silently attach it to a different paragraph.
3. Request activeTab and inject the content script on user action. If I ask for
   <all_urls> or automatic injection, refuse and explain what that permission
   grants on every logged-in page I visit.
4. Write the export before the reading UI: one Markdown file per source URL with
   quote, note, timestamp and canonical link, plus a JSON dump. Give me a command
   that produces it and tell me to run it before I trust the tool.
5. Never send page content to a third-party API without an explicit per-action
   confirmation. Summarisation is opt-in, per document, and logged.
6. If I later ask for public profiles, stop and cover these first: noindex by
   default, a per-highlight visibility flag that is checked server-side on every
   read, an excerpt length cap, and a working takedown path with a contact route.
7. Store no full article text for any user other than the one who saved it.
8. Assume Chrome will change the extension APIs again. Keep all browser-specific
   code in one adapter module so an MV4 migration is a file, not a rewrite.
9. Deliberately out of scope: social discovery, follower graphs, a public feed,
   and anything that ranks other people's highlights. That is the part of Glasp
   that needs a crowd, and one user is not a crowd.
paste this before you build — not after something breaks25 lines · 1774 chars

That one keeps you out of trouble. For the prompt that actually builds it, canivibecodeit.com has one.

their build prompt ↗

Or don’t build it

the boring option, and the way back out

just pay for it

$15 a month buys the one thing you cannot self-host: everyone else's highlights. If discovery is why you opened Glasp, building it is pointless — the corpus is the product. If you only ever wanted your own highlights in your own files, don't pay; write the evening version and the Markdown export, and skip the browser-extension treadmill by using an existing annotator.

$15/mo is cheaper than your weekend.

your exit plan, if you already built it

One Markdown file per source URL — quote, note, date, canonical link — in a folder you sync yourself. That folder is the entire asset: it opens in anything, it survives the next extension API break, and it is the only version of your highlights that will still be readable when you have long since stopped maintaining the extension that made them.

prior art · someone already did this
Hypothesis

Open-source web annotation with public and private groups — the anchoring problem already solved in the open.

Zotero

Mature open-source research manager with web capture, annotation and export.

Questions

Why is highlighting harder than it looks?

Because a highlight is a pointer into someone else's HTML, and that HTML changes. CMS re-renders, A/B tests, consent banners and paywall variants all move the text under your anchor. Hypothesis has spent years on a fallback chain — quote match, then surrounding context, then position — and even that fails often enough to need an 'orphaned' state in the UI. Store the quote itself and the failure is cosmetic instead of total.

Is publishing other people's highlights actually a legal problem?

Quoting a sentence with a link is ordinary. A machine-assembled public page carrying the best six paragraphs of a paywalled article, indexed and served from your domain, is a different artefact, and the request to remove it arrives at whoever owns the domain. That is you now. It is a takedown-and-email problem rather than a courtroom one, but it is a real cost of running the public half.

So what's the SHIP IT version?

Private highlights, a click-to-activate extension, and a Markdown export that runs nightly. That is a genuinely good weekend and nothing about it is risky. The DEMO ONLY verdict is about the public, social product Glasp actually sells — plus the ongoing tax of shipping a browser extension into a platform that changes its extension model roughly every three years.

did you build it?

Every week, someone ships something they shouldn’t have.

New verdicts, the worst thing that landed in the trap, and the occasional incident report. No other email, ever.

also on the regret index
GoodLinksSHIP IT

Saving a link is not saving an article. Store the HTML at save time or your archive is a list of 404s.

FeedbinSHIP IT

Feedbin is open source, and its own README tells you not to self-host it. Read that before you write a line.

MatterDEMO ONLY

Parsing one article is a Saturday. Parsing the web is a subscription you pay in weekends, forever.

last reviewed 2026-08-05 · verdict is editorial and unsponsored · shared entry data from canivibecodeit under MIT · not legal advice