“死了么”用户数翻800倍,估值近1亿,那我来做个“活着呢”!

前言

最近"死了么"这款 App 因为精准切入独居人群的安全痛点而爆火。截止到今天已经攀升到苹果付费App排行榜第一的位置了!

它的核心逻辑非常简单: "签到保平安,断签发邮件"

出于好奇,我去了解了相关信息,看到一个数据,据第七次全国人口普查数据显示,我国一人户家庭已超1.25亿户,占全国户口总数的25%。对于独居人群来说,发生意外不可怕,可怕的是无人知晓,这款APP也是精准踩中了这部分人的痛点。

于是,我连夜敲代码,搞出了这款对标产品------ "活着呢"(TO BE LIVE)

产品哲学

它的逻辑极其简单粗暴:

  1. 生存契约:你设定一个"确认周期"(默认 48 小时)。
  2. 打卡续命 :在倒计时结束前,你必须上来点一下那个 "我还活着呢" 的按钮。
  3. 失联预警:如果你超时未点,系统将判定你"可能挂了",立即触发预警,通知你的紧急联系人。

技术选型

  • 前端框架Next.js 14 (App Router)。极致的 SEO 和路由体验。
  • 状态动效Framer Motion。让倒计时和按钮带上"呼吸感"。
  • 后端支撑Supabase (BaaS)。无需自己写 CRUD,秒级实现 Auth 授权和数据库存储。
  • 通知Resend。定时发送邮件。
  • 主题适配Tailwind CSS。支持"深邃绿"与"荧光绿"的双重主题,白天是深沉的翡翠,深夜是守护的微光。
  • 部署环境Vercel。全球加速,毕竟生命经不起等待。

核心代码实现

核心功能

  • 注册/登录、退出
  • 签到、紧急联系人设置
  • 主题切换

登录页

在用户未注册时,可以先注册账号,再登录,核心代码如下:

js 复制代码
const handleSubmit = async (e) => {
    e.preventDefault()
    setLoading(true)

    try {
      if (isLogin) {
        const { error } = await supabase.auth.signInWithPassword({ email, password })
        if (error) throw error
        router.push('/') 
      } else {
        const { error } = await supabase.auth.signUp({ email, password })
        if (error) throw error
        alert('验证邮件已发送,请查收!')
      }
    } catch (err) {
      alert(err.message)
    } finally {
      setLoading(false)
    }
}

签到页

最核心的功能是那个动态倒计时逻辑。我们需要在客户端实时计算剩余时间,并根据紧迫程度变换颜色。这里的安全周期是设定死的48小时,后期可让用户自定义。

js 复制代码
        <motion.button
            whileTap={{ scale: 0.94 }}
            onClick={handleCheckIn}
            className="absolute inset-4 rounded-[4.5rem] bg-app-card border border-app-border flex flex-col items-center justify-center 
                      shadow-[0_15px_40px_rgba(0,0,0,0.04)] dark:shadow-none"
          >
            <div className={`mb-4 transition-colors duration-1000 ${getAlertColorClass()}`}>
              {timeLeft.h < 8 ? (
                <AlertTriangle size={60} />
              ) : (
                <Shield 
                  size={60} 
                  fill="currentColor" 
                  fillOpacity={0.12} 
                  className="drop-shadow-[0_4px_12px_rgba(0,0,0,0.05)] dark:drop-shadow-none"
                />
              )}
            </div>
            
            <span className="text-2xl font-black tracking-tight text-app-text">我还活着</span>
            
            <div className="mt-2 font-mono text-[11px] opacity-40 flex items-center gap-1.5 tracking-widest">
              <Clock size={12} strokeWidth={2.5} />
              {String(timeLeft.h).padStart(2, "0")}:
              {String(timeLeft.m).padStart(2, "0")}:
              {String(timeLeft.s).padStart(2, "0")}
            </div>
          </motion.button>
js 复制代码
// 动态获取当前的强调色(预警系统)
  const getAlertColorClass = () => {
    if (timeLeft.h < 8) return "text-red-500";
    if (timeLeft.h < 24) return "text-amber-500";
    return "text-app-accent"; // 使用主题定义的强调色
  };
  
  const updateCountdown = useCallback(() => {
    if (!profile?.last_check_in) return;
    const last = new Date(profile.last_check_in).getTime();
    const now = new Date().getTime();
    const total = 48 * 60 * 60 * 1000;
    const remaining = Math.max(0, total - (now - last));
    setTimeLeft({
      h: Math.floor(remaining / (1000 * 60 * 60)),
      m: Math.floor((remaining % (1000 * 60 * 60)) / (1000 * 60)),
      s: Math.floor((remaining % (1000 * 60)) / 1000),
      percent: (remaining / total) * 100
    });
  }, [profile]);

  useEffect(() => {
    const timer = setInterval(updateCountdown, 1000);
    return () => clearInterval(timer);
  }, [updateCountdown]);

  const handleCheckIn = async () => {
    if (!user) return;
    const now = new Date().toISOString();
    const { error } = await supabase.from("profiles").update({ last_check_in: now }).eq("id", user.id);
    if (!error) {
      setProfile((prev) => ({ ...prev, last_check_in: now }));
      if ("vibrate" in navigator) navigator.vibrate([50, 30, 50]);
    }
  };

PWA 改造:从网页变成桌面 App

作为一个守护工具,它必须触手可及。我为它集成了 PWA 功能,用户可以"一键添加到桌面"。

通过配置 manifest.json,我们的 App 实现了:

  • Standalone 模式:隐藏浏览器地址栏,全屏沉浸体验。
  • 自定义图标:一个可爱鬼(代表此时的你)和一颗回答"YES"的小心脏。

后记

"我还活着呢"(TO BE LIVE),在每一个平凡的 24 小时里,温柔地问一句: "嘿,还在吗?"

项目已开源/部署,欢迎大家来"续命"!

'to be live' github

welcome to 'to-be-live'


互动环节

如果你失联了,你最希望 App 给你的联系人发送哪句话? A. 帮我格式化手机,谢谢。 B. 我在异世界开挂了,莫念。 C. 救命!我还能抢救一下!

相关推荐
IT_陈寒14 小时前
Redis的持久化配置把我坑惨了:你以为数据安全了?
前端·人工智能·后端
miaowu35714 小时前
AI智能体推动数字化转型:从流程自动化到决策辅助的完整路线图
大数据·人工智能·自动化
小徐_233314 小时前
uni-app 项目别再从零搭了!3 个 Wot UI 起手模板怎么选?
前端·uni-app
阿里云大数据AI技术14 小时前
阿里云 Elasticsearch 日志采集与加工服务:让日志链路少一串组件,多一份稳定
人工智能·elasticsearch
ksueh14 小时前
AI写小说长篇创作中的上下文局限与外部记忆系统实践
人工智能
互联网江湖14 小时前
珞石机器人:向左科技股,向右零部件制造商?
大数据·人工智能
阿里云大数据AI技术15 小时前
从数据湖到多模态湖仓-基于阿里云EMR Serverless StarRocks与DLF Paimon构建AI时代的统一分析检索架构
人工智能
赵庆明老师15 小时前
Vben精讲:16-熟悉Vite前端工具链
前端
前端的阶梯15 小时前
浅谈Workflow和Agent的区别
人工智能
正在走向自律15 小时前
Deepseek V4 Flash 高效应用实战指南
人工智能·deepseek·deepseek v4·ai赋能中心