Should I vibe code
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.
?
Our verdict, the regret score and everything below it. Editorial and unsponsored — nobody can pay to be moved.
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
- 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
- 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
- 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.
- 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.
- 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.
- 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.
- If anything is published, ship it noindex until you have decided what happens when a publisher emails you about the excerpt on your domain.
- 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.
- Keep AI summaries and YouTube transcript features behind your own key and rate limit, or the first shared link is a bill.
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.
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
$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.
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.
Open-source web annotation with public and private groups — the anchoring problem already solved in the open.
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.
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.
Saving a link is not saving an article. Store the HTML at save time or your archive is a list of 404s.
Feedbin is open source, and its own README tells you not to self-host it. Read that before you write a line.
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