这是一个 为 AI 编程时代设计的最小可用全栈 App 脚手架, 基于真实案例「死了么」APP 抽象而来,目标是:
让 AI 更容易写对代码,让人类更专注业务本身。
| 层级 | 技术 |
|---|---|
| 前端 | SwiftUI (iOS)、Jetpack Compose (Android) |
| 后端 | Supabase(BaaS) |
| 认证 | Anonymous Auth |
| 数据 | PostgreSQL + RLS |
| 服务端逻辑 | Supabase Edge Functions |
| 定时任务 | Supabase Cron Jobs |
- 前端即全栈(无自建后端服务)
- 声明式优先(UI / SQL / 权限)
- 数据库即规则中心(RLS)
- 最小上下文,最大确定性(AI 友好)
died-or-not-scaffold/
├── README.md # 项目说明
├── DEPLOYMENT.md # 部署指南
├── TESTING.md # 测试指南
├── .env.example # 环境变量模板
├── deploy.sh # 一键部署脚本
├── supabase/
│ ├── config.toml # Supabase 配置
│ ├── migrations/
│ │ ├── 001_init.sql # 表结构
│ │ ├── 002_rls.sql # 行级安全策略
│ │ └── 003_cron_job.sql # 定时任务配置
│ ├── setup-cron.sql # Cron 任务设置脚本
│ └── functions/
│ ├── check-missed-check-ins/
│ │ ├── index.ts # 定时扫描未签到用户
│ │ └── deno.json # Deno 配置
│ └── send-notification-email/
│ ├── index.ts # 发送通知
│ └── deno.json # Deno 配置
├── ios/
│ └── DiedOrNot/
│ ├── Package.swift # Swift Package 配置
│ ├── Config.swift # 应用配置
│ ├── App/
│ │ └── DiedOrNotApp.swift
│ ├── Services/
│ │ └── SupabaseManager.swift # Supabase 客户端管理
│ └── Views/
│ └── CheckInView.swift
└── android/
└── app/src/main/java/com/diedornot/app/
├── MainActivity.kt # 应用入口
├── data/
│ ├── SupabaseClient.kt # Supabase 客户端
│ ├── AuthService.kt # 认证服务
│ └── CheckInRepository.kt # 签到数据操作
├── model/
│ ├── UserProfile.kt # 用户模型
│ └── CheckIn.kt # 签到模型
└── ui/
├── CheckInScreen.kt # 主界面 (Compose)
└── CheckInViewModel.kt # 状态管理
- App 首次启动即匿名登录
- Supabase 自动生成 user_id
- 无注册 / 无密码 / 无感绑定
- 数据通过 RLS 自动隔离
适合 MVP / 单设备场景。
防重复签到:
unique (user_id, check_in_date)权限隔离:
auth.uid() = user_id所有安全规则前移至数据库层, 避免 AI 在业务代码中反复写错权限判断。
- 每天由 Cron 触发
- 扫描所有用户最近签到时间
- 连续 2 天未签到 → 触发通知
- 接收用户信息
- 发送邮件 / 可扩展短信、微信、钉钉
服务端逻辑 极少、确定、可替换。
# 安装 Supabase CLI
brew install supabase/tap/supabase
# 安装 Deno(用于 Edge Functions)
brew install deno# 启动本地 Supabase(需要 Docker)
supabase start
# 应用数据库迁移
supabase db resetcp .env.example .env
# 编辑 .env 文件,填入 supabase start 输出的本地凭证iOS:
# 使用 Xcode 打开项目
open ios/DiedOrNot
# 在 Config.swift 中配置本地 URL
# 然后在 Xcode 中 RunAndroid:
# 配置 Supabase 凭证
# 编辑 android/gradle.properties,填入本地凭证
# 使用 Android Studio 打开
open android/
# 或使用命令行构建
cd android
./gradlew build
./gradlew installDebug访问 Supabase 创建新项目
# 登录 Supabase
supabase login
# 关联项目
supabase link --project-ref <你的项目ID>
# 一键部署
./deploy.sh在 Supabase SQL Editor 中执行 supabase/setup-cron.sql(替换项目 URL 和密钥)
iOS: 在 Config.swift 中填入你的 Supabase URL 和 API Key
Android: 在 android/gradle.properties 中填入你的 Supabase URL 和 API Key
- 部署指南 - 完整的生产环境部署说明
- 测试指南 - 各项功能的测试方法
- Android 设置指南 - Android 客户端详细说明
- AI 开发指南 - AI 辅助开发最佳实践
SupabaseManager(服务层)
- 自动匿名登录
- 创建用户记录
- 签到功能(防重复)
- 查询签到状态
CheckInView(视图层)
- 响应式 UI
- 加载状态管理
- 错误处理和展示
- 用户 ID 显示
数据层
SupabaseClient: Supabase 客户端单例AuthService: 匿名认证服务CheckInRepository: 签到数据操作
UI 层
CheckInScreen: 主界面 (Compose 声明式 UI)CheckInViewModel: 状态管理 + 业务逻辑- Material 3 设计系统
设计对齐
- Android ≈ iOS 架构
- Compose ≈ SwiftUI (声明式)
- ViewModel ≈ @StateObject (状态管理)
- 共享同一个 Supabase 后端
- 扫描所有用户最后签到时间
- 计算距今天数
- 超过 2 天触发通知
- 返回详细执行结果
- 接收用户信息
- 记录通知日志
- 可扩展邮件服务集成(SendGrid / AWS SES)
users- 用户信息(id, name, emergency_email)check_ins- 签到记录(user_id, check_in_date)
- RLS 行级安全:用户只能访问自己的数据
- 唯一约束:防止同一天重复签到
- 外键约束:数据完整性保证
- AI 快速落地 MVP
- 个人 / 小团队 App
- 前端主导的全栈应用
- 无复杂后端工程需求
- 学习 Supabase + SwiftUI 全栈开发
AI 编程时代, 最重要的不是写多少代码,而是设计多少"不会被写错的约束"。
这个脚手架的目标是:
- 减少后端工程复杂度
- 压缩上下文规模
- 提高 AI 输出的确定性
- 支撑持续迭代而不返工
- 声明式优先 - SwiftUI / SQL / RLS 都是声明式,减少过程式代码
- 约束前置 - 数据库层面的约束,不依赖业务代码
- 最小惊讶 - 功能行为符合直觉,减少心智负担
- 可观测性 - 完善的日志和错误信息
完全基于 Supabase BaaS,无需自建后端服务器、无需容器编排、无需负载均衡。
数据访问控制在数据库层面实现,前端代码无需关心权限判断。
用户无需注册即可使用,降低使用门槛,适合快速验证想法。
使用 Deno 运行时,接近零冷启动,全球分布式部署。
使用 PostgreSQL 原生 pg_cron,无需额外的任务调度服务。
- 添加用户资料编辑功能
- 集成真实邮件服务(SendGrid / AWS SES / Resend)
- 添加推送通知(APNs)
- 实现签到历史查看
- 添加统计图表
- 添加 Android 应用(Kotlin + Jetpack Compose)
- 添加 Web 应用(React / Vue / Svelte)
- 实现账号关联(从匿名升级到正式账号)
- 添加单元测试和 E2E 测试
- 性能监控和错误追踪
- 抽象为通用 AI App Starter
- 封装成 CLI(create-ai-app)
- 增加 Rules / Skills 约束 AI 编码
- 提供更多场景模板
A: Supabase 基于 PostgreSQL,数据模型更灵活,RLS 更强大,且完全开源。
A: 默认不会过期,但可以在 Supabase 控制台配置过期策略。
A: 可以,Supabase 是开源的,可以自托管。
A: Supabase SDK 支持多平台(iOS / Android / Web / Flutter),可以复用后端逻辑。
Happy hacking! 🚀
有问题欢迎提 Issue 或 PR。