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, 事件管理, 多线程, 库, 应急响应, 测试用例, 社区安全, 行级安全, 请求拦截