new devlog
the rebranding: officially swapped from aegis to jester. updated manifest.json and all UI components to reflect the new identity. dual-layered detection architecture: layer 1 (dom/static): content.js doesn’t just look for keywords. it checks for hasLogin (password fields), pageData.url, and suspicious headers. if the local regex or DOM scan hits a threshold, it triggers the block layer 2 (visual/gemini): if the site looks “ok” but suspicious, background.js triggers captureAndAnalyze. it sends a base64 screenshot + the scraped DOM to gemini 2.5 pro. the prompt forces a JSON output to check for brand impostors (e.g. a site looking like Instagram but hosted on a random domain). quarantine & interstitial: the gray-out: while checkVisualSafety is running, I implemented a setQuarantine(true) function. it injects a CSS filter (grayscale(100%)) and pointer-events block so the user can’t interact with the site until the AI returns a the block page: if verdict.rating >= 4, the extension stops the window (window.stop()) security & api decentralization: custom key integration: moved away from a shared key. built a system where users input their own google ai studio key. this keeps the project free for me and provides higher quotas for the btoa encoding: added a layer of obfuscation by btoa encoding the key before storing it in chrome.storage. stealth settings: designed the settings panel to be hidden by default, accessible via the ⋮ trigger in the popup header. async & storage storage wrapper: created a getStorage helper to wrap chrome.storage.local.get into a promise, making the background script much cleaner with await. messaging reliability: refactored the communication between content.js and background.js to prevent the “undefined” response error when fetching the API key during a live openphish sync: added a setInterval to background.js that pulls the OpenPhish public feed every 12 hours and stores it locally for instant blacklisting without needing the AI.
Log in to leave a comment