两心相知,一事一诺。情侣任务与心意管理,Web + Flutter 双端。
锦书 是一套情侣向的任务与心意管理系统:支持发布心诺(任务)、赠礼(积分兑换)、私语(留言)、藏心(收藏),以及吾之信息与良人信息展示。后端为 Next.js + Prisma + PostgreSQL,提供 Web 管理页与 REST API;客户端支持 Web 端(Next.js 页面)与 Flutter App(iOS / Android / Windows / macOS 等),界面采用古风文案与统一设计规范(君归矣、心诺、赠礼、私语、吾心、云阁等)。
- Web:访问
/trick系列页面,配置、任务、礼物、私语、收藏、个人信息等。 - App:Flutter 应用「锦书」,首页一念即达、心诺 / 赠礼 / 私语 / 藏心 / 吾心,云阁(后端地址)可配置,图床可在吾心→设置中配置(与良人共用)。
- 双账号:注册时支持二人同契(一次性注册两个关联账号),配置与良人共用。
- Node.js >= 22
- PostgreSQL(推荐 Neon)
- 可选:Flutter 3.x(仅需运行或构建 App 时)
git clone https://github.com/lengsukq/romance-hub.git
cd romance-hub
yarn install在项目根目录创建 .env 或 .env.local:
# 必填:数据库与鉴权
DATABASE_URL=postgresql://user:password@host/db?sslmode=require
JWT_SECRET_KEY=你的随机密钥
# 可选:图床兜底(未在应用内配置图床时使用)
DRAWING_BED=IMGBB
IMGBB_API=你的_imgbb_api_keyyarn db:generate
yarn db:pushyarn dev浏览器访问 **http://localhost:9999**。
(可选)在 flutter_app 目录执行 flutter run 运行 App,登录页配置云阁地址为 http://你的本机IP:9999 即可连到本地后端。
| 模块 | 说明 |
|---|---|
| 心诺 | 发布 / 接受 / 完成任务,状态追踪,完成可通知(如企业微信) |
| 赠礼 | 积分兑换礼物,上架自己的礼物给对方兑换,使用可通知 |
| 私语 | 给对方留言,已读/未读,新私语可通知 |
| 藏心 | 收藏心诺、赠礼、私语,统一列表 |
| 吾心 | 吾之信息(头像、用户名、一言等)、良人信息;编辑弹框、设置入口(图床等) |
| 云阁 | 后端地址配置(Web:配置页;App:登录页 + 吾心页云阁卡片) |
| 图床 | 应用内图床设置(与良人共用),或服务端 .env 兜底(DRAWING_BED + IMGBB_API) |
| 通知 | 图床/通知等配置在 Web /trick/config 或 App 吾心→设置中管理,可接企业微信等 |
- Web:配置与内容管理主要在
/trick/config、/trick/myInfo、任务/礼物/私语/收藏等页面。 - App:底部 Tab 首页 / 心诺 / 赠礼 / 私语 / 吾心;吾心页右上角设置进入图床与吾之信息编辑。
- Next.js 16(App Router)+ React 19 + TypeScript
- Prisma + PostgreSQL(推荐 Neon)
- JWT / Cookie 鉴权,API 路由:
/api/v1/user、/api/v1/task、/api/v1/gift、/api/v1/whisper、/api/v1/favourite、/api/v1/config、/api/v1/common(上传等)
- Flutter 3.x + Dart 3
- go_router、Provider、Dio;Material 3,遵循项目内「锦书」UI 设计规则(古风文案、大圆角、主色等)
- UserInfo / TaskList / GiftList / WhisperList / FavouriteList
- SystemConfig / ImageBedConfig / NotificationConfig(配置与良人同步逻辑在后端)
romance-hub/
├── app/ # Next.js 应用
│ ├── api/v1/ # API:user, task, gift, whisper, favourite, config, common
│ ├── trick/ # Web 页面:config, myInfo, gift, postTask, taskInfo, favourite, whisper
│ ├── components/ # 公共组件
│ └── utils/ # 服务与工具(configService, imageTools, ormService 等)
├── prisma/
│ └── schema.prisma # 数据模型与迁移
├── flutter_app/ # Flutter 应用「锦书」
│ ├── lib/
│ │ ├── core/ # 配置、模型、路由、服务、工具
│ │ ├── features/ # auth, home, task, gift, whisper, favourite, user, config
│ │ └── shared/ # 通用组件
│ └── docs/ # UI 设计规则等
├── .github/workflows/ # CI(如 Flutter 全平台构建发布)
├── Dockerfile # 服务端镜像
├── package.json
└── README.md
DATABASE_URL:PostgreSQL 连接串。JWT_SECRET_KEY:Cookie 等鉴权加密用,请使用足够随机的字符串。
- 未在「应用内图床设置」配置时,可使用服务端兜底:
DRAWING_BED=IMGBBIMGBB_API=你的 key
- 应用内图床(Web
/trick/config或 App 吾心→设置)与良人共用,保存时后端会同步到关联者。
yarn db:generate # 生成 Prisma 客户端
yarn db:push # 开发环境同步 schema
yarn db:migrate # 生产迁移
yarn db:studio # 打开 Prisma Studiodocker build -t romance-hub .
docker run -d -p 9999:9999 --name romance-hub \
-e DATABASE_URL="postgresql://..." \
-e JWT_SECRET_KEY="..." \
romance-hub- 将仓库导入 Vercel,配置
DATABASE_URL、JWT_SECRET_KEY。 - 建议使用 Vercel Postgres 或 Neon 等 PostgreSQL 服务。
- 本地:
cd flutter_app && flutter run -d <android|ios|windows|...> - 发布:可参考
.github/workflows/build-release.yml构建 Android / Windows / macOS / Linux 等产物。
| 现象 | 建议 |
|---|---|
| 数据库连接失败 | 检查 DATABASE_URL 与网络/白名单 |
| 图床上传失败 | 检查应用内图床配置或 .env 兜底(IMGBB_API 等) |
| 端口 9999 占用 | 使用 next dev -p 其他端口 或结束占用进程 |
| App 连不上后端 | 确认云阁地址(含协议与端口)与后端实际一致 |
- 详细搭建与说明:博客文档
- 问题与建议:GitHub Issues
- 本项目采用 MIT 许可证。
- 致谢 Next.js、Prisma、Flutter、React 等开源项目。
两心相知,一事一诺。
Made with ❤️ by lengsukq