iamiscdev/snapalert
GitHub: iamiscdev/snapalert
面向菲律宾社区的公共安全事件上报平台,集成 AI 视觉分析和实时仪表盘,支持匿名上报与辖区级别的权限隔离。
Stars: 0 | Forks: 0
# SnapAlert
菲律宾社区安全事件上报平台 - 集成 Supabase 身份验证、实时仪表盘,并支持市/社区级别的辖区隔离。
## 我们提供的功能
- **Supabase Auth** - 登录、注册、会话管理
- **Supabase Database** - 存储用户响应
- **Supabase Storage** - 存储事件照片
- **辖区隔离** - 响应人员仅能通过 Supabase 行级安全性 (RLS) 查看来自其市/社区的上报信息
- **角色系统** - `citizen`(市民)、`responder`(响应人员)、`admin`(管理员)
- **匿名上报** - 无需账号;市民可选择匿名或登录后上报
- **实时仪表盘** - Supabase Realtime 实时推送新上报信息
## 技术栈
| 层级 | 工具 |
|---|---|
| 前端 | React 18 + Vite |
| 路由 | React Router v6 |
| 地图 | Leaflet.js + react-leaflet |
| AI 视觉 | Claude Vision API (claude-sonnet-4-6) |
| 位置 | Browser Geolocation API |
| 最近设施 | Google Places API |
| 后端 | Vercel Edge Functions (`/api/*`) |
| 部署 | Vercel |
## 角色与默认凭据
| 角色 | 电子邮件 | 默认密码 | 访问权限 |
|------------|--------------------------|---------------------|--------------------------------------|
| 管理员 | admin@snapalert.ph | `Admin@2026!` | 仪表盘 - 所有辖区 |
| 响应人员 | parang@marikina.gov.ph | `Parang123!` | 仪表盘 - 仅限 brgy parang |
| 响应人员 | batasanhills@quezoncity.gov.ph | `Batasan123!` | 仪表盘 - 仅限 brgy batasan hills |
| 响应人员 | fortbonifacio@taguig.gov.ph | `FortBonifacio123!` | 仪表盘 - 仅限 brgy fort bonifacio |
| 响应人员 | rosario@pasigcity.gov.ph | `Rosario123!` | 仪表盘 - 仅限 brgy rosario |
**首次登录后请立即更改这些密码。**
## 设置说明
### 1. Supabase 项目
1. 在 [supabase.com](https://supabase.com) 创建一个新项目
2. 打开 SQL 编辑器并运行 `supabase/schema.sql`
3. 在 **Authentication > Settings** 中,配置你的站点 URL
### 2. 创建默认账号
在 **Authentication > Users** 中,创建:
- `admin@snapalert.ph`,密码为 `Admin@2026!`
然后运行 `schema.sql` 中的 UPDATE 语句(在底部被注释掉的部分)以设置它们的角色。
### 3. 环境变量
```
VITE_ANTHROPIC_API_KEY=your_anthropic_key
VITE_GOOGLE_PLACES_API_KEY=your_google_places_key
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
```
对于无服务器 API 功能 (Vercel),还需设置:
```
ANTHROPIC_API_KEY=...
SUPABASE_URL=...
SUPABASE_SERVICE_KEY=... (service role key, not anon key)
```
### 4. 安装与运行
```
npm install
npm run dev
```
## 辖区隔离
- **市民** 在上报时选择其市/社区(匿名上报时可选)
- **响应人员** 在其个人资料中被分配一个市(以及可选的社区)
- Supabase RLS 确保响应人员的仪表盘查询仅返回与其所在市匹配的上报信息
- **管理员** 可以查看所有辖区的所有上报信息
## 添加更多市/社区
编辑 `src/lib/jurisdictions.js` 以添加更多市及其下属社区。
## 页面
| 路径 | 描述 |
|--------------|-------------------------------------------|
| `/` | 快照上报页面(匿名或登录) |
| `/login` | 管理员/响应人员/市民登录 |
| `/register` | 市民账号注册 |
| `/myreports` | 市民仪表盘(需认证) |
| `/dashboard` | 管理员/响应人员仪表盘(需认证) |
标签:Claude API, jurisdiction-isolation, Leaflet, OSV, React, RLS, Supabase, Syscalls, Vercel, Vite, 事件报告, 人工智能分析, 公共安全, 匿名举报, 图片上传, 地图可视化, 地理定位, 实时仪表盘, 库, 应急响应, 智慧城市, 社区安全, 自定义脚本, 菲律宾, 角色权限管理, 计算机视觉, 边缘计算