Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f958e30653 | |||
| fb4502f79a | |||
| 869726ce19 | |||
| 66b58891a3 | |||
| 7d85dec970 | |||
| 98b6769256 |
@@ -1,5 +1,4 @@
|
|||||||
# [DЯΣΛMMΛKΣЯ]
|
# OVERWATCH
|
||||||
## . //0VΣЯW4TCH
|
|
||||||
|
|
||||||
A native Android (Kotlin) **passive surveillance-detection** app. Open it, hit
|
A native Android (Kotlin) **passive surveillance-detection** app. Open it, hit
|
||||||
**START**, and a circle turns **green / yellow / orange / red** depending on
|
**START**, and a circle turns **green / yellow / orange / red** depending on
|
||||||
@@ -17,6 +16,20 @@ Website: **[overwatch.netslum.io](https://overwatch.netslum.io)** · Latest re
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="docs/img/overwatch-main.png" width="240" alt="Main screen — live threat-map circle" />
|
||||||
|
|
||||||
|
<img src="docs/img/overwatch-sources.png" width="240" alt="Detection-source drill-down" />
|
||||||
|
|
||||||
|
<img src="docs/img/overwatch-settings.png" width="240" alt="Settings" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center"><sub>Live threat-map circle · source drill-down · settings</sub></p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## What it detects
|
## What it detects
|
||||||
|
|
||||||
| Source | What it looks at | Where it comes from |
|
| Source | What it looks at | Where it comes from |
|
||||||
|
|||||||
+44
-11
@@ -15,12 +15,13 @@
|
|||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:image" content="https://overwatch.netslum.io/og.png">
|
<meta name="twitter:image" content="https://overwatch.netslum.io/og.png">
|
||||||
<meta name="theme-color" content="#07070d">
|
<meta name="theme-color" content="#07070d">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="logo.svg">
|
||||||
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<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 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">
|
<link rel="stylesheet" href="style.css?v=2">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
@@ -33,13 +34,14 @@
|
|||||||
<nav class="nav">
|
<nav class="nav">
|
||||||
<div class="container nav-inner">
|
<div class="container nav-inner">
|
||||||
<a class="nav-brand" href="#">
|
<a class="nav-brand" href="#">
|
||||||
<span class="nav-mark" aria-hidden="true">◉</span>
|
<img class="nav-logo" src="logo.svg" width="30" height="30" alt="" aria-hidden="true">
|
||||||
OVERWATCH
|
OVERWATCH
|
||||||
</a>
|
</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<a href="#detect">How it works</a>
|
<a href="#detect">How it works</a>
|
||||||
<a href="#sources">Sources</a>
|
<a href="#sources">Sources</a>
|
||||||
<a href="#tiers">Tiers</a>
|
<a href="#tiers">Tiers</a>
|
||||||
|
<a href="#screens">Screens</a>
|
||||||
<a href="#download">Download</a>
|
<a href="#download">Download</a>
|
||||||
<a class="nav-github" href="https://github.com/KaraZajac/OVERWATCH" aria-label="GitHub">
|
<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">
|
<svg height="18" viewBox="0 0 16 16" width="18" fill="currentColor" aria-hidden="true">
|
||||||
@@ -55,7 +57,7 @@
|
|||||||
<div class="container hero-inner">
|
<div class="container hero-inner">
|
||||||
<div class="hero-eyebrow">
|
<div class="hero-eyebrow">
|
||||||
<span class="dot dot-pulse"></span>
|
<span class="dot dot-pulse"></span>
|
||||||
v0.5.2 · Android · passive
|
v0.5.3 · Android · passive
|
||||||
</div>
|
</div>
|
||||||
<h1 class="hero-title">
|
<h1 class="hero-title">
|
||||||
<span class="display-wordmark">OVERWATCH</span>
|
<span class="display-wordmark">OVERWATCH</span>
|
||||||
@@ -249,10 +251,10 @@
|
|||||||
<div class="bento-icon">🏠</div>
|
<div class="bento-icon">🏠</div>
|
||||||
<h3>Commercial</h3>
|
<h3>Commercial</h3>
|
||||||
<p>
|
<p>
|
||||||
Nearby consumer smart-home gear (Nest, Ring, Echo, hidden cams) as a
|
Nearby consumer smart-home gear (Nest, Ring, Echo, hidden cams) and
|
||||||
secondary situational signal, riding the BLE + WiFi scans.
|
<strong>smart glasses (Meta, Snap, Vuzix)</strong> as a secondary
|
||||||
Score-capped at ORANGE so a cluster of doorbells never reads as
|
situational signal, riding the BLE + WiFi scans. Score-capped at
|
||||||
ALPR-grade certainty.
|
ORANGE so a cluster of doorbells never reads as ALPR-grade certainty.
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
@@ -292,6 +294,37 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<!-- ──────────────── SCREENSHOTS ──────────────── -->
|
||||||
|
<section id="screens" class="section reveal">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-head">
|
||||||
|
<span class="section-tag">screenshots</span>
|
||||||
|
<h2>The whole app, top to bottom.</h2>
|
||||||
|
<p class="lead">No account, no onboarding, no cloud dashboard to
|
||||||
|
configure — open it, hit START, and drill into any source. Three taps
|
||||||
|
deep is as complex as it gets.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="shots">
|
||||||
|
<figure class="shot">
|
||||||
|
<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 you with a crosshair, and a STOP button." loading="lazy">
|
||||||
|
<figcaption><strong>The threat ring</strong>A live map centered on you, wrapped in the current tier's color. Green reads “all clear” at a glance.</figcaption>
|
||||||
|
</figure>
|
||||||
|
<figure class="shot">
|
||||||
|
<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">
|
||||||
|
<figcaption><strong>Source drill-down</strong>Tap the ring for every source, its live tier, and the exact observation that fired it.</figcaption>
|
||||||
|
</figure>
|
||||||
|
<figure class="shot">
|
||||||
|
<img class="phone" src="img/overwatch-settings.png" width="856" height="2000"
|
||||||
|
alt="Settings screen: per-source toggles, proximity distance sliders, and the encrypted Waze proxy token field." loading="lazy">
|
||||||
|
<figcaption><strong>Settings</strong>Toggle each source, tune proximity distances, and paste an encrypted Waze proxy token.</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<!-- ──────────────── CAPABILITIES ──────────────── -->
|
<!-- ──────────────── CAPABILITIES ──────────────── -->
|
||||||
<section class="section section-bento reveal">
|
<section class="section section-bento reveal">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -392,7 +425,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Grab the latest debug-signed APK from
|
<li>Grab the latest debug-signed APK from
|
||||||
<a href="https://github.com/KaraZajac/OVERWATCH/releases/latest">Releases</a>
|
<a href="https://github.com/KaraZajac/OVERWATCH/releases/latest">Releases</a>
|
||||||
(currently <strong>v0.5.2</strong>).</li>
|
(currently <strong>v0.5.3</strong>).</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="tl-col tl-active">
|
<div class="tl-col tl-active">
|
||||||
@@ -423,12 +456,12 @@
|
|||||||
<div class="container footer-inner">
|
<div class="container footer-inner">
|
||||||
<div class="footer-col">
|
<div class="footer-col">
|
||||||
<div class="footer-brand">
|
<div class="footer-brand">
|
||||||
<span class="nav-mark" aria-hidden="true">◉</span>
|
<img class="nav-logo" src="logo.svg" width="26" height="26" alt="" aria-hidden="true">
|
||||||
OVERWATCH
|
OVERWATCH
|
||||||
</div>
|
</div>
|
||||||
<p class="footer-tag">
|
<p class="footer-tag">
|
||||||
Passive Android surveillance-detection. Listens only — never
|
Passive Android surveillance-detection. Listens only — never
|
||||||
transmits. A DREAMMAKER project.
|
transmits.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-col">
|
<div class="footer-col">
|
||||||
@@ -462,7 +495,7 @@
|
|||||||
transmit, probe, jam, or interfere with any device or network.
|
transmit, probe, jam, or interfere with any device or network.
|
||||||
</p>
|
</p>
|
||||||
<p class="footer-meta">
|
<p class="footer-meta">
|
||||||
v0.5.2 · <a href="https://github.com/KaraZajac/OVERWATCH">github.com/KaraZajac/OVERWATCH</a>
|
v0.5.3 · <a href="https://github.com/KaraZajac/OVERWATCH">github.com/KaraZajac/OVERWATCH</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 108 108" width="108" height="108" role="img" aria-label="OVERWATCH">
|
||||||
|
<defs>
|
||||||
|
<radialGradient id="ow-bg" cx="50%" cy="40%" r="74%">
|
||||||
|
<stop offset="0" stop-color="#123a24"/>
|
||||||
|
<stop offset="1" stop-color="#0a0f12"/>
|
||||||
|
</radialGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="4" y="4" width="100" height="100" rx="26" fill="url(#ow-bg)" stroke="#1f3a2c"/>
|
||||||
|
<path d="M54,54 L54,20 A34,34 0 0,1 82.5,36 Z" fill="#1fbf6a" fill-opacity="0.30"/>
|
||||||
|
<circle cx="54" cy="54" r="33" fill="none" stroke="#10b981" stroke-width="2.4"/>
|
||||||
|
<circle cx="54" cy="54" r="22" fill="none" stroke="#10b981" stroke-width="2.2" stroke-opacity="0.82"/>
|
||||||
|
<circle cx="54" cy="54" r="11" fill="none" stroke="#10b981" stroke-width="2" stroke-opacity="0.68"/>
|
||||||
|
<path d="M54,21 V87 M21,54 H87" stroke="#10b981" stroke-width="1.3" stroke-opacity="0.5"/>
|
||||||
|
<circle cx="70" cy="40" r="4.6" fill="#ef4444"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 932 B |
+1
-1
@@ -21,7 +21,7 @@
|
|||||||
.url { position: absolute; bottom: 48px; right: 82px; font-family: "JetBrains Mono", monospace; font-size: 21px; color: #5b5b75; }
|
.url { position: absolute; bottom: 48px; right: 82px; font-family: "JetBrains Mono", monospace; font-size: 21px; color: #5b5b75; }
|
||||||
</style></head><body>
|
</style></head><body>
|
||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
<div class="brand"><span class="mark">◉</span><span class="name">OVERWATCH</span></div>
|
<div class="brand"><img src="logo.svg" style="width:80px;height:80px;border-radius:17px" alt=""><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="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">
|
<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:#22c55e;box-shadow:0 0 12px #22c55e"></i>GREEN</span>
|
||||||
|
|||||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 70 KiB |
@@ -1085,3 +1085,39 @@ pre.code .prompt { color: var(--accent-hot); user-select: none; }
|
|||||||
/* download steps: stack the timeline columns inside the split */
|
/* download steps: stack the timeline columns inside the split */
|
||||||
.dl-steps { grid-template-columns: 1fr !important; gap: 1rem; }
|
.dl-steps { grid-template-columns: 1fr !important; gap: 1rem; }
|
||||||
.dl-steps .tl-col { margin: 0; }
|
.dl-steps .tl-col { margin: 0; }
|
||||||
|
|
||||||
|
/* radar logo mark in nav/footer (replaces the ◉ glyph) */
|
||||||
|
.nav-logo { display: inline-block; vertical-align: middle; border-radius: 7px; }
|
||||||
|
.nav-brand .nav-logo { margin-right: 3px; }
|
||||||
|
|
||||||
|
/* ============================================================
|
||||||
|
SCREENSHOTS GALLERY
|
||||||
|
============================================================ */
|
||||||
|
.shots {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 2.6rem;
|
||||||
|
margin-top: 2.8rem;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
.shots .shot { margin: 0; display: flex; flex-direction: column; align-items: center; }
|
||||||
|
.shots .phone { width: 260px; max-width: 100%; }
|
||||||
|
.shots figcaption {
|
||||||
|
margin-top: 1.4rem;
|
||||||
|
max-width: 260px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.55;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.shots figcaption strong {
|
||||||
|
display: block;
|
||||||
|
color: var(--text);
|
||||||
|
font-family: var(--display);
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-bottom: 0.3rem;
|
||||||
|
}
|
||||||
|
@media (max-width: 820px) {
|
||||||
|
.shots { grid-template-columns: 1fr; gap: 3rem; }
|
||||||
|
.shots .phone { width: 256px; }
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user