English | 简体中文
基于 Next.js 16 构建的轻量级订阅管理与个人钱包应用。通过 Notion 数据库实时同步你的账单与订阅信息,让你的财务状况一目了然。
- Notion 实时同步:直接从 Notion 数据库读取订阅数据。
- 订阅管理:追踪各种服务的订阅费用,支持按月/按年统计。
- 财务概览:自动计算月度支出、年度余额以及每日平均开销。
- 安全锁定:支持设置锁定密码,保护你的隐私信息。
- 现代化设计:基于 Tailwind CSS、Framer Motion 与 Lucide Icons 打造的丝滑 UI/UX。
- 多语言支持:原生支持中英文切换。
由于项目采用 Turborepo 管理的 Monorepo 结构,请按照以下步骤操作:
-
克隆仓库:
git clone https://github.com/busyhe/m-wallet.git cd m-wallet -
安装依赖:
pnpm install
-
配置环境变量: 在
apps/web目录下创建.env.local文件:NOTION_TOKEN=your_notion_internal_integration_token NOTION_DATABASE_ID=your_notion_database_id LOCK_PASSWORD=your_secure_password SESSION_SECRET=generate_a_random_secret_with_at_least_32_characters NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX NEXT_PUBLIC_ANALYTICS_ENABLED=false NEXT_PUBLIC_APP_URL=http://localhost:3000 NEXT_PUBLIC_LANGUAGE=zh
NOTION_TOKEN: 你的 Notion 集成令牌。NOTION_DATABASE_ID: 对应数据库的 ID。LOCK_PASSWORD: 设置进入应用的访问密码。SESSION_SECRET: 至少 32 字符的随机会话签名密钥。生产环境必填。NEXT_PUBLIC_ANALYTICS_ENABLED: 只有显式设为true才加载 Google Analytics。NEXT_PUBLIC_APP_URL: 实际部署地址,用于站点元数据。NEXT_PUBLIC_LANGUAGE: 默认语言(zh或en),用户之后可在设置页切换。
生产环境缺少
LOCK_PASSWORD或有效的SESSION_SECRET时,应用会拒绝提供受保护页面。AUTH_DISABLED=true仅用于本地开发。 -
准备 Notion 数据库:
字段 Notion 类型 必填 Name Title 是 Icon URL 否 Price Number 是 Currency Select: CNY/USD是 Cycle Select: monthly/quarterly/yearly/one-time/custom是 CustomCycleDays Number 自定义周期时必填 StartDate / EndDate Date 开始日期必填 Description / BundledServices Rich text 否 Category / Color Select 否 Position Number 是
部署 Next.js 应用最简单的方式是使用 Vercel 平台。
-
复制这个 Notion 模板
-
点击下方按钮部署:
-
配置环境变量:
- 将
NOTION_TOKEN设置为你的 Notion 集成令牌 - 将
NOTION_DATABASE_ID设置为你的 Notion 页面 ID - 将
LOCK_PASSWORD设置为应用访问密码 - 将
SESSION_SECRET设置为至少 32 字符的随机值 - 将
NEXT_PUBLIC_APP_URL设置为部署后的 HTTPS 地址 - 将
NEXT_PUBLIC_GA_ID设置为你的 Google Analytics ID(可选)
- 将
-
部署并使用你的订阅管理应用。
你也可以通过推送到连接 Vercel 的 GitHub 仓库来手动部署。
pnpm devpnpm buildpnpm format:check
pnpm lint
pnpm typecheck
pnpm test月度/年度“实际支出”只统计到当前日期。不同币种不会直接相加,而是在首页分别显示、在统计页按币种切换。
详细设计与安全边界见 架构文档。
