Skip to content

NeighbourhoodWatch exists to help local communities coordinate fast, noisy, high-priority emergency alerts with minimal operational overhead.

Doc status: Latest (rolling). See Versions.

Product goals

  • Extremely simple onboarding and use under stress
  • Reliable alert fan-out (push notifications)
  • Minimal data storage (PII-minimising by default)
  • Secure, server-verified admin actions
  • Low maintenance architecture (managed services + Cloudflare edge)

Users & roles

  • Member (standard user):

    • Authenticates
    • Joins groups by invite code
    • Registers device push token
    • Triggers incident alerts for their group
  • Manager:

    • Creates groups
    • Creates invite codes
    • Broadcasts messages
    • Pauses/bans members

Principles

Data minimisation

  • Do not store home addresses.
  • Avoid storing exact coordinates where possible.
  • Prefer coarse location buckets (e.g. a zone id / geohash bucket) over exact latitude/longitude.
  • Address is stored on-device only, and transmitted only as an encrypted payload when an alert is triggered.

Security-first permissions

  • Every privileged action is verified server-side.
  • Client UI is not trusted for authorization decisions.

Operational simplicity

  • Push fan-out and authorization logic lives in the Cloudflare Worker API.
  • Firebase provides Auth + Firestore + FCM primitives.

Non-goals (by design)

  • Continuous location tracking
  • Storing exact addresses
  • Social features, feeds, or “engagement” loops
  • Medical advice, emergency triage, or replacing emergency services

Glossary

  • Group: a neighbourhood safety group with a coarse zoneId.
  • Invite code: short code used to join a group.
  • Incident: an emergency event triggered by a member.