no 404 on refresh
@@ -7,16 +7,3 @@ services:
|
||||
- 8080
|
||||
#restart: always
|
||||
stdin_open: true
|
||||
|
||||
nginx:
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||
- /etc/letsencrypt:/etc/letsencrypt
|
||||
environment:
|
||||
- SSL_CERTIFICATE=/etc/letsencrypt/live/deflock.me/fullchain.pem
|
||||
- SSL_CERTIFICATE_KEY=/etc/letsencrypt/live/deflock.me/privkey.pem
|
||||
restart: always
|
||||
|
||||
@@ -24,10 +24,6 @@ http {
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/certbot;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name":"sbt","version":"1.9.1","bspVersion":"2.1.0-M1","languages":["scala"],"argv":["/Users/willfreeman/Library/Java/JavaVirtualMachines/corretto-11.0.19/Contents/Home/bin/java","-Xms100m","-Xmx100m","-classpath","/Users/willfreeman/Library/Application Support/JetBrains/IdeaIC2024.1/plugins/Scala/launcher/sbt-launch.jar","-Dsbt.script=/Users/willfreeman/Library/Application%20Support/Coursier/bin/sbt","xsbt.boot.Boot","-bsp"]}
|
||||
{"name":"sbt","version":"1.9.1","bspVersion":"2.1.0-M1","languages":["scala"],"argv":["/Users/willfreeman/Library/Caches/Coursier/arc/https/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%252B7/OpenJDK17U-jdk_x64_mac_hotspot_17.0.10_7.tar.gz/jdk-17.0.10+7/Contents/Home/bin/java","-Xms100m","-Xmx100m","-classpath","/Users/willfreeman/Library/Caches/Coursier/arc/https/github.com/sbt/sbt/releases/download/v1.8.2/sbt-1.8.2.zip/sbt/bin/sbt-launch.jar","-Dsbt.script=/Users/willfreeman/Library/Caches/Coursier/arc/https/github.com/sbt/sbt/releases/download/v1.8.2/sbt-1.8.2.zip/sbt/bin/sbt","xsbt.boot.Boot","-bsp"]}
|
||||
@@ -70,9 +70,12 @@ object ShotgunServer {
|
||||
)
|
||||
}
|
||||
|
||||
val spaRoutes = pathSingleSlash {
|
||||
val spaRoutes = pathEndOrSingleSlash {
|
||||
getFromFile("../webapp/dist/index.html")
|
||||
} ~ getFromDirectory("../webapp/dist")
|
||||
} ~ getFromDirectory("../webapp/dist") ~
|
||||
path(Remaining) { _ =>
|
||||
getFromFile("../webapp/dist/index.html")
|
||||
}
|
||||
|
||||
val routes = handleRejections(rejectionHandler) {
|
||||
cors(corsSettings) {
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Vite App</title>
|
||||
<title>DeFlock - ALPR Database</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
BIN
webapp/public/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
webapp/public/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
webapp/public/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
@@ -2,16 +2,23 @@
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 1150 300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g>
|
||||
<text x="30.118px" y="267.042px" style="font-family:'FrizQuadrataStd', 'Friz Quadrata Std', sans-serif;font-weight:500;font-size:344.475px;fill:rgb(0,128,188);">de</text>
|
||||
<g transform="matrix(344.475,0,0,344.475,30.1181,267.042)">
|
||||
<path d="M0.377,-0.658L0.377,-0.655C0.421,-0.629 0.415,-0.593 0.415,-0.547L0.415,-0.415C0.373,-0.452 0.317,-0.473 0.261,-0.473C0.124,-0.473 0.024,-0.364 0.024,-0.229C0.024,-0.08 0.131,0.013 0.277,0.013C0.295,0.013 0.312,0.013 0.329,0.008L0.388,-0.082C0.361,-0.065 0.334,-0.053 0.302,-0.053C0.197,-0.053 0.125,-0.142 0.125,-0.243C0.125,-0.334 0.19,-0.407 0.27,-0.407C0.323,-0.407 0.374,-0.383 0.399,-0.335C0.418,-0.298 0.415,-0.254 0.415,-0.214L0.415,-0L0.544,-0L0.544,-0.003C0.5,-0.027 0.506,-0.064 0.506,-0.11L0.506,-0.674L0.503,-0.674C0.492,-0.658 0.468,-0.658 0.445,-0.658L0.377,-0.658Z" style="fill:rgb(0,128,188);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(344.475,0,0,344.475,229.914,267.042)">
|
||||
<path d="M0.5,-0.246C0.504,-0.375 0.411,-0.473 0.275,-0.473C0.126,-0.473 0.025,-0.372 0.025,-0.233C0.025,-0.094 0.142,0.013 0.312,0.013C0.359,0.013 0.407,0.006 0.45,-0.012L0.5,-0.106L0.497,-0.106C0.451,-0.07 0.393,-0.053 0.333,-0.053C0.22,-0.053 0.135,-0.124 0.133,-0.246L0.5,-0.246ZM0.137,-0.304C0.149,-0.367 0.199,-0.407 0.266,-0.407C0.338,-0.407 0.384,-0.374 0.395,-0.304L0.137,-0.304Z" style="fill:rgb(0,128,188);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(344.475,0,0,344.475,409.04,267.042)">
|
||||
<path d="M0.023,-0.394L0.071,-0.394L0.071,-0.11C0.071,-0.064 0.077,-0.027 0.033,-0.003L0.033,-0L0.2,-0L0.2,-0.003C0.156,-0.028 0.162,-0.064 0.162,-0.11L0.162,-0.394L0.264,-0.394C0.276,-0.394 0.291,-0.391 0.295,-0.38L0.298,-0.38L0.298,-0.46L0.162,-0.46C0.162,-0.56 0.157,-0.608 0.249,-0.608C0.278,-0.608 0.308,-0.603 0.333,-0.59L0.333,-0.11C0.333,-0.064 0.339,-0.027 0.295,-0.003L0.295,-0L0.462,-0L0.462,-0.003C0.418,-0.027 0.424,-0.064 0.424,-0.11L0.424,-0.674L0.421,-0.674C0.411,-0.663 0.394,-0.656 0.378,-0.656C0.347,-0.656 0.319,-0.674 0.266,-0.674C0.206,-0.674 0.148,-0.654 0.107,-0.608C0.068,-0.564 0.071,-0.525 0.071,-0.46L0.023,-0.394Z" style="fill:rgb(37,37,37);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(344.475,0,0,344.475,409.04,267.042)">
|
||||
<g transform="matrix(344.475,0,0,344.475,581.278,267.042)">
|
||||
<path d="M0.276,0.013C0.417,0.013 0.537,-0.091 0.537,-0.235C0.537,-0.303 0.506,-0.369 0.455,-0.414C0.407,-0.456 0.352,-0.473 0.288,-0.473C0.144,-0.473 0.023,-0.376 0.023,-0.226C0.023,-0.084 0.139,0.013 0.276,0.013ZM0.281,-0.053C0.179,-0.053 0.124,-0.152 0.124,-0.244C0.124,-0.334 0.184,-0.407 0.277,-0.407C0.384,-0.407 0.436,-0.311 0.436,-0.214C0.436,-0.124 0.373,-0.053 0.281,-0.053Z" style="fill:rgb(37,37,37);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(344.475,0,0,344.475,498.604,267.042)">
|
||||
<g transform="matrix(344.475,0,0,344.475,774.184,267.042)">
|
||||
<path d="M0.415,-0.461C0.38,-0.469 0.343,-0.473 0.307,-0.473C0.156,-0.473 0.022,-0.39 0.022,-0.218C0.022,-0.088 0.142,0.013 0.296,0.013C0.34,0.013 0.386,0.009 0.428,-0.007L0.48,-0.102L0.477,-0.102C0.438,-0.073 0.382,-0.053 0.331,-0.053C0.22,-0.053 0.123,-0.129 0.123,-0.244C0.123,-0.339 0.193,-0.407 0.29,-0.407C0.335,-0.407 0.383,-0.391 0.412,-0.358L0.415,-0.358L0.415,-0.461Z" style="fill:rgb(37,37,37);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(344.475,0,0,344.475,1097.99,267.042)">
|
||||
<g transform="matrix(344.475,0,0,344.475,932.642,267.042)">
|
||||
<path d="M0.029,-0.658L0.029,-0.655C0.072,-0.63 0.066,-0.593 0.066,-0.547L0.066,-0.111C0.066,-0.065 0.072,-0.028 0.029,-0.003L0.029,-0L0.196,-0L0.196,-0.003C0.151,-0.028 0.157,-0.065 0.157,-0.111L0.157,-0.674L0.154,-0.674C0.141,-0.659 0.117,-0.658 0.095,-0.658L0.029,-0.658ZM0.324,-0.056C0.343,-0.029 0.368,-0 0.426,-0L0.504,-0C0.459,-0.028 0.429,-0.071 0.398,-0.112L0.276,-0.267L0.443,-0.46L0.291,-0.46L0.291,-0.457C0.301,-0.451 0.31,-0.442 0.31,-0.428C0.31,-0.403 0.274,-0.365 0.259,-0.348L0.176,-0.257L0.324,-0.056Z" style="fill:rgb(37,37,37);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<text x="581.278px" y="267.042px" style="font-family:'FrizQuadrataStd', 'Friz Quadrata Std', sans-serif;font-weight:500;font-size:344.475px;fill:rgb(37,37,37);"><tspan x="581.278px " y="267.042px ">o</tspan>ck</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 4.1 KiB |
BIN
webapp/public/deflock-poster.pdf
Normal file
BIN
webapp/public/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 778 B |
BIN
webapp/public/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 15 KiB |
1
webapp/public/site.webmanifest
Normal file
@@ -0,0 +1 @@
|
||||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
||||
@@ -6,7 +6,9 @@ const items = [
|
||||
{ title: 'Map', icon: 'mdi-map', to: '/' },
|
||||
{ title: 'What is an ALPR?', icon: 'mdi-cctv', to: '/what-is-an-alpr' },
|
||||
{ title: 'Report an ALPR', icon: 'mdi-map-marker-plus', to: '/report' },
|
||||
{ title: 'Feature Roadmap', icon: 'mdi-road-variant', to: '/roadmap' },
|
||||
{ title: 'About', icon: 'mdi-information', to: '/about' },
|
||||
{ title: 'Contact', icon: 'mdi-email', to: '/contact' },
|
||||
]
|
||||
const drawer = ref(false)
|
||||
</script>
|
||||
|
||||
@@ -3,6 +3,15 @@ import HomeView from '../views/HomeView.vue'
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(import.meta.env.BASE_URL),
|
||||
scrollBehavior(to, from, savedPosition) {
|
||||
if (to.hash) {
|
||||
return {
|
||||
el: to.hash,
|
||||
behavior: 'smooth',
|
||||
}
|
||||
}
|
||||
return { top: 0 }
|
||||
},
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
@@ -27,6 +36,16 @@ const router = createRouter({
|
||||
name: 'report',
|
||||
component: () => import('../views/ReportView.vue')
|
||||
},
|
||||
{
|
||||
path: '/contact',
|
||||
name: 'contact',
|
||||
component: () => import('../views/ContactView.vue')
|
||||
},
|
||||
{
|
||||
path: '/roadmap',
|
||||
name: 'roadmap',
|
||||
component: () => import('../views/RoadmapView.vue')
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
|
||||
@@ -1,19 +1,53 @@
|
||||
<template>
|
||||
<v-container>
|
||||
<h2>Who are we?</h2>
|
||||
<h2>About Us</h2>
|
||||
<p>
|
||||
We are a group of concerned citizens who want to raise awareness about the use of Automated License Plate Readers (ALPRs) in the United States. Our goal is to provide information about ALPRs, their uses, and their implications for privacy and civil liberties.
|
||||
Welcome to DeFlock, your go-to resource for understanding and addressing the growing presence of Automated License Plate Readers (ALPRs) in our communities.
|
||||
</p>
|
||||
|
||||
<h2>What do we want?</h2>
|
||||
<h2>Our Mission</h2>
|
||||
<p>
|
||||
Donuts.
|
||||
Our mission is simple: to shine a light on the widespread use of ALPR technology, raise awareness about the threats it poses to personal privacy and civil liberties, and empower the public to take action. ALPRs are increasingly being deployed by law enforcement and private companies without the public's full understanding or consent, and they collect vast amounts of data on our movements, often without any real oversight.
|
||||
</p>
|
||||
|
||||
<h2>When do we want them?</h2>
|
||||
<h2>Why This Matters</h2>
|
||||
<p>
|
||||
Now.
|
||||
Privacy is a fundamental right, and the growing use of ALPRs threatens to erode it. Every day, ALPRs capture and store details about the movements of millions of innocent people, creating a massive database that can be used for anything from routine surveillance to potentially more nefarious purposes. This constant monitoring can deter people from exercising their freedoms, like attending protests or engaging in other forms of free expression, which should concern all of us.
|
||||
</p>
|
||||
|
||||
<h2>What We Do</h2>
|
||||
<div class="ml-4">
|
||||
<h3>Educate</h3>
|
||||
<p>
|
||||
We provide easy-to-understand information about what ALPRs are, how they work, and why you should care.
|
||||
</p>
|
||||
|
||||
<h3>Report & Track</h3>
|
||||
<p>
|
||||
Through our platform, you can report locations where you spot ALPRs, and view an interactive map showing where these surveillance devices are deployed.
|
||||
</p>
|
||||
|
||||
<h3>Advocate for Change</h3>
|
||||
<p>
|
||||
We encourage communities to stand up against the unchecked spread of these surveillance systems. Together, we can push for greater accountability, stronger privacy protections, and a rollback of invasive surveillance practices.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2>Get Involved</h2>
|
||||
<p>
|
||||
Want to help us in our mission? Here are a few ways you can get involved:
|
||||
</p>
|
||||
<div class="ml-4">
|
||||
<h3>Report ALPRs</h3>
|
||||
<p>
|
||||
If you spot an ALPR in your community, <router-link to="/report">let us know</router-link>! Your reports help us build a more comprehensive picture of where these devices are being used.
|
||||
</p>
|
||||
|
||||
<h3>Spread the Word</h3>
|
||||
<p>
|
||||
Share our site with your friends, family, and social networks to help raise awareness about the dangers of ALPRs.
|
||||
</p>
|
||||
</div>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
|
||||
14
webapp/src/views/ContactView.vue
Normal file
@@ -0,0 +1,14 @@
|
||||
<template>
|
||||
<v-container>
|
||||
<h2>Contact Us</h2>
|
||||
<p>
|
||||
If you have any questions or concerns about the data on this site, please contact us at <a href="mailto:contact@deflock.me">contact@deflock.me</a>.
|
||||
</p>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
p {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
</style>
|
||||
@@ -1,5 +1,15 @@
|
||||
<template>
|
||||
<v-container>
|
||||
<v-alert
|
||||
variant="tonal"
|
||||
type="info"
|
||||
class="my-6"
|
||||
title="Reporting Feature Coming Soon"
|
||||
>
|
||||
<p>
|
||||
We're working on a feature that will allow you to report ALPRs directly on this site. In the meantime, you can follow the steps below to add the ALPR to OpenStreetMap.
|
||||
</p>
|
||||
</v-alert>
|
||||
<h2>How to Report an ALPR</h2>
|
||||
<p>
|
||||
If you've spotted an ALPR in your area, you can help us track it by reporting it to OpenStreetMap, where we source our information. Here's how you can do it:
|
||||
@@ -12,7 +22,7 @@
|
||||
title="Are you sure it's an ALPR?"
|
||||
>
|
||||
<p>
|
||||
Before you report an ALPR, please read our <router-link style="color: unset !important" to="/what-is-an-alpr">guide on what ALPRs look like</router-link> to make sure you're reporting the right thing.
|
||||
Before you report an ALPR, please read our <router-link style="color: unset !important" to="/what-is-an-alpr#not-alpr">guide on what ALPRs look like</router-link> to make sure you're reporting the right thing.
|
||||
</p>
|
||||
</v-alert>
|
||||
|
||||
@@ -45,20 +55,14 @@
|
||||
camera:type=fixed<br>
|
||||
surveillance=traffic<br>
|
||||
surveillance:zone=traffic<br>
|
||||
</DFCode>
|
||||
|
||||
<v-img class="my-4" src="/paste-tags.png" />
|
||||
|
||||
<p>
|
||||
If you've identified the brand of the ALPR as Flock Safety, then you can also add the following tags:
|
||||
</p>
|
||||
<DFCode>
|
||||
operator=Flock Safety<br>
|
||||
operator:wikidata=Q108485435<br>
|
||||
brand=Flock Safety<br>
|
||||
brand:wikidata=Q108485435<br>
|
||||
</DFCode>
|
||||
|
||||
<v-img class="my-4" src="/paste-tags.png" />
|
||||
|
||||
<h3>4. Adjust the Direction</h3>
|
||||
|
||||
<v-img src="/adjust-angle.png" />
|
||||
@@ -72,13 +76,17 @@
|
||||
Once you've added the ALPR to the map, click the <strong>Save</strong> button in the top left corner of the editor. You'll be asked to provide a brief description of your changes. Once you've submitted your changes, the ALPR will be added to OpenStreetMap.
|
||||
</p>
|
||||
|
||||
<h3>6. Hang a Sign</h3>
|
||||
<p>
|
||||
Download our <a href="/deflock-poster.pdf" target="_blank">ALPR sign</a> and hang it near the ALPR to help raise awareness about the device. Be sure to follow all local laws and regulations when hanging signs.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import DFCode from '@/components/DFCode.vue';
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
45
webapp/src/views/RoadmapView.vue
Normal file
@@ -0,0 +1,45 @@
|
||||
<template>
|
||||
<v-container>
|
||||
<h1>Feature Roadmap</h1>
|
||||
|
||||
<h2>Current Features</h2>
|
||||
<div class="ml-4">
|
||||
<h3><v-icon start>mdi-map</v-icon>Map</h3>
|
||||
<p>
|
||||
View an interactive map showing where ALPRs are deployed.
|
||||
</p>
|
||||
|
||||
<h3><v-icon start>mdi-map-marker-plus</v-icon>Report an ALPR (third party)</h3>
|
||||
<p>
|
||||
Report locations where you spot ALPRs on OpenStreetMap with links and instructions on how to do so.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2>Upcoming Features</h2>
|
||||
<div class="ml-4">
|
||||
<h3><v-icon start>mdi-map-marker-plus</v-icon>Report an ALPR on this Site</h3>
|
||||
<p>
|
||||
Report ALPRs directly from this site, without having to use the OSM Editor or copy and paste object tags.
|
||||
</p>
|
||||
|
||||
<h3><v-icon start>mdi-navigation</v-icon>Navigation Around ALPRs</h3>
|
||||
<p>
|
||||
We're working on a feature that will help you navigate around ALPRs, so you can avoid them if you choose.
|
||||
</p>
|
||||
</div>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
h2 {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
</style>
|
||||
@@ -6,37 +6,68 @@
|
||||
|
||||
<h2>What is an ALPR</h2>
|
||||
<p>
|
||||
An Automated License Plate Reader (ALPR) is a technology that uses cameras and image processing to automatically read vehicle license plates. These cameras can be mounted on police cars, fixed on utility poles, or even positioned on private properties, capturing images of passing vehicles. ALPR systems extract plate numbers, record the time and location of the vehicle, and often cross-reference that information with databases for law enforcement or private monitoring purposes. This data can be used for a range of reasons, from catching stolen vehicles to tracking the movement of specific cars.
|
||||
</p>
|
||||
<p>
|
||||
The primary use of ALPRs is surveillance—they gather data that can help create a detailed record of where a vehicle has been over time. This has raised privacy concerns since the vast majority of drivers are not involved in any crime, yet their movements are being documented.
|
||||
Automated License Plate Readers (ALPRs) are cameras that capture images of all passing license plates, storing details like the car's location, date, and time. These cameras collect data on millions of vehicles—regardless of whether the driver is suspected of a crime. While these systems can be useful for tracking stolen cars or wanted individuals, they are mostly used to track the movements of innocent people.
|
||||
</p>
|
||||
|
||||
<h2>What is NOT an ALPR</h2>
|
||||
<p>For a detailed explanation of how ALPRs are a threat to privacy, see this <a href="https://www.aclu.org/issues/privacy-technology/you-are-being-tracked" target="_blank">ACLU article on them</a>.</p>
|
||||
|
||||
<h2>Why Should You Be Concerned</h2>
|
||||
<p>
|
||||
ALPRs can invade your privacy and violate civil liberties in several key ways:
|
||||
</p>
|
||||
|
||||
<div class="ml-4">
|
||||
<h3>Mass Surveillance</h3>
|
||||
<p>Your daily movements are tracked and logged, often indefinitely. This creates a detailed record of your daily activities. This information can be used to infer personal details about your life.</p>
|
||||
|
||||
<h3>Data Sharing</h3>
|
||||
<p>ALPR data is often shared with other agencies, including federal law enforcement. This can lead to the creation of a massive database of innocent people's movements.</p>
|
||||
|
||||
<h3>Chilling Effect on Freedoms</h3>
|
||||
<p>The knowledge that you are being watched can have a chilling effect on your freedom of speech and association. People may avoid attending protests or political events for fear of being tracked.</p>
|
||||
|
||||
<h3>Potential for Abuse</h3>
|
||||
<p>Law enforcement officers or other individuals with access could misuse this data, for example, tracking ex-partners, political rivals, or targeting specific communities without oversight.</p>
|
||||
</div>
|
||||
|
||||
<h2 id="not-alpr" :class="{ highlighted: route.hash === '#not-alpr' }">What They Look Like</h2>
|
||||
<v-img class="my-4" width="400" src="/flock-camera.jpeg" />
|
||||
<p>
|
||||
The most common brand of ALPRs in the US is Flock Safety. They are easy to spot because they almost all look the same. They are usually mounted on a standalone black pole with a solar panel on top. The cameras are often placed near intersections or on main roads at the edge of a city or town.
|
||||
</p>
|
||||
|
||||
<h2>Not All Cameras are ALPRs</h2>
|
||||
<p>
|
||||
Not all cameras near roads are ALPRs. Many people mistakenly assume that every traffic camera or intersection camera is an ALPR, but that's not true. Here are some things ALPRs are not:
|
||||
</p>
|
||||
|
||||
<h3>Traffic Cameras</h3>
|
||||
<div class="flex-image">
|
||||
<v-img rounded cover aspect-ratio="4/3" width="180" src="/traffic-camera.jpg" />
|
||||
<p>Standard traffic cameras typically capture live video or images of intersections to monitor traffic flow and manage signals. They do not specifically focus on reading license plates or storing data long-term.</p>
|
||||
</div>
|
||||
<div class="ml-4">
|
||||
<h3>Traffic Cameras</h3>
|
||||
<div class="flex-image">
|
||||
<v-img rounded cover aspect-ratio="4/3" width="180" src="/traffic-camera.jpg" />
|
||||
<p>Standard traffic cameras typically capture live video or images of intersections to monitor traffic flow and manage signals. They do not specifically focus on reading license plates or storing data long-term.</p>
|
||||
</div>
|
||||
|
||||
<h3>Red Light Cameras/Speed Cameras</h3>
|
||||
<div class="flex-image">
|
||||
<v-img rounded cover aspect-ratio="4/3" width="180" src="/redlight-camera.jpg" />
|
||||
<p>These cameras are set up to capture violations, such as running a red light or speeding. They may record plate numbers when a violation is detected, but they do not perform continuous surveillance or collect location data over time.</p>
|
||||
</div>
|
||||
<h3>Red Light Cameras/Speed Cameras</h3>
|
||||
<div class="flex-image">
|
||||
<v-img rounded cover aspect-ratio="4/3" width="180" src="/redlight-camera.jpg" />
|
||||
<p>These cameras are set up to capture violations, such as running a red light or speeding. They may record plate numbers when a violation is detected, but they do not perform continuous surveillance or collect location data over time.</p>
|
||||
</div>
|
||||
|
||||
<h3>Security Cameras</h3>
|
||||
<div class="flex-image">
|
||||
<v-img rounded cover aspect-ratio="4/3" width="180" src="/security-camera.jpg" />
|
||||
<p>Cameras used by businesses or homeowners for security purposes may capture vehicles incidentally, but they are not specifically designed to automatically read and record license plates.</p>
|
||||
<h3>Security Cameras</h3>
|
||||
<div class="flex-image">
|
||||
<v-img rounded cover aspect-ratio="4/3" width="180" src="/security-camera.jpg" />
|
||||
<p>Cameras used by businesses or homeowners for security purposes may capture vehicles incidentally, but they are not specifically designed to automatically read and record license plates.</p>
|
||||
</div>
|
||||
</div>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useRoute } from 'vue-router';
|
||||
const route = useRoute();
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
h2 {
|
||||
margin-top: 2rem;
|
||||
@@ -56,4 +87,15 @@ p {
|
||||
align-items: center;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-top: 0.5rem;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.highlighted {
|
||||
background-color: yellow;
|
||||
padding: 0.5rem;
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
</style>
|
||||
|
||||