XLGift 是一个面向情侣关系的「记录 + 同步 + 陪伴」应用。 它把回忆时间线、纪念日、专注计时、经期与情绪记录、关系绑定和消息中心整合到同一个 App(Web + Android)。
说明:你仓库里原本就有
README.md,本次是在这个现有文件上继续增强展示内容,并没有新增第二份 README。
| 登录与注册 | 关系绑定 | 我的主页 |
|---|---|---|
TODO: 登录页截图链接 |
TODO: 绑定页截图链接 |
TODO: 个人页截图链接 |
| 时间线 | 纪念日 | 专注计时 |
|---|---|---|
TODO: 时间线截图链接 |
TODO: 纪念日截图链接 |
TODO: 专注页截图链接 |
- 在 GitHub 任意 Issue 评论区拖拽上传图片。
- 复制生成的
https://github.com/user-attachments/assets/...链接。 - 将上方
TODO文本替换成标准 Markdown 图片语法,例如:
- 核心目标:帮助情侣长期、稳定地记录共同生活。
- 数据策略:以云端为主(Supabase),本地缓存为辅,支持跨设备同步。
- 运行形态:
- Web:Vite + React
- Backend:Node.js + Express
- Data:Supabase(Postgres + Storage)
- Mobile:Capacitor Android(支持 APK 打包)
- 打开应用,进入账号安全页。
- 使用邮箱注册,输入验证码完成验证。
- 登录后系统会生成你的专属邀请码。
- 将邀请码发给对方,在“关系绑定”页完成绑定。
- 绑定成功后,双方将共享时间线、纪念日、专注统计等关系数据。
- 在“首页/时间线”上传你们的照片回忆。
- 在“纪念日”添加重要节点(生日、旅行、节日、第一次等)。
- 在“专注”页开启倒计时或正计时,完成后生成专注统计。
- 在“我的”页查看关系状态、消息中心、主题切换和更多功能。
- 通过消息中心接收绑定请求、系统通知、同步反馈。
- 回忆卡片展示(按时间排序)。
- 单图上传与批量上传。
- 图片压缩与时间信息提取(提升上传效率)。
- 支持不同展示模式(瀑布/故事流)。
- 年度统计(按年汇总回忆数量)。
- 可新增、编辑、删除纪念日。
- 支持事件类型和副标题。
- 自动计算距离今天的天数与下一个发生日。
- 卡片化展示,突出近期事件与进度感。
- 倒计时模式与正计时模式。
- 常用时长快捷选择 + 自定义时长。
- 完成后震动提醒 + 完成动效(替代音频打断)。
- 专注统计云端同步(今日时长、次数、连续天数、累计次数)。
- 计时状态云端持久化(切换页面后不丢失)。
- 个人信息编辑(昵称、性别、头像)。
- 头像支持自定义上传并同步到云端。
- 邀请码状态、绑定状态、关系管理入口。
- 消息中心:
- 时间精确到“日期 + 分钟”
- 单条已读
- 一键已读
- 清空消息
- 主题切换与更多功能入口。
- 邀请码输入自动标准化(大小写、符号处理)。
- 绑定请求支持“发起 -> 对方确认/拒绝”。
- 支持解除绑定与重新绑定。
- 支持待确认请求列表与快捷处理。
- 邮箱注册验证码。
- 邮箱登录。
- 忘记密码/重置密码验证码。
- 登录态恢复与会话同步。
- 云端优先:核心数据上云,跨设备一致。
- 双人关系模型:情侣绑定后共享关键数据域。
- 高可用同步:前后端均有同步与容错策略(缓存、重试、去重、降级)。
- 移动端可交付:一套代码支持 Web + Android APK。
- 多渠道构建:
official/xiaomi/huawei风味包。 - 启动体验优化:Android 启动过渡与应用内启动动画。
- React + TypeScript + Vite
- Context 状态管理(
context.tsx+authContext.tsx) - 组件化页面:Timeline、Anniversary、Focus、Profile、Auth、Connection
- Express 路由分层:
authRoutes+appRoutes - JWT 鉴权 + 访问控制
- 邮件验证码(SMTP)
- 图片上传链路(Supabase Storage)
- Supabase Postgres(用户、回忆、纪念日、通知、专注、经期、绑定请求等)
- Supabase Storage(头像与图片资源)
- Node.js 18+
- npm 9+
- Supabase 项目(含 URL 与 Service Role Key)
npm install复制并编辑:
cp backend/.env.example backend/.env最低必填:
SUPABASE_URLSUPABASE_SERVICE_ROLE_KEYJWT_SECRET(至少 32 位)JWT_EXPIRES_INJWT_ISSUERJWT_AUDIENCE
常用默认端口:
- Backend:
8787 - Frontend:
5173
本地开发建议:
# .env.development
VITE_API_BASE_URL=/apiVite 会通过 vite.config.ts 将 /api 代理到 http://localhost:8787。
npm run dev:full访问地址:
- 前端:
http://localhost:5173 - 健康检查:
http://localhost:8787/api/health
新项目首次初始化:
- 打开 Supabase SQL Editor。
- 执行
backend/supabase/schema.sql。
已有旧项目升级:
- 执行
backend/supabase/下对应迁移文件。 - 建议按文件名日期顺序执行(
migration_YYYYMMDD_*.sql)。
| 命令 | 说明 |
|---|---|
npm run dev |
启动前端(Vite) |
npm run dev:backend |
启动后端(Express) |
npm run dev:full |
同时启动前后端 |
npm run build |
前端生产构建 |
npm run check:text-encoding |
检查文本编码与乱码 |
npm run build:mobile |
构建 Web 并同步到 Android 工程 |
npm run android:sync |
仅同步 Capacitor 到 Android |
npm run android:open |
用 Android Studio 打开工程 |
本仓库支持前后端同域部署,详细文档见:
DEPLOY_VERCEL.md
关键点:
vercel.json已配置/api路由到api/index.js- 前端采用 SPA fallback 到
index.html - 生产环境变量必须在 Vercel 项目中配置
当前 Android 应用展示名已统一为:
XLGift
npm run build:mobile
cd android
./gradlew assembleDebugWindows PowerShell 可用:
npm run build:mobile
cd android
.\gradlew assembleDebug输出示例:
android/app/build/outputs/apk/official/debug/app-official-universal-debug.apkandroid/app/build/outputs/apk/huawei/debug/app-huawei-universal-debug.apkandroid/app/build/outputs/apk/xiaomi/debug/app-xiaomi-universal-debug.apk
npm run build:mobile
cd android
./gradlew assembleOfficialRelease输出示例:
android/app/build/outputs/apk/official/release/app-official-universal-release.apk
这是后端根路由现象,不是前端地址。请访问前端 http://localhost:5173。
优先检查:
- 后端是否运行在
8787。 backend/.env是否缺少必填变量。- Supabase 表结构是否已执行。
- 确认后端启用了图片存储:
IMAGE_STORAGE_ENABLED=true。 - 确认 Supabase Storage bucket 存在。
- 确认后端日志没有上传失败报错。
- 确认
vite.config.ts代理目标是http://localhost:8787。 - 确认前端实际访问的是
http://localhost:5173。 - 如果改过端口,需同时改前端代理和后端
PORT。
.
├─ api/ # Vercel Serverless 入口
├─ backend/ # Express + Supabase
│ ├─ src/
│ └─ supabase/
├─ components/ # 通用组件
├─ pages/ # 页面层
├─ utils/ # 工具与缓存
├─ android/ # Capacitor Android 工程
├─ App.tsx # 应用入口
├─ context.tsx # 业务数据上下文
├─ authContext.tsx # 认证与通知上下文
└─ README.md
- 该项目当前以私有业务场景迭代为主,文档会持续更新。
- 如用于商店上架,请先完成签名、隐私政策、合规与压力测试。
