零代码的"死了么"APP:从网页到应用开发思路
凌晨三点,你一个人倒在出租屋里。
没有智能手表报警,没有摄像头识别异常,甚至没有人知道你今晚在做什么,多久才会被发现?
这是当代年轻人必须要面对的困境。
最近,一款叫 “死了么” 的 APP 在 AppStore 下载榜突然窜升。它不监测心率,不分析睡眠,只做一件事:48 小时不打卡,系统自动给你的紧急联系人发邮件,提醒对方“你可能已经出事了”。
这没有任何技术含量,却精准戳中了独居年轻人最隐秘、也最现实的焦虑。这是数字时代最朴素、也最诚实的遗嘱系统,确保你死了会被发现。
今天我们就用两套零代码方案,做出一个能跑的“死了么”原型,全程只用点鼠标,毕竟写代码不是你的工作。
图 1:APP 功能演示示例(点击打卡与倒计时效果)
01
为什么这个 APP 有商业价值
场景 1:独居老人监护
中国独居老人超过 1.18 亿,子女不在身边,每天打电话又显得多余。这个 APP 可以设置成每天上午 10 点前打卡,如果没打卡,自动通知子女或物业。
场景 2:高风险职业自我保护
记者、律师、社工等职业有时会面临人身威胁。设置成每 12 小时打卡一次,如果失联,紧急联系人会第一时间收到警报。
场景 3:心理健康监测
抑郁症患者的家属可以用这个功能变相监测状态。不是监控聊天记录,而是监测是否保持正常作息。如果连续 3 天凌晨 4 点才打卡,说明可能需要介入。
商业化路径
| 模式 | 定价 | 目标用户 | 年收入潜力 |
|---|---|---|---|
| To C 免费+广告 | 0 元,广告分成 | 独居年轻人 | 50 万(10 万用户×5 元 CPM) |
| To B 企业版 | 1980 元/年 | 物业公司、养老机构 | 200 万(1000 家×1980 元) |
| To G 公益定制 | 政府采购 | 社区独居老人监护 | 500 万+(单个区级项目) |
02
方案 A:Gemini Canvas 模式秒出成品
适合完全不懂技术的人,全程可视化操作。
什么是 Canvas 模式?
Gemini 的 Canvas 是个代码画布,你用自然语言描述需求,AI 直接生成可运行的网页应用,还能实时预览。不需要下载任何软件,浏览器打开就能用。
访问方式:
- 打开 gemini.google.com
- 点击左下角的 Canvas 图标即可(画板样式)
图 2:Gemini 界面左下角红框标注的 Canvas 按钮
提示词模板
复制以下内容,粘贴到 Gemini 对话框:
帮我开发一款极简风格的“独居安全监控”应用,名字为“死了么?”。
核心功能:
1. 一键每日签到:一个醒目的按钮,供用户每天确认自身安全。
2. 紧急通知系统:如果用户在可自定义的时间段内(例如 48 小时)未能签到,应用会自动向指定的紧急联系人发送警报邮件/短信。
3. 黑色幽默/极简 UI:简洁、高对比度的界面。显示“已生存天数”计数器,“当前状态:活着且工作”,“当前状态:活着且睡觉”等状态信息。
4. 简易上手:用户只需输入姓名和紧急联系人的电子邮件地址即可。无需复杂的社交功能。
技术栈:
- 简单的状态管理,用于跟踪上次签到时间戳。
- 后台任务或服务器端定时任务,用于在超过签到截止时间后触发警报。
UI 风格:
- 美学风格:粗犷主义或超极简主义。
- 关键元素:一个大型“我还活着”按钮、一个显示距离下次警报时间的倒计时器,以及一个用于设置联系人信息的简单设置页面。
生成后的调试
Gemini 会生成一个完整的 HTML 文件,右侧实时预览。
图 3:Gemini 代码生成与右侧实时预览界面
如果 UI 不满意,可以追加指令:
“请把按钮改成红色,倒计时改成更大的字体”
或者
“增加一个功能:点击按钮时播放’活着真好’的音效”
Gemini 会实时修改代码并刷新预览。
部署方式
方式 1:直接使用(最简单)
新建一个 index.html 文件,复制 Gemini 生成的代码,粘贴进去并保存。双击打开,就能在浏览器里用。
缺点:只能自己用,无法分享给别人。
方式 2:托管到 GitHub Pages
步骤:
- 注册 GitHub 账号(github.com)
- 创建新仓库,名字为
died-yet - 上传
index.html文件 - 在仓库设置中开启 GitHub Pages
- 访问
yourname.github.io/died-yet
图 4:GitHub Pages 设置页面,显示如何开启免费托管
优势:
- 完全免费
- 有独立网址,可以分享给家人朋友
- 支持自定义域名(如果你有的话)
03
方案 B:Cursor 编辑器深度定制
适合想要更多控制权的人,比如需要添加数据库、微信通知等功能。
Cursor 是什么?
Cursor 不是 VS Code 的插件,而是基于 VS Code 深度改造的独立编辑器。核心优势:
- AI 理解你的整个项目,不是单个文件
- 用自然语言描述需求,AI 直接写代码
- 实时预览,改代码浏览器自动刷新
下载地址:cursor.sh(支持 Windows/Mac/Linux)
图 5:Cursor 官网下载页面,点击 Download 按钮选择对应系统版本
3 分钟搭建项目骨架
步骤 1:创建项目
打开 Cursor,按 Ctrl+L 打开 AI 对话框,输入:
@create vue3 + vite project named died-yet
30 秒后,项目结构自动生成:
died-yet/
├── src/
│ ├── components/
│ ├── composables/
│ ├── App.vue
│ └── main.ts
├── vite.config.ts
└── package.json
步骤 2:安装依赖
Cursor 会自动检测到需要安装依赖,右下角弹出提示点击安装即可。或者手动运行:
npm install
npm run dev
浏览器自动打开 http://localhost:5173
5 分钟生成核心功能
功能 1:签到按钮组件
在 Cursor 对话框输入:
@add component CheckInButton.vue
功能:点击后记录当前时间到localStorage
样式:大按钮,红色,显示"我还活着"
点击后变绿并显示"已打卡",3秒后恢复
Cursor 自动生成代码:
<template>
</template>
<script setup>
import { ref } from 'vue'
const isChecked = ref(false)
const handleCheckIn = () => {
localStorage.setItem('lastCheckIn', Date.now())
isChecked.value = true
setTimeout(() => isChecked.value = false, 3000)
}
</script>
功能 2:倒计时组件
继续对话:
@add component Countdown.vue
读取localStorage的lastCheckIn时间
如果超过48小时未打卡,显示红色警告
否则显示剩余时间
生成的核心逻辑:
<script setup>
import { ref, onMounted } from 'vue'
const timeLeft = ref('')
const isExpired = ref(false)
const updateCountdown = () => {
const lastCheckIn = localStorage.getItem('lastCheckIn')
if (!lastCheckIn) {
timeLeft.value = '从未打卡'
return
}
const diff = Date.now() - Number(lastCheckIn)
const hours = 48 - Math.floor(diff / 3600000)
if (hours <= 0) {
isExpired.value = true
timeLeft.value = '警报已触发'
} else {
timeLeft.value = `${hours}小时后触发警报`
}
}
onMounted(() => {
updateCountdown()
setInterval(updateCountdown, 60000) // 每分钟更新
})
</script>
功能 3:邮件通知
这是最关键的部分。推荐使用 EmailJS,它提供免费 API,每月 200 封邮件额度,很适合前期测试。
注册 EmailJS:
- 访问 emailjs.com
- 注册账号
- 创建邮件模板
- 获取 Service ID 和 Template ID
图 6:EmailJS 官网管理控制台界面,获取 ID 的位置
在 Cursor 对话框输入:
@add composable useEmailAlert.ts
当距离上次打卡超过48小时,调用EmailJS发送警报邮件
收件人从localStorage读取
生成的代码:
import emailjs from '@emailjs/browser'
export function useEmailAlert() {
const sendAlert = async () => {
const contact = localStorage.getItem('emergencyContact')
if (!contact) return
const params = {
to_email: contact,
user_name: localStorage.getItem('userName') || '用户',
message: '该用户已超过48小时未签到,请确认安全'
}
await emailjs.send(
'YOUR_SERVICE_ID',
'YOUR_TEMPLATE_ID',
params,
'YOUR_PUBLIC_KEY'
)
}
return { sendAlert }
}
注意:把 YOUR_SERVICE_ID 等替换成 EmailJS 提供的真实值。
7 分钟完成设置页面
对话输入:
@add component Settings.vue
表单包含:
1. 用户姓名输入框
2. 紧急联系人邮箱输入框
3. 签到间隔选择(24小时/48小时/72小时)
4. 保存按钮,数据存入localStorage
Cursor 自动生成完整的表单组件,包含输入验证。
04
APP 封装:从网页到手机应用
网页做好了,但要在手机上像真 APP 一样使用,有两种方式。
方式 1:PWA 渐进式网页应用(免费)
在项目根目录创建 manifest.json:
{
"name": "我死了吗",
"short_name": "DiedYet",
"start_url": "/",
"display": "standalone",
"background_color": "#000000",
"theme_color": "#ff4444",
"icons": [
{
"src": "/icon.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
在 index.html 的 head 标签加上:
<link rel="manifest" href="/manifest.json">
效果:用户用手机浏览器打开网址后,可以添加到主屏幕,像原生 APP 一样使用。
方式 2:使用 Capacitor 打包成真 APP(进阶)
Capacitor 是 Ionic 团队开发的跨平台工具,可以把网页打包成 iOS/Android 应用。
安装:
npm install @capacitor/core @capacitor/cli
npx cap init
npx cap add android
npx cap add ios
构建:
npm run build
npx cap sync
npx cap open android # 或 ios
会自动打开 Android Studio 或 Xcode,点击运行即可在模拟器测试。
优势:
- 可以上架应用商店
- 可以调用原生功能(推送通知、后台定时任务)
- 用户体验更接近原生 APP
劣势:
- 需要开发者账号(iOS 年费 99 美元,Android 一次性 25 美元)
- 需要学习打包流程
05
商业化改造方向
改造 1:微信通知替代邮件
国内用户更习惯微信,可以接入企业微信或 Server 酱。
Server 酱方案(最简单):
- 访问 sct.ftqq.com 注册
- 获取 SendKey
- 在代码中替换邮件发送为 Server 酱推送
const sendWechatAlert = async () => {
const sendKey = 'YOUR_SENDKEY'
const contact = localStorage.getItem('emergencyContact')
await fetch(`https://sctapi.ftqq.com/${sendKey}.send`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
title: '安全警报',
desp: `${contact}已超过48小时未签到`
})
})
}
成本:免费版每天 5 条消息,付费版 19.9 元/年不限次数。
图 7:Server 酱官网界面,展示消息通道配置
改造 2:后台定时检查
网页版的问题:必须用户打开页面才能检查。如果用户昏迷了,页面根本不会打开。
解决方案:使用 Cloudflare Workers 免费定时任务。
步骤:
- 注册 cloudflare.com
- 创建 Worker
- 部署以下代码:
export default {
async scheduled(event, env, ctx) {
// 从KV存储读取所有用户数据
const users = await env.DB.list()
for (const user of users) {
const data = await env.DB.get(user.name)
const lastCheckIn = JSON.parse(data).lastCheckIn
if (Date.now() - lastCheckIn > 48 * 3600000) {
// 发送警报
await sendAlert(user.email)
}
}
}
}
设置 Cron 触发器:每小时检查一次
成本:免费额度 100 万次请求/天,个人使用足够。
改造 3:多人协作监护
场景:养老院需要监控 100 位老人的签到状态。
技术方案:
- 后端使用 Supabase(免费数据库)
- 前端增加管理后台
- 展示所有用户的签到状态
06
避坑指南
坑 1:隐私泄露风险
问题:如果使用云服务存储用户数据,可能被黑客攻击导致紧急联系人信息泄露。
解决:
- 优先使用浏览器 LocalStorage,数据不上传
- 如果必须用云服务,加密存储
- 在隐私政策中明确说明数据用途
// 加密存储示例
import CryptoJS from 'crypto-js'
const saveEncrypted = (key, value) => {
const encrypted = CryptoJS.AES.encrypt(
JSON.stringify(value),
'YOUR_SECRET_KEY'
).toString()
localStorage.setItem(key, encrypted)
}
坑 2:误报导致恐慌
问题:用户手机没电或忘记打卡,紧急联系人收到警报以为出事了。
解决:
- 第一次警报前发送预警提醒
- 提供一键延期功能
- 警报邮件中说明这可能是误报
邮件模板改进:
标题:【安全警报】XXX 已超过 48 小时未签到
内容:
您的联系人 XXX 已经 48 小时未在"我死了吗"APP 中签到。这可能意味着:
- 对方可能遇到紧急情况(概率 30%)
- 对方忘记打卡或手机没电(概率 60%)
- 系统误报(概率 10%)
建议:
- 立即拨打对方电话确认安全
- 如果无法联系,考虑报警或上门查看
[确认安全] [报告误报]
坑 3:邮件进垃圾箱
问题:EmailJS 发送的邮件经常被 Gmail/QQ 邮箱识别为垃圾邮件。
解决:
- 使用自己的域名邮箱(如
name@yourdomain.com) - 配置 SPF 和 DKIM 记录
- 或者改用短信通知(成本约 0.05 元/条)
推荐短信服务商:
- 阿里云短信:0.045 元/条
- 腾讯云短信:0.05 元/条
07
结语
独居的人害怕的不是死亡本身,而是怕死后很久才被发现。这个应用提供的是一种心理安慰:至少有人会在 48 小时内知道我出事了。
从商业角度看,这是个简单但高粘性的产品。用户可能一年才打开 10 次,但一旦设置好,很少会卸载。类似保险,平时没用,关键时刻救命。
附录:完整技术栈对比
| 方案 | 开发时间 | 技术难度 | 功能完整度 | 适用场景 |
|---|---|---|---|---|
| Gemini Canvas | 15 分钟 | ⭐ | 60% | 个人使用,快速验证 |
| Cursor + Vue | 2 小时 | ⭐⭐⭐ | 90% | 小团队产品 |
| 完整商业版 | 2 周 | ⭐⭐⭐⭐ | 100% | 企业级应用 |
推荐学习路径:
- 先用 Gemini 做出能用的版本,理解产品逻辑
- 再用 Cursor 深度定制,增加特色功能
- 最后考虑商业化改造,对接支付、数据分析等
本文代码为演示逻辑,生产环境需完善错误处理、性能优化、安全防护等。



