docs: add OVERWATCH showcase page (overwatch.netslum.io)
Static landing page (index.html + style.css + app.js + og) reusing the SKELETONKEY project-page design system, tailored to the Android app: hero + threat-circle screenshot, six detection-source cards, the green/yellow/orange/red tier model, passive-only ethics, and a sideload guide. Canonical = overwatch.netslum.io. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+46
@@ -0,0 +1,46 @@
|
||||
/* OVERWATCH landing — count-up stats + scroll reveal. No network, no deps. */
|
||||
(function () {
|
||||
'use strict';
|
||||
const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||
|
||||
/* count-up numbers when the stats row scrolls into view */
|
||||
function countUp(el) {
|
||||
const target = parseInt(el.dataset.target, 10);
|
||||
if (isNaN(target)) return;
|
||||
if (!target || reduceMotion) { el.textContent = String(target); return; }
|
||||
const dur = 1100, start = performance.now();
|
||||
(function tick(now) {
|
||||
const p = Math.min(1, (now - start) / dur);
|
||||
el.textContent = String(Math.round(target * (1 - Math.pow(1 - p, 3))));
|
||||
if (p < 1) requestAnimationFrame(tick);
|
||||
})(performance.now());
|
||||
}
|
||||
|
||||
const statsRow = document.getElementById('stats-row');
|
||||
if (statsRow) {
|
||||
const nums = statsRow.querySelectorAll('.num[data-target]');
|
||||
if ('IntersectionObserver' in window && !reduceMotion) {
|
||||
const io = new IntersectionObserver((entries, obs) => {
|
||||
entries.forEach((e) => {
|
||||
if (e.isIntersecting) { nums.forEach(countUp); obs.disconnect(); }
|
||||
});
|
||||
}, { threshold: 0.4 });
|
||||
io.observe(statsRow);
|
||||
} else {
|
||||
nums.forEach((el) => { el.textContent = el.dataset.target; });
|
||||
}
|
||||
}
|
||||
|
||||
/* scroll-triggered reveal */
|
||||
const reveals = document.querySelectorAll('.reveal');
|
||||
if (!('IntersectionObserver' in window) || reduceMotion) {
|
||||
reveals.forEach((el) => el.classList.add('in'));
|
||||
} else {
|
||||
const ro = new IntersectionObserver((entries, obs) => {
|
||||
entries.forEach((e) => {
|
||||
if (e.isIntersecting) { e.target.classList.add('in'); obs.unobserve(e.target); }
|
||||
});
|
||||
}, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' });
|
||||
reveals.forEach((el) => ro.observe(el));
|
||||
}
|
||||
})();
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
+473
@@ -0,0 +1,473 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>OVERWATCH — passive surveillance detection for Android</title>
|
||||
<meta name="description" content="A native Android app that passively flags nearby Flock Safety ALPRs, Axon body cameras, and police presence. Fuses BLE/WiFi radio scans, the DeFlock ALPR map, and Citizen/Waze feeds into a green→red threat tier. Listens only — never transmits.">
|
||||
<meta property="og:title" content="OVERWATCH — passive surveillance detection">
|
||||
<meta property="og:description" content="Android app that flags nearby Flock ALPRs, Axon body cams, and police by fusing BLE/WiFi + the DeFlock map + Citizen/Waze. Passive only — it never transmits.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://overwatch.netslum.io/">
|
||||
<meta property="og:image" content="https://overwatch.netslum.io/og.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image" content="https://overwatch.netslum.io/og.png">
|
||||
<meta name="theme-color" content="#07070d">
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&family=Space+Grotesk:wght@500;700&display=swap" rel="stylesheet">
|
||||
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="bg-mesh" aria-hidden="true">
|
||||
<div class="mesh-blob mesh-blob-1"></div>
|
||||
<div class="mesh-blob mesh-blob-2"></div>
|
||||
<div class="mesh-blob mesh-blob-3"></div>
|
||||
</div>
|
||||
|
||||
<nav class="nav">
|
||||
<div class="container nav-inner">
|
||||
<a class="nav-brand" href="#">
|
||||
<span class="nav-mark" aria-hidden="true">◉</span>
|
||||
OVERWATCH
|
||||
</a>
|
||||
<div class="nav-links">
|
||||
<a href="#detect">How it works</a>
|
||||
<a href="#sources">Sources</a>
|
||||
<a href="#tiers">Tiers</a>
|
||||
<a href="#download">Download</a>
|
||||
<a class="nav-github" href="https://github.com/KaraZajac/OVERWATCH" aria-label="GitHub">
|
||||
<svg height="18" viewBox="0 0 16 16" width="18" fill="currentColor" aria-hidden="true">
|
||||
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- ──────────────── HERO ──────────────── -->
|
||||
<header class="hero">
|
||||
<div class="container hero-inner">
|
||||
<div class="hero-eyebrow">
|
||||
<span class="dot dot-pulse"></span>
|
||||
v0.5.2 · Android · passive
|
||||
</div>
|
||||
<h1 class="hero-title">
|
||||
<span class="display-wordmark">OVERWATCH</span>
|
||||
</h1>
|
||||
<p class="hero-tag">
|
||||
A native Android app that <strong>passively detects surveillance around you</strong>.
|
||||
Open it, hit <strong>START</strong>, and a ring turns green → yellow →
|
||||
orange → red as the engine gets more sure there's a Flock Safety ALPR,
|
||||
an Axon body camera, or active police nearby.
|
||||
<span class="hero-tag-pop">It only listens. It never transmits, probes, or jams.</span>
|
||||
</p>
|
||||
|
||||
<div class="phone-hero">
|
||||
<img class="phone" src="img/overwatch-main.png" width="1096" height="2560"
|
||||
alt="OVERWATCH main screen: a live map inside a green "all clear" threat ring, centered on the user with a crosshair, and a STOP button." loading="eager">
|
||||
</div>
|
||||
|
||||
<div class="stats-row" id="stats-row">
|
||||
<div class="stat-chip"><span class="num" data-target="6">0</span><span>fused sources</span></div>
|
||||
<div class="stat-chip stat-vfy"><span class="num" data-target="4">0</span><span>threat tiers</span></div>
|
||||
<div class="stat-chip"><span class="num" data-target="0">0</span><span>packets sent</span></div>
|
||||
<div class="stat-chip"><span class="num" data-target="17">0</span><span>releases</span></div>
|
||||
</div>
|
||||
|
||||
<div class="cta-row">
|
||||
<a class="btn btn-primary" href="https://github.com/KaraZajac/OVERWATCH/releases/latest">
|
||||
↓ Download APK
|
||||
</a>
|
||||
<a class="btn" href="#detect">How it works</a>
|
||||
<a class="btn btn-ghost" href="https://github.com/KaraZajac/OVERWATCH">
|
||||
<svg height="16" viewBox="0 0 16 16" width="16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
|
||||
Source on GitHub
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p class="hero-warn">Passive defense only. Debug-signed APK — sideload; no Play Store. <a href="https://github.com/KaraZajac/OVERWATCH">Read the README.</a></p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- ──────────────── TRUST STRIP ──────────────── -->
|
||||
<section class="trust-strip">
|
||||
<div class="container">
|
||||
<div class="trust-row">
|
||||
<span class="trust-label">Fuses signal from</span>
|
||||
<ul class="trust-items">
|
||||
<li>Bluetooth-LE + WiFi radio</li>
|
||||
<li>DeFlock ALPR map</li>
|
||||
<li>Citizen incidents</li>
|
||||
<li>Waze police alerts</li>
|
||||
<li>OpenStreetMap · Overpass</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ──────────────── HOW IT WORKS ──────────────── -->
|
||||
<section id="detect" class="section section-feature reveal">
|
||||
<div class="container">
|
||||
<div class="section-head">
|
||||
<span class="section-tag">how it works</span>
|
||||
<h2>One tap. A live threat map.</h2>
|
||||
<p class="lead">
|
||||
While scanning, the circle becomes an <strong>OpenStreetMap centered on
|
||||
you</strong>, wrapped in a threat-color ring for the current tier and
|
||||
marked with a ⌖ crosshair. Every detection is a dot, color-coded by
|
||||
source — so each mark is self-explanatory. Lock the screen and the
|
||||
foreground notification keeps the tier live; the phone vibrates only
|
||||
when the threat <em>escalates</em>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="feature-split">
|
||||
<div class="phone-frame">
|
||||
<img class="phone" src="img/overwatch-sources.png" width="856" height="2000"
|
||||
alt="Detection-sources drill-down: BLE, WiFi, DeFlock, Citizen, Waze and Commercial rows, each with a color tier dot and the observations that fired it." loading="lazy">
|
||||
</div>
|
||||
<div class="explain-annotations">
|
||||
<div class="annotation">
|
||||
<span class="anno-num">1</span>
|
||||
<div>
|
||||
<strong>Threat-color ring</strong>
|
||||
<p>The map is wrapped in the current tier's color — green, yellow,
|
||||
orange, or red — so you read your situation at a glance without
|
||||
opening anything.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="annotation">
|
||||
<span class="anno-num">2</span>
|
||||
<div>
|
||||
<strong>Source-color dots</strong>
|
||||
<p><span class="legend-dot red"></span> Flock / DeFlock cameras red ·
|
||||
<span class="legend-dot blue"></span> Waze police blue ·
|
||||
<span class="legend-dot purple"></span> Citizen incidents purple.
|
||||
Tap any row for coordinates + a Maps deep-link.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="annotation">
|
||||
<span class="anno-num">3</span>
|
||||
<div>
|
||||
<strong>Foreground notification</strong>
|
||||
<p>Rebuilt on every tier change — <code>OVERWATCH • RED</code> with
|
||||
the top detection's score. Priority bumps to HIGH on RED so the
|
||||
system surfaces it as a heads-up, screen locked or not.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="annotation">
|
||||
<span class="anno-num">4</span>
|
||||
<div>
|
||||
<strong>Escalation-only haptics</strong>
|
||||
<p>A short pulse for YELLOW, double for ORANGE, escalating triple
|
||||
for RED — but only on <em>upward</em> transitions, so it never
|
||||
nags you while a threat lingers.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ──────────────── DETECTION SOURCES ──────────────── -->
|
||||
<section id="sources" class="section section-bento reveal">
|
||||
<div class="container">
|
||||
<div class="section-head">
|
||||
<span class="section-tag">detection sources</span>
|
||||
<h2>Six sensors, one score.</h2>
|
||||
<p class="lead">Every observation is scored 0–100 by the confidence
|
||||
engine; the on-screen tier is the <strong>max live score across all
|
||||
sources</strong>. Cross-source corroboration — a BLE hit <em>and</em> a
|
||||
DeFlock map match in the same spot — naturally pushes the tier higher
|
||||
than either alone.</p>
|
||||
</div>
|
||||
|
||||
<div class="bento">
|
||||
<article class="bento-card bento-lg">
|
||||
<div class="bento-icon">📶</div>
|
||||
<h3>BLE — Bluetooth-LE</h3>
|
||||
<p>
|
||||
Vendor MAC OUIs (Axon, Flock Penguin / Raven, XUNTONG mfg id
|
||||
<code>0x09C8</code>, "TN" serial pattern), Raven service UUIDs, and
|
||||
device-name patterns. Iterates <em>every</em> manufacturer-data entry
|
||||
per advert — not just the first — so it doesn't miss a buried match.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card">
|
||||
<div class="bento-icon">📡</div>
|
||||
<h3>WiFi</h3>
|
||||
<p>
|
||||
BSSID OUI prefixes for Flock infrastructure (31-prefix superset) and
|
||||
<code>Flock-XXXX</code> SSID patterns, polled every 35 s — just under
|
||||
the Android 11+ scan throttle.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card bento-cam">
|
||||
<div class="bento-icon">🎥</div>
|
||||
<h3>DeFlock — ALPR map</h3>
|
||||
<p>
|
||||
Crowdsourced ALPR camera locations within range (200 m default) via
|
||||
the Overpass API (<code>overpass.deflock.org</code> → fallback
|
||||
<code>overpass-api.de</code>), with a 24 h on-disk cache and failure
|
||||
backoff. Refetches when you move > 1.5 km.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card">
|
||||
<div class="bento-icon">🚨</div>
|
||||
<h3>Citizen</h3>
|
||||
<p>
|
||||
Real-time public-safety incidents — police-relevant only,
|
||||
fire/medical filtered out — within range and under 30 min old,
|
||||
polled every 60 s from the Citizen trending feed.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card bento-lg">
|
||||
<div class="bento-icon">🚓</div>
|
||||
<h3>Waze — police alerts</h3>
|
||||
<p>
|
||||
Live user-reported <code>POLICE</code> alerts (default 500 m,
|
||||
~45 min freshness). Waze reCAPTCHA-gated its map endpoint, so
|
||||
OVERWATCH reads a key-protected feed through a Caddy proxy at
|
||||
<code>api.blackflagintel.com</code> that injects the key
|
||||
server-side — the paid key <strong>never ships in the APK</strong>.
|
||||
The app authenticates with a scoped, revocable <code>X-App-Token</code>
|
||||
stored encrypted in the Android Keystore.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card">
|
||||
<div class="bento-icon">🏠</div>
|
||||
<h3>Commercial</h3>
|
||||
<p>
|
||||
Nearby consumer smart-home gear (Nest, Ring, Echo, hidden cams) as a
|
||||
secondary situational signal, riding the BLE + WiFi scans.
|
||||
Score-capped at ORANGE so a cluster of doorbells never reads as
|
||||
ALPR-grade certainty.
|
||||
</p>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ──────────────── THREAT TIERS ──────────────── -->
|
||||
<section id="tiers" class="section reveal">
|
||||
<div class="container">
|
||||
<div class="section-head">
|
||||
<span class="section-tag">confidence</span>
|
||||
<h2>Four tiers. Highest live score wins.</h2>
|
||||
</div>
|
||||
|
||||
<div class="tiers">
|
||||
<div class="tier tier-green">
|
||||
<div class="tier-range">< 40</div>
|
||||
<div class="tier-name">GREEN</div>
|
||||
<p>Nothing credible. Idle shows a muted gray ring so "all clear" reads differently from "not scanning."</p>
|
||||
</div>
|
||||
<div class="tier tier-yellow">
|
||||
<div class="tier-range">40 – 69</div>
|
||||
<div class="tier-name">YELLOW</div>
|
||||
<p>A single weak indicator. Short vibration pulse on the way up.</p>
|
||||
</div>
|
||||
<div class="tier tier-orange">
|
||||
<div class="tier-range">70 – 84</div>
|
||||
<div class="tier-name">ORANGE</div>
|
||||
<p>High confidence — usually a hard radio hit or a close map match. Double pulse.</p>
|
||||
</div>
|
||||
<div class="tier tier-red">
|
||||
<div class="tier-range">85 +</div>
|
||||
<div class="tier-name">RED</div>
|
||||
<p>Certain. Notification jumps to HIGH priority; escalating triple pulse.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ──────────────── CAPABILITIES ──────────────── -->
|
||||
<section class="section section-bento reveal">
|
||||
<div class="container">
|
||||
<div class="section-head">
|
||||
<span class="section-tag">built for the street</span>
|
||||
<h2>Runs in your pocket, not the cloud.</h2>
|
||||
</div>
|
||||
|
||||
<div class="bento">
|
||||
<article class="bento-card bento-lg">
|
||||
<div class="bento-icon">🔇</div>
|
||||
<h3>Passive by design</h3>
|
||||
<p>
|
||||
OVERWATCH only listens — it never transmits, probes, jams, or
|
||||
interferes with any device or network. The Axon advertise/fuzz code
|
||||
from one of the reference projects is <strong>intentionally
|
||||
excluded</strong>. It reads the airwaves and public feeds; that's it.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card">
|
||||
<div class="bento-icon">🫧</div>
|
||||
<h3>Floating overlay</h3>
|
||||
<p>
|
||||
The same threat-ring map renders in a small draggable bubble over
|
||||
other apps (Settings → Display over other apps), so it stays with
|
||||
you while you use your phone.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card">
|
||||
<div class="bento-icon">🔐</div>
|
||||
<h3>Keys stay off-device</h3>
|
||||
<p>
|
||||
The paid Waze feed key lives server-side behind the proxy; the app
|
||||
holds only a scoped, revocable token, encrypted via the Android
|
||||
Keystore. No secrets in the APK.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card">
|
||||
<div class="bento-icon">🩺</div>
|
||||
<h3>Honest per-source health</h3>
|
||||
<p>
|
||||
The drill-down marks a source <code>Source unreachable</code> when
|
||||
its scanner couldn't reach its feed — a silent empty result and a
|
||||
real failure look different.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="bento-card">
|
||||
<div class="bento-icon">🗺</div>
|
||||
<h3>Your position, not your data</h3>
|
||||
<p>
|
||||
Location drives the proximity checks and the map on-device. No
|
||||
account, no telemetry, no analytics — the scans and feeds run and
|
||||
the results stay on your phone.
|
||||
</p>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ──────────────── CALLOUT ──────────────── -->
|
||||
<section class="section section-callout reveal">
|
||||
<div class="container">
|
||||
<div class="callout">
|
||||
<div class="callout-mark">🛡</div>
|
||||
<div>
|
||||
<h3>Situational awareness, not interference</h3>
|
||||
<p>
|
||||
OVERWATCH is a defensive, receive-only tool for knowing what's
|
||||
watching <em>you</em> — Flock ALPRs, Axon body cameras, and police
|
||||
presence — in the space you're already in. It does not touch, spoof,
|
||||
or disrupt anything. Know your local laws; use it responsibly.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ──────────────── DOWNLOAD ──────────────── -->
|
||||
<section id="download" class="section section-timeline reveal">
|
||||
<div class="container">
|
||||
<div class="section-head">
|
||||
<span class="section-tag">get it</span>
|
||||
<h2>Sideload in three steps.</h2>
|
||||
</div>
|
||||
|
||||
<div class="feature-split">
|
||||
<div class="phone-frame">
|
||||
<img class="phone" src="img/overwatch-settings.png" width="856" height="2000"
|
||||
alt="Settings screen: per-source toggles (BLE, WiFi, DeFlock, Citizen, Waze, Commercial), proximity distance sliders, and the encrypted Waze proxy token field." loading="lazy">
|
||||
</div>
|
||||
<div class="timeline dl-steps">
|
||||
<div class="tl-col tl-shipped">
|
||||
<div class="tl-tag">1 · download</div>
|
||||
<ul>
|
||||
<li>Grab the latest debug-signed APK from
|
||||
<a href="https://github.com/KaraZajac/OVERWATCH/releases/latest">Releases</a>
|
||||
(currently <strong>v0.5.2</strong>).</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tl-col tl-active">
|
||||
<div class="tl-tag">2 · install</div>
|
||||
<ul>
|
||||
<li>Sideload it — allow "install unknown apps" for your browser or files app, then open the APK.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tl-col tl-next">
|
||||
<div class="tl-tag">3 · grant + start</div>
|
||||
<ul>
|
||||
<li>Grant location + nearby-devices + notifications, toggle the sources you want, hit <strong>START</strong>.</li>
|
||||
<li>Optional: paste a Waze proxy token in Settings for police-report coverage.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="tl-foot">
|
||||
Build from source, file issues, or read the internals:
|
||||
<a href="https://github.com/KaraZajac/OVERWATCH">github.com/KaraZajac/OVERWATCH</a>
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ──────────────── FOOTER ──────────────── -->
|
||||
<footer class="footer">
|
||||
<div class="container footer-inner">
|
||||
<div class="footer-col">
|
||||
<div class="footer-brand">
|
||||
<span class="nav-mark" aria-hidden="true">◉</span>
|
||||
OVERWATCH
|
||||
</div>
|
||||
<p class="footer-tag">
|
||||
Passive Android surveillance-detection. Listens only — never
|
||||
transmits. A DREAMMAKER project.
|
||||
</p>
|
||||
</div>
|
||||
<div class="footer-col">
|
||||
<h4>Project</h4>
|
||||
<ul>
|
||||
<li><a href="https://github.com/KaraZajac/OVERWATCH">Source</a></li>
|
||||
<li><a href="https://github.com/KaraZajac/OVERWATCH/releases">Releases</a></li>
|
||||
<li><a href="https://github.com/KaraZajac/OVERWATCH/releases/latest">Latest APK</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-col">
|
||||
<h4>Signal from</h4>
|
||||
<ul>
|
||||
<li><a href="https://deflock.me">DeFlock ALPR map</a></li>
|
||||
<li><a href="https://citizen.com">Citizen</a></li>
|
||||
<li><a href="https://www.waze.com">Waze</a></li>
|
||||
<li><a href="https://www.openstreetmap.org">OpenStreetMap</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-col">
|
||||
<h4>More</h4>
|
||||
<ul>
|
||||
<li><a href="https://netslum.io/notes/overwatch-passive-counter-surveillance/">The writeup</a></li>
|
||||
<li><a href="https://netslum.io">netslum.io</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container footer-bottom">
|
||||
<p>
|
||||
OVERWATCH is a receive-only situational-awareness tool. It does not
|
||||
transmit, probe, jam, or interfere with any device or network.
|
||||
</p>
|
||||
<p class="footer-meta">
|
||||
v0.5.2 · <a href="https://github.com/KaraZajac/OVERWATCH">github.com/KaraZajac/OVERWATCH</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="app.js" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,35 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&family=Space+Grotesk:wght@700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
width: 1200px; height: 630px; overflow: hidden; position: relative;
|
||||
background: radial-gradient(130% 130% at 12% 8%, #101b2e 0%, #07070d 52%, #0b0712 100%);
|
||||
color: #ecedf7; font-family: "Inter", sans-serif;
|
||||
}
|
||||
.wrap { padding: 74px 82px; height: 100%; display: flex; flex-direction: column; justify-content: center; }
|
||||
.brand { display: flex; align-items: center; gap: 20px; margin-bottom: 26px; }
|
||||
.mark { color: #10b981; font-size: 46px; filter: drop-shadow(0 0 18px rgba(16,185,129,.8)); }
|
||||
.name { font-family: "Space Grotesk", sans-serif; font-weight: 700; font-size: 84px; letter-spacing: .01em; }
|
||||
.tag { font-size: 31px; line-height: 1.38; color: #c5c5d3; font-weight: 500; max-width: 960px; }
|
||||
.tag b { color: #ecedf7; font-weight: 700; }
|
||||
.tiers { display: flex; gap: 22px; margin: 36px 0 26px; }
|
||||
.tdot { display: flex; align-items: center; gap: 9px; font-family: "JetBrains Mono", monospace; font-size: 17px; color: #9a9aad; }
|
||||
.tdot i { width: 15px; height: 15px; border-radius: 50%; }
|
||||
.sources { font-family: "JetBrains Mono", monospace; font-size: 20px; color: #8a8a9d; }
|
||||
.sources b { color: #34d399; }
|
||||
.url { position: absolute; bottom: 48px; right: 82px; font-family: "JetBrains Mono", monospace; font-size: 21px; color: #5b5b75; }
|
||||
</style></head><body>
|
||||
<div class="wrap">
|
||||
<div class="brand"><span class="mark">◉</span><span class="name">OVERWATCH</span></div>
|
||||
<div class="tag">Passive surveillance detection for Android. Flag nearby <b>Flock ALPRs</b>, <b>Axon body cams</b> & <b>police</b> — <b>it only listens.</b></div>
|
||||
<div class="tiers">
|
||||
<span class="tdot"><i style="background:#22c55e;box-shadow:0 0 12px #22c55e"></i>GREEN</span>
|
||||
<span class="tdot"><i style="background:#eab308;box-shadow:0 0 12px #eab308"></i>YELLOW</span>
|
||||
<span class="tdot"><i style="background:#f97316;box-shadow:0 0 12px #f97316"></i>ORANGE</span>
|
||||
<span class="tdot"><i style="background:#ef4444;box-shadow:0 0 12px #ef4444"></i>RED</span>
|
||||
</div>
|
||||
<div class="sources">BLE · WiFi · <b>DeFlock</b> · Citizen · Waze — six sensors, fused</div>
|
||||
</div>
|
||||
<div class="url">overwatch.netslum.io</div>
|
||||
</body></html>
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
+1087
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user