Inspiration
LinkedIn is the most performative corner of the internet. Every other post is a founder "humbly" sharing that they "learned a valuable lesson" or a CEO posting a fake story about an employee. We wanted a way to cut through the noise — not with another fact-checker, but with brutal honesty.
What it does
BS Detector is a Chrome extension that scans LinkedIn captions, rates them on a scale from "Pure Fact" to "Complete BS", and lets you replace any post with a deadpan one-sentence translation of what the person actually means. One click to scan. One click to normalize. No accounts, no data collection, no nonsense.
How we built it
Chrome Extension (Manifest V3) with a content script that extracts LinkedIn captions using a multi-layer selector chain (CSS classes, data attributes, and aria-label button walking for resilience against LinkedIn's frequent DOM changes). Backend calls go to Google's Gemini API with structured JSON output for ratings and a streaming prompt for normalization. Pure vanilla JS — no frameworks, no build tools, no bloat.
Challenges we ran into
LinkedIn's DOM is a moving target. Class names are CSS-in-JS hashed, components rotate between obfuscated and semantic selectors, and the feed layout changes without notice. We solved this by building a fallback chain: stable data-view-name attributes first, then semantic classes, then walking up from aria-labelled action buttons (like, comment, repost) to find post boundaries — the most reliable anchor that LinkedIn can't rename without breaking accessibility.
Accomplishments that we're proud of
- The normalization feature genuinely lands. The deadpan rewrites are funny and accurate.
- The selector fallback chain works across LinkedIn's multiple concurrent layouts without breaking.
- Zero dependencies. The entire extension is under 300 lines of JS. No React, no Webpack, no node_modules.
- The prompt engineering for structured JSON output means ratings come back parseable every time — no regex scraping the AI's free text. What we learned
- Chrome's Built-in AI (Gemini Nano) isn't ready for production — it's experimental and unreliable. Gemini API via REST is the pragmatic choice.
- LinkedIn's accessibility labels are ironically the most stable thing about their DOM. Semantic HTML wins.
- The best way to detect bullshit isn't NLP or sentiment analysis. It's an LLM with a good system prompt and zero patience.
What's next for BS Detector
- Expand beyond LinkedIn to Twitter/X and Facebook.
- A "corporate jargon bingo" mode that flags specific phrases in real-time as you scroll.
- Open-source the prompt templates so the community can tune the roast level.
- Ship a Firefox version.
Built With
- gemini
- javascript
- node.js
- opencode