一个基于 Next.js 开发的基金估值与重仓股实时追踪工具。采用玻璃拟态设计(Glassmorphism),支持移动端适配。



localStorage 存储已添加的基金列表、持仓、交易记录、定投计划及配置信息,刷新不丢失。为了方便开发者和终端极客在终端快速查询基金数据、管理云端自选与持仓,项目提供了官方命令行工具 @jigubao/cli。
可通过 npm 全局安装:
npm install -g @jigubao/cli
jgb login):使用 Supabase Auth 邮箱验证码(Email OTP)无密码登录,安全便捷。jgb status):快速校验本地登录状态。jgb search <keyword>):支持按名称或 6 位代码模糊搜索基金。jgb price <code>):查询指定基金的实时估值、最新净值及盘中估算涨跌幅。jgb portfolio list):查询同步保存在云端的自选基金、持仓份额及交易详情。--json):除登录/登出外,所有指令均支持 --json 输出,便于与 jq 或其他脚本工具结合。jgb logout):注销并清理本地及云端的登录会话。更多关于 CLI 的开发与高级用法,请参阅 基估宝命令行工具说明文档 (jgb-cli/README.md)。
bash
git clone https://github.com/hzm0321/real-time-fund.git
cd real-time-fund
bash
npm install
bash
cp env.example .env.local
按照 env.example 填入以下值:NEXT_PUBLIC_Supabase_URL:Supabase 项目 URLNEXT_PUBLIC_Supabase_ANON_KEY:Supabase 匿名公钥NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY:Web3Forms Access KeyNEXT_PUBLIC_GA_ID:Google Analytics Measurement ID(如 G-xxxx)NEXT_PUBLIC_GITHUB_LATEST_RELEASE_URL:GitHub 最新 Release 接口地址,用于在页面中展示"发现新版本"提示(如:https://api.github.com/repos/hzm0321/real-time-fund/releases/latest)NEXT_PUBLIC_IS_GITHUB_LOGIN:控制是否开启 GitHub OAuth 登录功能,可选值 true / false(默认 false)注:如不使用登录、反馈或 GA 统计功能,可不设置对应变量
bash
npm run dev
访问 http://localhost:3000 查看效果。NEXT_PUBLIC_Supabase_URL:Supabase控制台 → Project Settings → General → Project ID
NEXT_PUBLIC_Supabase_ANON_KEY: Supabase控制台 → Project Settings → API Keys → Publishable key
示例:
NEXT_PUBLIC_SUPABASE_URL=https://abcdefghijklmnop.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=xxxxxx
Supabase 免费项目自带每小时2条邮件服务。如果觉得额度不够,可以改成自己的邮箱SMTP。修改路径在 Supabase控制台 → Authentication → Email → SMTP Settings。
之后可在 Rate Limits ,自由修改每小时邮件数量。
在 Supabase控制台 → Authentication → Email Templates 中,选择 Magic Link 模板进行编辑,在邮件正文中使用变量 {{ .Token }} 展示验证码。
官方验证码位数默认为8位,可自行修改。常见一般为6位。 在 Supabase控制台 → Authentication → Sign In / Providers → Auth Providers → email → Minimum password length 和 Email OTP Length 都改为6位。
在 Supabase控制台 → Authentication → Sign In / Providers → Auth Providers → email 中,关闭 Confirm email 选项。这样用户注册后就不需要再去邮箱点击确认链接了,直接使用验证码登录即可。
如需支持 GitHub OAuth 登录,需完成以下配置:
第一步:在 GitHub 创建 OAuth App
- 访问 GitHub → Settings → Developer settings → OAuth Apps → New OAuth App
- 填写信息:
- Application name:自定义应用名称
- Homepage URL:你的应用地址(如 https://hzm0321.github.io/real-time-fund/)
- Authorization callback URL:https://<your-supabase-project-id>.supabase.co/auth/v1/callback
- 创建后获取 Client ID 和 Client Secret
第二步:在 Supabase 启用 GitHub Provider - Supabase控制台 → Authentication → Sign In / Providers → Auth Providers → GitHub - 开启 GitHub 开关 - 填入 GitHub OAuth App 的 Client ID 和 Client Secret - 点击 Save 保存
第三步:配置站点 URL(重要)
- Supabase控制台 → Authentication → URL Configuration
- Site URL:设置为你的应用主域名(如 https://hzm0321.github.io/)
- Redirect URLs:添加你的应用完整路径(如 https://hzm0321.github.io/real-time-fund/)
配置完成后,用户即可通过 GitHub 账号一键登录。
项目需要创建 user_configs 表及相关策略才能使用云端同步功能。SQL 语句位于项目 /doc/supabase.sql 文件。
执行步骤:
- Supabase控制台 → SQL Editor → New query
- 复制 /doc/supabase.sql 文件中的全部内容,粘贴到编辑器
- 点击 Run 执行
SQL 脚本将完成以下操作:
- 创建 user_configs 表(存储用户配置数据)
- 启用行级安全(RLS),确保用户只能访问自己的数据
- 创建 SELECT / INSERT / UPDATE 策略
- 创建 update_user_config_partial 函数(用于增量更新配置)
- 创建 supabase_realtime Publication(开启对 user_configs 表的实时变更监听)
执行成功后,可在 Table Editor 中看到 user_configs 表。
项目支持展示基金追踪的关联板块(如指数、行业板块)及其实时涨跌幅。该功能依赖两张数据表:
- fund_related:基金代码 → 关联板块名称映射
- fund_secid:关联板块名称 → 东方财富 secid 映射
这两张表已在 /doc/supabase.sql 中创建,数据源位于 /doc 目录:
- fund_tracking_targets.csv:基金追踪目标数据
- related_sector_secid.csv:关联板块 secid 映射数据
导入步骤:
- Supabase控制台 → Table Editor → 选择 fund_related 表
- 点击右上角 Insert → Import data from CSV
- 上传 fund_tracking_targets.csv 文件,确认列映射后点击 Import
- 同理,向 fund_secid 表导入 related_sector_secid.csv 文件
导入成功后,基金卡片将展示其追踪的关联板块及实时涨跌幅。
本项目提供了以下两个云端函数(Edge Function),用于隐藏 API Key 并避免浏览器跨域请求限制:
- analyze-fund:用于 OCR 识别基金截图并提取基金代码。依赖第三方模型接口,大模型服务赞助商为 AINX。
- fund-valuation-ranking:作为天天基金估值排行 API 的代理,解决跨域访问限制问题。
配置步骤:
- 需要用户已登录(函数会读取请求头 Authorization,并通过 supabase.auth.getUser() 校验 JWT)
- 进入 Supabase 控制台 → 选择你的项目
- 左侧菜单找到 Project Settings(项目设置)
- 点击 Edge Functions 选项卡
- 部署 analyze-fund 函数(v2版本新增):
- 在 Functions 区域点击 Develop a new function → Via Editor
- 输入函数名称 analyze-fund和复制 doc/edgeFunction/analyze-fund.ts 内容到编辑器中,点击 Create
- 到该函数的 Settings 页,取消 Verify JWT with legacy secret 选项
- 在 Secrets 区域点击 Add a new secret
- Name 填入 AINX_API_KEY,Value 填入你从 AINX 控制台 申请的 Key
- 点击 保存 即可
- 部署 fund-valuation-ranking 函数:
- 返回 Edge Functions 选项卡,在 Functions 区域点击 Develop a new function → Via Editor
- 输入函数名称 fund-valuation-ranking和复制 doc/edgeFunction/fund-valuation-ranking.ts 内容到编辑器中,点击 Create
- 到该函数的 Settings 页,取消 Verify JWT with legacy secret 选项
常见排查: - 401 Unauthorized:说明当前未登录或未携带用户 JWT(先完成 Supabase 登录流程) - 500 / "模型未返回合法 JSON":通常是第三方模型接口返回格式异常或 Key 无效
更多 Supabase 相关内容查阅官方文档。
本项目已配置 GitHub Actions。每次推送到 main 分支时,会自动执行构建并部署到 GitHub Pages。
如需使用 GitHub Actions 部署,请在 GitHub 项目 Settings → Secrets and variables → Actions 中创建对应的 Repository secrets(字段名称与 .env.local 保持一致)。
包括:NEXT_PUBLIC_Supabase_URL、NEXT_PUBLIC_Supabase_ANON_KEY、NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY、NEXT_PUBLIC_GA_ID、NEXT_PUBLIC_GITHUB_LATEST_RELEASE_URL、NEXT_PUBLIC_IS_GITHUB_LOGIN。
若要手动构建:
npm run build
静态文件将生成在 out 目录下。
镜像支持两种配置方式:
--build-arg 或 .env 传入 NEXT_PUBLIC_*,值会打进镜像,运行时无需再传。-e 或 --env-file 传入,入口脚本会在启动 Nginx 前替换静态资源中的占位符。可复制 env.example 为 .env 并填入实际值;若不用登录/反馈功能可留空。
# 方式 A:运行时再注入配置(镜像内为占位符)
docker build -t real-time-fund .
# 方式 B:构建时写入配置
docker build -t real-time-fund --build-arg NEXT_PUBLIC_SUPABASE_URL=xxx --build-arg NEXT_PUBLIC_SUPABASE_ANON_KEY=xxx .
# 或依赖同目录 .env:docker compose build
# 若构建时未写入配置,可在此注入(与 --env-file .env 二选一)
docker run -d -p 3000:3000 --name fund --env-file .env real-time-fund
.env 作为 build-arg 与运行环境)# 建议先:cp env.example .env 并编辑 .env
docker compose up -d
镜像已发布至 Docker Hub,可直接拉取运行,无需本地构建。
bash
docker pull hzm0321/real-time-fund:latest
bash
docker run -d -p 3000:3000 --name real-time-fund --restart always hzm0321/real-time-fund:latest
.env:
bash
docker run -d -p 3000:3000 --name real-time-fund --restart always --env-file .env hzm0321/real-time-fund:latest
或单独指定变量:-e NEXT_PUBLIC_SUPABASE_URL=xxx -e NEXT_PUBLIC_SUPABASE_ANON_KEY=xxx。NEXT_PUBLIC_SUPABASE_URL、NEXT_PUBLIC_SUPABASE_ANON_KEY、NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY、NEXT_PUBLIC_GA_ID、NEXT_PUBLIC_GITHUB_LATEST_RELEASE_URL。110022),点击“添加”。欢迎基金实时开发者加入微信群聊讨论开发与协作:

本项目所有数据均来自公开接口,仅供个人学习及参考使用。数据可能存在延迟,不作为任何投资建议。
本项目采用 GNU Affero General Public License v3.0(AGPL-3.0)开源协议。
完整协议文本见仓库根目录 LICENSE 文件,或 GNU AGPL v3 官方说明。
二开或转载需注明出处。
Made by hzm
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|