这套工程是「把一个海外 Web3 抢单站整站重做下来」的产物:前端用 Next.js 16 全栈实现,含 30 个会员端页面、21 个后台页面、13 种语言,以及一套跑在本地的模拟后端(src/lib/station)。v2.0 是在 v1.0 基线上继续迭代的版本。

技术栈

  • 框架:Next.js 16.3(App Router)+ React 19.2 + TypeScript
  • 样式:Tailwind CSS 4 + shadcn/ui(components.json 已配)+ 自定义 CSS 变量
  • 运行:Node 24(.nvmrc 锁定),next.config.ts 里 output: "standalone",可直接出精简运行包
  • 部署:自带多阶段 Dockerfile 与 docker-compose.yml
  • 依赖极简:除框架外只有 lucide 图标、clsx、tailwind-merge 等基础件,没有引入 ethers / wagmi / tronweb

前台 30 个页面

路由全部在 src/app/pages 下,按业务分块:

  • 首页与任务:index/index、index/grabbing(抢单)、index/purchase(购买)、index/msg、index/kefu + kefu/chat
  • DeFi:defi/defi(质押列表)、defi/detail
  • 账户:login/login、login/regist、my/my、my/recharge、my/nextrecharge、my/recharge_record、my/withdrawal、my/to_be_paid、my/team_table、my/invite、my/member、my/msg、my/lang
  • 资料:user/user、account_details、address、bind_bank、bind_trc20、password_manage、business_password、revise_name

页面之外还有 128 个组件,视觉层是「原站 1:1 复刻」的产物(styles/web3snagajob 下按页面拆分的 CSS 变量与背景图)。

后台 21 个模块

  • 会员与资金:member、balance、recharge、withdraw、commission
  • 业务:orders、rot-order(轮单/派单)、goods + goods-cate、shop-goods + shop-cate + shop-orders、level(等级)
  • 运营:banner、home-msg、msg、support-msg(客服工单)
  • 盘面:deal-console(控盘台,控制涨跌/走势与商品参数)
  • 其他:login、仪表盘首页、兜底路由

数据与鉴权:模拟后端 + JSON 存储

这套包不依赖数据库。会员端请求打到 /api/index/{endpoint},由 src/lib/station/handlers.ts 在进程内应答(代码注释写得很清楚:没有一次调用离开进程);数据落在项目根目录的 .admin-data/:

  • tables.json:会员、订单、资金流水等业务表
  • site-config.json:站点配置(币种、提现费率与起提额、佣金比例、等级、商品、支付方式、DeFi 链、控盘参数、Banner、公告)
  • admin.json:管理员与操作日志

管理员口令用 scrypt$盐$散列 存储,不明文;会员与后台会话是两套 token(Access-Token / ba-token),避免「会员登录后台」越权。这一点在同类包里算做得比较规矩。

要注意的是:因为没有链上 SDK,bind_trc20、充值、提现、质押这些页面都只是前端表单 + 本地状态,不会产生真实转账。要接真实业务,替换点在 lib/station/handlers.ts(约 8 万字符的端点实现)与 state.ts 的持久化函数。

13 种语言

src/lib/i18n 里定义了语言码:en-us、fr-ca、fr-fr、de-de、pt-pt、zh-tw、vi-vn、ru-ru、ms-my、ko-kr、es-es、ro-ro、it-it,文案按语言懒加载(loadMessages),切换写入 lang 与 lang_by_user 两个键,和原站的持久化方式一致。

v2.0 相对 v1.0 的七处升级

  1. 后台上传:新增 api/admin/upload 与 api/uploads/[name],图片可上传并在后台引用
  2. 上传校验:lib/image-sniff.ts 按文件头判断真实类型,不只看扩展名
  3. 富文本安全:lib/sanitize-html.ts 过滤公告/商品详情的 HTML
  4. 抢单交互:新增 GrabbingMatchPopup.tsx,匹配成功弹窗
  5. 后台体验:lib/admin/alert-sound.ts 新订单提示音 + lib/throttle.ts 节流
  6. 后台样式:引入 layui 风格样式(styles/web3snagajob/admin/*.css)
  7. 多语言文案层:lib/station/info-i18n.ts,站点信息按语言下发

部署要点

  1. Node 24(nvm use 或 Docker 镜像自带),npm ci && npm run build
  2. 首次启动会在工作目录生成 .admin-data/,该目录需可写;不要放进 public/,否则配置与管理员信息可被直接下载
  3. 登录后台后立刻改掉演示口令(包内注释写明演示口令会在 seed() 时被哈希落表)
  4. 用 output: standalone 时,.next/standalone + .next/static + public 三件套一起部署
  5. Docker 部署:docker compose up -d --build,记得挂载 .admin-data 做持久化

体检结论(工具实测)

  • 1177 个文件 / 66.3 MB,0 处高危执行调用、0 处硬编码密钥,未加密,可二次开发
  • 286 个第三方文件(docs/research 里是原站抓取产物,占了大半体积,上线前建议删除)
  • 仓库里带 15 个 AI 编码代理配置目录(.claude、.cursor、.codex 等),与运行无关,可清理

适合什么场景

要一套「Web3 风格」的抢单/质押/团队业绩前端,并且准备自己接后端与支付的人。拿过去改文案、换品牌、接 API 即可;如果期望开箱就能收付款,需要额外开发后端与链上服务。

相关实现可以对照 区块链栏目 里的 综合盘 DAPP 交易所 与 多语言 DApp 交易所;本轮升级的前一版见 v1.0 基线版。