Daniel McGee 2b5e1643b5 Fix cart/collection duplication and reduce empty-cart risk in Shopify embed
Root causes:
- updateConfig() on collection switches did not clear previously-rendered
  product tiles before adding the new collection's, so switching
  categories stacked the new grid below the old one instead of replacing
  it
- Theme toggles could fire overlapping async onReady() callbacks (if
  isDark settles in more than one tick), and the second createComponent()
  call landed on top of the first instead of replacing it, producing
  duplicate tiles
- buildClient() was being called fresh on every theme/collection change
  instead of once per page load, increasing exposure to the pre-existing
  "empty cart on page load" issue by triggering it on every toggle

Fixes:
- Add getShopifyUI() to bootstrap buildClient()/UI.onReady() exactly once
  and cache the promise; every render reuses the same client/UI going
  forward, matching original page-load behavior
- Remove the updateConfig() shortcut entirely — collection switches and
  theme changes now go through the same single render path
- Always destroyShopifyComponents() (collection plus any auto-spawned
  cart/toggle) and clear the container before rebuilding, so no stale DOM
  can persist across a switch
- Reintroduce a shopifyRenderToken guard so a stale async callback from a
  superseded render becomes a no-op instead of creating duplicate tiles

Files changed:
  src/pages/StorePage.vue
2026-07-01 22:30:23 -04:00
2024-09-30 17:33:30 -05:00
2026-04-29 21:42:23 -06:00
2025-12-23 19:20:02 -06:00
2026-04-26 22:13:16 -06:00
2026-04-26 22:13:16 -06:00
2024-10-28 13:01:53 -05:00
2026-04-26 22:53:56 -06:00

DeFlock

Crowdsourced tool for locating and reporting ALPRs. View Live Site.

DeFlock Screenshot

Purpose

I created this project after noticing the mass deployment of ALPRs in cities, towns, and even rural areas in the recent years. It's a massive threat to privacy, and this projects helps shed a light on this issue as ALPRs continue to be deployed to thousands of cities across the US and possibly beyond.

What it Does

View ALPRs on a Map

Uses OpenStreetMap data to populate a map with crowdsourced locations of ALPRs, along with their type and direction they face.

The map has become a separate repository, deflockhopper_maps.

Report ALPRs

Provides instructions for using the DeFlock App or OpenStreetMap's iD web editor to report ALPRs using a standardized tagging system.

Identify ALPRs

A constantly-growing repository of ALPR makes, models, and tagging instructions for OpenStreetMap, along with images for identifying them.

Tech Stack

Backend

  • TypeScript
  • Fastify API server
  • Cloudflare R2 for ALPR points and vector tiles
  • OpenTelemetry

Cloud

Frontend

  • Vue3
  • Vuetify
  • MapLibre GL
  • Vue Leaflet [deprecated] - phasing out for MapLibre GL

Services

  • OpenStreetMap - Overpass API, Basic Map Tiles [deprecated]
  • Nominatim - Geocoding

Development

Requirements

Running Frontend

  1. cd webapp
  2. bun i
  3. bun dev

Running Backend

  1. cd api
  2. bun i
  3. bun dev

Contributing

We welcome contributions from anyone. Here's how you can help:

How to Contribute

  1. Fork the Repository
  2. Make Your Changes
  3. Open a Pull Request against This Repo
S
Description
No description provided
Readme MIT 31 MiB
Languages
Vue 75.8%
TypeScript 13.7%
HCL 4%
Python 2.1%
JavaScript 1.7%
Other 2.6%