这套工程是「把一个海外 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 的七处升级
- 后台上传:新增
api/admin/upload与api/uploads/[name],图片可上传并在后台引用 - 上传校验:
lib/image-sniff.ts按文件头判断真实类型,不只看扩展名 - 富文本安全:
lib/sanitize-html.ts过滤公告/商品详情的 HTML - 抢单交互:新增
GrabbingMatchPopup.tsx,匹配成功弹窗 - 后台体验:
lib/admin/alert-sound.ts新订单提示音 +lib/throttle.ts节流 - 后台样式:引入 layui 风格样式(
styles/web3snagajob/admin/*.css) - 多语言文案层:
lib/station/info-i18n.ts,站点信息按语言下发
部署要点
- Node 24(
nvm use或 Docker 镜像自带),npm ci && npm run build - 首次启动会在工作目录生成
.admin-data/,该目录需可写;不要放进public/,否则配置与管理员信息可被直接下载 - 登录后台后立刻改掉演示口令(包内注释写明演示口令会在
seed()时被哈希落表) - 用
output: standalone时,.next/standalone+.next/static+public三件套一起部署 - 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 基线版。