Inspiration
Every day, people blindly click on shortened URLs (like bit.ly) sent via SMS or messaging apps, completely unaware if the destination is a harmless meme or a sophisticated phishing attack. Simultaneously, modern smartphones embed shocking amounts of invisible, highly-accurate data into every photo we take—such as precise GPS coordinates, device models, and software versions (EXIF data). When users casually share these photos online, they are unwittingly broadcasting their exact physical location and hardware profile to the world.
We were inspired by the massive gap between the privacy tools available to cybersecurity professionals and everyday users. We wanted to build Seycure: a frictionless, zero-cost, and entirely offline-first shield that violently protects user privacy from malicious links and invasive trackers, right from their pockets.
What it does
Seycure is a dual-mode privacy utility built natively for Android:
The Link Shield: Instead of opening a suspicious link directly in a browser, users "quarantine" it in Seycure. The app uses a sandboxed environment to computationally unwrap shortened domains. It detects and strips invasive UTM payload trackers (like
?fbclid=orutm_source), runs local regex heuristics to flag IP-based URL spoofing, queries therdap.orgBootstrap registry to calculate the mathematical domain age, and finally proxies the target URL securely to Google Safe Browsing via an encrypted Cloudflare Worker—ensuring the user's IP is never exposed to the destination server.The Media Scrubber: Instead of uploading photos to shady "metadata remover" tools on the internet, Seycure processes photos entirely on-device. It deeply parses the binary ArrayBuffer of an image to detect sensitive EXIF tags (GPS, Device Make/Model). Then, it leverages a native HTML5 Canvas hardware acceleration hack to redraw the image pixel-by-pixel, fundamentally obliterating the EXIF metadata, before piping the anonymized image directly to the native Android OS sharing menu.
How we built it
We designed Seycure as a Decentralized Verification Engine utilizing a modern web-to-native hybrid architecture:
- Frontend Core: React 18, TypeScript 5, and Vite. We built a custom headless UI system using Shadcn UI and Tailwind CSS, prioritizing a sleek, "glassmorphic" cybersecurity aesthetic.
- Native Enablers: We utilized Capacitor v6 to bridge our JavaScript logic directly into native Android APIs, allowing us to safely manage the
File Picker, intercept Webnavigator.shareevents into native Android Intents, and interface with the physical device camera. - Edge Architecture: To avoid the latency, privacy concerns, and hosting costs of a monolithic database backend, we deployed our Google Safe Browsing API integrations into a serverless Cloudflare Worker acting as a blind proxy vault. We utilized the open CORS proxy
allorigins.winto safely execute HTTPHEADredirect traces entirely at the edge. - Math & Data: The domain trust algorithm utilizes logarithmic age calculations penalty models to assess whether a domain is suspicious, modeled simply as: $$Trust = \min\left(100, \max\left(0, \left( \frac{\text{Domain Age in Days}}{365} \right) \times 50 + \text{Heuristics Score}\right)\right)$$
Challenges we ran into
- Native File Buffer Management: Initially, trying to read multi-megabyte photo EXIF data inside a Capacitor WebView caused catastrophic memory leaks causing the app to crash. We solved this by implementing the
exifrmodule to parse only the first few bytes of the ArrayBuffer header where EXIF lives, without loading the entire bitmap into the JS heap. - Metadata Obliteration: We discovered that simply using regex to strip EXIF from a Base64 string corrupted the JPEG structure. The most massive breakthrough was realizing we could draw the image to a hidden
<canvas>element and command the browser to export a brand new DataURL—physically detaching the pixel data from the original metadata structurally. - Cross-Origin Tracing (CORS): Attempting to trace shortened URL redirects (HTTP 301/302) on client-side JS is impossible due to strict CORS security. We overcame this by using an open edge proxy to remotely execute the request and relay the
status.urlresponse payload over a sanitized channel.
Accomplishments that we're proud of
- Zero-Database Architecture: Seycure requires zero servers. It operates completely on-device, processing massive threat analysis models without storing a single byte of user data anywhere.
- Hardware Efficiency: We successfully built a highly complex threat analysis pipeline (parsing binaries, tracking redirects, and rendering HTML5 Canvas) that executes in under
~400mson mid-range Android hardware. - Frictionless UX: We turned complicated cybersecurity tasks (WHOIS lookups, EXIF sanitization) into single-tap experiences that feel native to Android 14.
What we learned
We learned an incredible amount about the intricacies of the JavaScript Memory Heap regarding ArrayBuffers and Blobs. The boundary between a native Android OS Intent (ACTION_SEND) and a Capacitor WebView PluginCall taught us how profoundly capable modern Hybrid applications are if optimized correctly. We also learned how frighteningly easy it is to scrape incredibly precise GPS data from standard mobile photography, reinforcing exactly why we were building this app.
What's next for Seycure
- Local LLM Phishing Analysis: We want to integrate a lightweight, quantized local language model (like LLaMA-3 1B) to read the actual text content of a suspicious page inside the sandbox and predict if it employs social engineering tactics.
- Video Scrubber: While we successfully cracked Image EXIF metadata, video file containers (MP4/MOV) are significantly more complex. We plan to implement FFMpeg via WebAssembly (Wasm) to strip metadata from video files entirely natively in the browser.
- iOS Release: Compiling the Capacitor codebase into an Xcode project to deploy Seycure as a native utility for iOS users.
Built With
- allorigins-(cors-proxy)
- bootstrap
- capacitor
- css3
- exifr
- html5
- html5-qrcode
- javascript
- lucide
- rdap
- react-18
- shadcn-ui
- tailwind-css
- typescript

Log in or sign up for Devpost to join the conversation.