<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2" -->

---
title: We Need to Talk About How Gross Modern Web Design Has...
description: A team at Tarkash Labs built OmniGuard AI, a Chrome extension that detects deceptive 'dark pattern' UI design in real time. It's a Manifest V3 extension built...
canonical: https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: We Need to Talk About How Gross Modern Web Design Has Become (And How We Built an AI to Catch It) | daily.dev
og:description: A team at Tarkash Labs built OmniGuard AI, a Chrome extension that detects deceptive 'dark pattern' UI design in real time. It's a Manifest V3 extension built...
og:url: https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2
og:image: https://api.daily.dev/og/posts/6xH6jcun2.png
og:image:alt: We Need to Talk About How Gross Modern Web Design Has Become (And How We Built an AI to Catch It)
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# We Need to Talk About How Gross Modern Web Design Has Become (And How We Built an AI to Catch It)

**[DEV](https://daily.dev/sources/devto)** · 5 min read · 2 upvotes · 1 comments

## Summary

A team at Tarkash Labs built OmniGuard AI, a Chrome extension that detects deceptive 'dark pattern' UI design in real time. It's a Manifest V3 extension built with React 18 and Vite that captures a screenshot of your viewport and sends it to a stateless FastAPI backend powered by Gemini 3.7 Flash. Gemini analyzes the screenshot visually and returns coordinates of deceptive elements, which the extension overlays with glowing red bounding boxes via a Shadow DOM layer. It detects six categories: disguised clicks, confirmshaming, urgency traps, hidden costs, sneak-into-basket items, and forced continuity. The backend stores nothing; screenshots exist only in memory during processing. The project is open source on GitHub under Tarkash-Labs.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://dev.to/dj29/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it-5gin>

## Questions this post answers

### How does OmniGuard AI detect dark patterns like fake countdown timers on websites?

OmniGuard AI is a Chrome Manifest V3 extension that captures a compressed screenshot of the active viewport and sends it to a stateless FastAPI backend. Gemini 3.7 Flash analyzes the screenshot's visual context the way a human would see it, then streams back coordinates of deceptive elements, which the extension overlays with glowing red bounding boxes injected via a Shadow DOM layer.

_Anyone evaluating AI-assisted browser tools for catching deceptive UX can track projects like this on daily.dev._

### What categories of dark patterns does OmniGuard AI detect?

OmniGuard AI detects six categories: disguised clicks (fake buttons leading to ads or malware), confirmshaming (guilt-loaded opt-out language), urgency traps (fake countdowns and scarcity claims), hidden costs or drip pricing (fees revealed late in checkout), sneak into basket (pre-checked add-ons), and forced continuity (free trials with hidden auto-renewal terms).

_Developers researching dark pattern categories for their own UX audits can follow this kind of coverage on daily.dev._

### How does a privacy-focused browser extension avoid storing screenshots of the pages it scans?

OmniGuard AI uses a zero-DB, 100% stateless backend architecture. The viewport screenshot exists only in memory for the milliseconds it takes Gemini to process it and is immediately destroyed afterward, with nothing ever saved, logged, or stored.

_Developers designing privacy-conscious AI tools can follow similar stateless-architecture approaches on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@diyweb** · 0 upvotes

> Sending only the viewport and keeping the backend stateless is a good privacy call for something that sees every page. Confirmshaming and forced continuity are the two we see most on small business sites, often added by a plugin rather than on purpose. Have you thought about a mode that audits your own site before launch, instead of only flagging other sites?

## Similar posts on daily.dev

- [Show HN submissions tripled and now mostly have the same vibe-coded look](https://daily.dev/posts/show-hn-submissions-tripled-and-now-mostly-have-the-same-vibe-coded-look-fj9vjxs5r) · Hacker News · 0 upvotes · 0 comments
- [Tactics to End Dark Patterns in App and Web Development](https://daily.dev/posts/tactics-to-end-dark-patterns-in-app-and-web-development-p5cd8i8y8) · The New Stack · 1 upvotes · 0 comments
- [Taming Agentic Browsers: Vulnerability in Chrome Allowed Extensions to Hijack New Gemini Panel](https://daily.dev/posts/taming-agentic-browsers-vulnerability-in-chrome-allowed-extensions-to-hijack-new-gemini-panel-wrgfp6s8g) · Unit 42 · 0 upvotes · 0 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#devtools](https://daily.dev/tags/devtools), [#google-gemini](https://daily.dev/tags/google-gemini), [#ui-ux](https://daily.dev/tags/ui-ux), [#fastapi](https://daily.dev/tags/fastapi)

[View this post on daily.dev](https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"We Need to Talk About How Gross Modern Web Design Has Become (And How We Built an AI to Catch It)","url":"https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2"},"datePublished":"2026-10-30T19:35:39.178Z","dateModified":"2026-10-30T19:36:10.520Z","description":"A team at Tarkash Labs built OmniGuard AI, a Chrome extension that detects deceptive 'dark pattern' UI design in real time. It's a Manifest V3 extension built...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/06e6fd48b1f41abd2c1744680aa296ee?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/06e6fd48b1f41abd2c1744680aa296ee?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"DEV","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"DEV","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/devto","url":"https://daily.dev/sources/devto"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"webdev,devtools,google-gemini,ui-ux,fastapi","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"DEV","item":"https://daily.dev/sources/devto"},{"@type":"ListItem","position":3,"name":"We Need to Talk About How Gross Modern Web Design Has Become (And How We Built an AI to Catch It)"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2","comment":[{"@type":"Comment","text":"Sending only the viewport and keeping the backend stateless is a good privacy call for something that sees every page. Confirmshaming and forced continuity are the two we see most on small business sites, often added by a plugin rather than on purpose. Have you thought about a mode that audits your own site before launch, instead of only flagging other sites?","datePublished":"2026-10-31T18:46:38.996Z","url":"https://daily.dev/posts/6xH6jcun2#c-1buP7a5je","author":{"@type":"Person","name":"DiyWeb","url":"https://daily.dev/diyweb","image":"https://media.daily.dev/image/upload/s--dgS6jDeN--/f_auto/v1790879420/avatars/avatar_774zDwMaRTNS1fv5OKStX?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/we-need-to-talk-about-how-gross-modern-web-design-has-become-and-how-we-built-an-ai-to-catch-it--6xh6jcun2#faq","mainEntity":[{"@type":"Question","name":"How does OmniGuard AI detect dark patterns like fake countdown timers on websites?","acceptedAnswer":{"@type":"Answer","text":"OmniGuard AI is a Chrome Manifest V3 extension that captures a compressed screenshot of the active viewport and sends it to a stateless FastAPI backend. Gemini 3.7 Flash analyzes the screenshot's visual context the way a human would see it, then streams back coordinates of deceptive elements, which the extension overlays with glowing red bounding boxes injected via a Shadow DOM layer. Anyone evaluating AI-assisted browser tools for catching deceptive UX can track projects like this on daily.dev."}},{"@type":"Question","name":"What categories of dark patterns does OmniGuard AI detect?","acceptedAnswer":{"@type":"Answer","text":"OmniGuard AI detects six categories: disguised clicks (fake buttons leading to ads or malware), confirmshaming (guilt-loaded opt-out language), urgency traps (fake countdowns and scarcity claims), hidden costs or drip pricing (fees revealed late in checkout), sneak into basket (pre-checked add-ons), and forced continuity (free trials with hidden auto-renewal terms). Developers researching dark pattern categories for their own UX audits can follow this kind of coverage on daily.dev."}},{"@type":"Question","name":"How does a privacy-focused browser extension avoid storing screenshots of the pages it scans?","acceptedAnswer":{"@type":"Answer","text":"OmniGuard AI uses a zero-DB, 100% stateless backend architecture. The viewport screenshot exists only in memory for the milliseconds it takes Gemini to process it and is immediately destroyed afterward, with nothing ever saved, logged, or stored. Developers designing privacy-conscious AI tools can follow similar stateless-architecture approaches on daily.dev."}}]}
```

