scriptlord/watchpoint
GitHub: scriptlord/watchpoint
WatchPoint 是一套专为封闭式社区打造的基于 Supabase/Postgres 的安全事件响应数据层,提供完整的表结构、行级安全规则和自动化测试套件。
Stars: 0 | Forks: 0
# WatchPoint
**专为住宅小区和封闭式社区打造的安全与应急响应网络。**
当小区里发生突发事件时——比如火灾、入室盗窃、深夜骚扰或水管爆裂——人们通常会在喧闹的 WhatsApp 群里手忙脚乱地求救。消息很容易被淹没,安保人员往往得知较晚,而且事后也没有关于事件经过或响应时间的记录。
WatchPoint 用一个共享系统取代了这种混乱:居民只需轻触屏幕即可一键报警,邻居可以核实情况,安保和管理人员能够迅速响应,所有人都能看到一条清晰、可信的事件时间线。
本项目专为 Kingdom Hack 3.0 —— Track D(安全 / 事件管理)赛道打造。
## 工作原理
1. **居民报告事件** —— 火灾、医疗、安全、洪水等。只需一键,可选择附带照片或语音备忘录。
2. **邻居进行核实或否认。** 附近经过认证的成员可以表示“是的,我也看到了”或“不是”。这会生成一个置信度评分,确保真实的紧急情况能迅速获得信任,同时拦截误报——而且在触发求助警报前无需等待投票。
3. **安保人员和管理者进行响应**,并将事件流转通过明确的阶段:已确认 → 处理中 → 已到场。
4. **只有报警人才能关闭警报**(“我现在安全了”)。像绑架或骚扰这样的警报会一直保持开启状态,直到报警人确认安全。无论警报是否关闭,安保都会继续进行调查。
5. **所有过程都会被记录**在时间线和审计日志中,让社区掌握事实依据而非争论不休。
## 角色介绍
- **居民** —— 报告事件,核实他人的报告,管理自己的访客。
- **社区管理者**(通常是房东) —— 管理一个住户单位并核实其中的居住者。每位管理者只能控制自己的住户单位,因此没人能悄无声息地将陌生人放入小区。
- **响应者** —— 负责处理事件的小区安保或巡视员。
新加入者一开始是未认证状态,就像没有权限的访客,直到其所属住户单位的管理者确认他们。如果管理者处理缓慢,任何已认证的邻居都可以公开催促他们——这对整个小区都是可见的,从而保持流程透明。
## 访客
访客没有 App 访问权限。居民可以选择:
- 添加**常访客**(例如来访一周的家人)并附上照片,以便安保在门口认出他们;或者
- 向安保直接发送**单次通行证**(例如维修工、干洗店员工)。
租客的访客列表仅对其本人和安保可见——不对管理者展示。每个访客记录都会被留存以备后用。
## 本仓库内容
本仓库是**数据层和系统架构**——这是构建应用程序的基础。它是一个专为 Supabase 设计的 Postgres 数据库。
```
supabase/
migrations/0001_init.sql
seed.sql
tests/
```
- `migrations/0001_init.sql` —— 完整的数据库:表、安全规则、自动化
- `seed.sql` —— 包含演示数据的示例小区,方便试用
- `tests/` —— 用于验证安全规则是否实际生效的自动化检查
该数据库包含 4 个领域共 17 张表:
| 领域 | 表 |
|---|---|
| 人员与地点 | estates, profiles, estate_members, households |
| 事件 | incidents, incident_confirmations, incident_resolution_disputes, incident_updates |
| 成员与访客 | member_verification_nudges, visitor_beneficiaries, visitor_passes |
| 小区运营 | escalation_rules, escalation_events, maintenance_tickets, service_providers, device_tokens, audit_log |
### 安全由数据库强制执行,而不仅依靠 App
即使有人绕过 App 直接访问数据库,以下规则依然有效:
- 每个小区只能看到自己的数据。
- 管理者只能验证其所属住户单位的居住者。
- 你不能确认自己的报告,也不能为自己提升权限。
- 只有报警人才能解决警报。
- 租客的访客列表仅对安保可见。
- 同一部手机的多次紧急连续触发会被合并为单次事件,而不是造成大量重复记录。
## 运行说明
**本地运行(在你的机器上运行完整的 Supabase):**
```
supabase init # creates the Supabase config in this project (run once)
supabase start # boots the local database, auth, and dashboard in Docker
supabase db reset # builds all the tables, then loads the demo data from seed.sql
```
在执行 `supabase start` 之后,打开位于 的控制台以浏览数据表。
**托管的 Supabase 项目:**
```
supabase link --project-ref # connects this code to your online project
supabase db push # builds all the tables in that online project
# 然后 将 seed.sql 粘贴到 项目的 SQL editor 中 以 加载 demo data
```
**运行安全规则测试**(需要本地安装 Postgres 17):
```
bash supabase/tests/run_rls_tests.sh # spins up a temporary database, builds it, and
# checks every safety rule holds, then cleans up
```
## 路线图规划
- 实时“我附近的事件”地图和热力图(PostGIS)。
- 推送通知和自动升级计时器。
- 城市级推广:消防和紧急救援服务等机构接收升级别的事件。
标签:PostgreSQL, Supabase, 事件管理, 多线程, 库, 应急响应, 测试用例, 社区安全, 行级安全, 请求拦截