Skip to content

NextCandy/UnUseDomain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

116 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UnUseDomain

UnUseDomain 是部署在 Cloudflare Workers 上的中文域名展示与管理系统。公开站点用于检索、收藏、速览和访问已上架域名;管理后台负责域名、分类、CSV、站点设置、到期提醒、通知、安全与审计日志。前端、Worker API、Cloudflare D1 与 R2 同源部署。

线上环境

  • 生产站点:https://unusedomain.com
  • 管理后台:https://unusedomain.com/admin
  • Worker:wanmi(为避免新建 Worker 后丢失现有 Secrets 与自定义域名绑定,保留此历史生产资源 ID)
  • D1:wanmi-db(绑定 DB,保留现有生产数据)
  • R2:wanmi-assets(绑定 UPLOADS,保留现有上传文件)
  • Cron:每天 01:00 UTC,即 Asia/Shanghai 09:00
  • 当前设计基线:Elegant Green Gold 雅致绿金主题(2026-07-20,由浅色暖金改版)——墨绿为主、暖白为底、香槟金点缀;域名简介为纯手动维护(AI 生成已于 2026-07-17 移除)

权威业务源为 data/source/UnUseDomain.csv:859 条有效唯一记录。生产库还保留 3 条历史人工域名,因此线上合计 862 条;迁移与发布不得覆盖或归档这 3 条记录。

品牌与图标

  • 对外品牌、网页标题、管理后台、通知和下载文件名统一使用 UnUseDomain;生产域名统一为 unusedomain.com
  • 版权文字统一为 © 2026 UnUseDomain. All rights reserved.
  • 品牌标志为「对分圆环」:圆环沿竖轴对分,左半石墨灰 #3B3E47、右半靛蓝 #233393,固定配色,不随 accent_color 变化。
  • public/ 下全部图标由同一张 1092×1092 透明原图确定性生成,分两组:unusedomain-logo.png(512)、favicon-16/32/48.png 与含 6 档条目的 favicon.ico透明底,供页内品牌标与浏览器标签使用;apple-touch-icon.png(180)、icon-192.pngicon-512.png白底,因为 iOS 会把透明合成为黑色、PWA purpose: "any maskable" 需要不透明底并把内容收进 80% 直径的安全区。
  • 站点设置通过品牌迁移指向这些静态资源;后台上传的 logo_url/favicon_url 优先级高于静态默认值。
  • Cookie、浏览器存储键、缓存标记与诊断 Header 使用 unusedomain 命名;品牌迁移会使旧管理会话失效一次,需要重新登录。

产品边界

当前产品明确不包含以下能力:

  • 求购表单、报价、线索存储及相关 API;
  • DNS 查询、缓存、写入和管理界面;
  • 注册商账户、凭据、同步及服务商适配器。

域名可保留 registrar_name 纯文字资料,用于记录该域名的注册商名称,但它不关联账户或外部 API。旧版相关端点均返回 404;0016_remove_registrar_dns_leads.sql 会删除历史表与关联字段,同时保留域名、分类、通知历史和注册商文字资料。

设计系统

  • 仅提供单一浅色「雅致绿金」主题,不提供明暗主题切换,也不读取系统配色偏好。
  • 根目录 tokens.css 是唯一设计令牌源;组件与运行时样式只引用 CSS 变量,不硬编码色值。
  • 暖白背景 #f6f5f0、奶油白卡片 #fefdfa,品牌主色为深墨绿 #133429(hover #1e6b59),香槟金 #c89848 仅表达精品与重点资产(占比 ≤2%),浅底金色小字一律 --gold-text #79551f
  • 主、次、三级文字依次使用 #1f2a24#5d675f#7e877f;卡片阴影统一为绿倾向低透明度令牌,禁止纯黑阴影。
  • 站点设置 accent_colorapplyAccentColor 整套派生(主色/hover/bg/border/ring 同步),历史默认值视为未定制。
  • 保留 prefers-reduced-motionprefers-reduced-transparency 退化;完整规范见 DESIGN.md

公开站点

  • 搜索与筛选:关键词、分类(下拉含全部/精品/各分类及计数)、后缀、位数(全部、1–9 位与 10 位以上,驱动 minLength/maxLength),状态同步到 URL;高级筛选面板已移除,contains/excludes/kind 与旧链接的 group=two/three 仍可通过 URL 直传兼容。
  • 首页无 Hero:页首(品牌 Logo + 右侧「后台」入口)之下直接是搜索与域名列表;无独立精选区块、无分类 pills 行、无「全部资产」标题行;精品域名以主列表卡片上的精品标记区分。页脚不再有管理入口。
  • 搜索按钮固定为右侧 72px 紧凑按钮,不再拉伸占据工具栏。
  • 每张域名卡片底部仅保留收藏、复制、速览三枚图标;无可见中文按钮文字,也没有“我想要”。
  • 点击域名名称直接在新标签页访问对应域名;站内保留原生 dialog 速览,精品域名速览额外提供独立详情页入口。
  • 收藏和最近搜索仅保存在当前浏览器的版本化 localStorage 中。
  • 单一黑金主题、随机发现、相似域名、桌面/平板/手机响应式布局与无障碍标签。
  • Worker 为首页注入 canonical、Open Graph 和真实域名 ItemList JSON-LD。
  • 87 个精品域名拥有 Worker SSR 独立页 /d/:domain,包含完整资料、同后缀/同长度推荐、Open Graph 与 Product JSON-LD;普通域名访问该路径时重定向到 /domains?q=域名
  • /api/public/og/:domain 为精品域名生成 1200×630 黑底金字 PNG;sitemap.xml 从 D1 动态输出首页和全部 87 个精品详情页。

性能策略

  • 样式按域拆分:app.css 为前台与共享层,admin.css 为后台专属层,随已懒加载的 AdminApp 按需加载,不进前台首屏(前台 CSS 135.93KB → 108.66KB,gzip 23.54 → 19.19KB)。
  • Manrope(域名与 UI)与 IBM Plex Mono(元数据)已自托管 latin/latin-ext 子集(public/fonts/src/client/styles/fonts.csspnpm fonts:fetch 生成):Google Fonts 在中国大陆不可达,外链会让国内用户完全拿不到这两族字体。Manrope 为变量字体,单文件覆盖 400-800,浏览器按 unicode-range 只下载命中的子集。中文 Noto Sans SC 体积过大仍走 Google Fonts,不可达时按 tokens.css 回退系统中文字体。
  • 拆分依据是真实页面的 DOM 探测而非命名前缀:只有「前台完全不匹配、仅后台匹配」的选择器才进 admin.css。实测前后台共享选择器仅 19 个(html/body/button/.brand/.secondary-button/.pagination 等),全部留在 app.css;两个文件选择器不重叠,因此 admin.css 的加载顺序不影响前台层叠。注意 .admin-link 是前台页脚的管理入口,不可按前缀误判为后台样式。
  • 后台域名列表每页 100 条服务端分页,滚动到底自动累积下一页;桌面按视口虚拟化渲染,行高由首行实测得出。
  • 720px 以下表格切换为卡片式布局、行高不定,此时关闭虚拟化直接整段渲染;宽表格只在自身容器内横向滚动,页面本身不横向滚动。
  • 后台搜索输入去抖 300ms,避免逐字符重置累积列表。
  • 公开列表默认每页 36 条,服务端分页;不预取下一页。
  • 最近请求缓存最多 20 项,失败请求自动移出缓存。
  • 数据版本检查从 8 秒降为 60 秒,并且只在页面可见时执行;后台修改可通过刷新立即读取。
  • 卡片使用 React.memocontent-visibility 与布局隔离;关闭卡片入场动画、重阴影、位移悬停和移动底栏模糊。
  • 管理后台按路由懒加载,不进入公开首页首包。

管理后台

后台固定为七个模块:概览、域名、分类、站点设置、到期提醒、账户安全、操作日志。

  • PBKDF2 密码、HMAC 会话、CSRF、防暴力登录、会话撤销与改密;
  • 域名 CRUD、服务端筛选/排序、可选简介(纯手动填写)、生命周期文字资料、精品、上架状态和批量操作;
  • 批量精品、上架、隐藏和删除走统一确认弹窗,显示选中数量与即将执行的动作;批量设置分类可选现有分类或新建;选中数超过后端 500 个 id 的上限时前端自动分批提交;切换筛选条件会清空选择,避免误伤当前看不见的域名;
  • CSV 导入先 dry-run 预览:展示将新增、已存在、字段冲突、无效与文件内重复的条数,并按字段列出会被改写的新旧值;dry-run 不写数据库,确认后才执行真实导入;
  • 操作日志顶部提供近 7 天操作趋势折线图,并按创建/更新/删除/批量分组计数;
  • CSV 预览、跳过/更新冲突及导入错误下载;
  • 站点资料和 R2 图片;
  • Email、Telegram、Bark、Server酱、企业微信、飞书、Discord 通知;
  • 操作日志筛选、分页与 CSV 导出。

技术栈

React 19、TypeScript 6、Vite 8、Cloudflare Vite Plugin、Hono、Workers Static Assets、D1、R2、Cron Triggers、Zod、Vitest 和 Playwright。

本地开发

要求 Node.js 22+ 与 pnpm 10+。

pnpm install
cp .dev.vars.example .dev.vars
pnpm db:migrate:local
pnpm domains:validate
pnpm domains:import:local -- --dry-run
pnpm domains:import:local
pnpm dev --host 127.0.0.1

本地 Vite 默认关闭 Cloudflare 远程 binding 代理,避免开发与 CI 依赖线上凭据。

.dev.vars 必须提供 ADMIN_EMAILBOOTSTRAP_ADMIN_PASSWORDSESSION_SECRETCREDENTIALS_ENCRYPTION_KEY,且已被 Git 忽略。首次使用某个管理员邮箱登录时才会创建该账号;部署不会重置已有密码。

验证与部署

pnpm check
pnpm test:e2e

pnpm exec wrangler whoami
pnpm db:backup
pnpm db:migrate:remote
pnpm run deploy
pnpm verify:production

pnpm check 包含类型检查、ESLint、单元/集成测试、生产构建、859 条本地域名验证和生产文件扫描。生产变更顺序固定为:完整 D1 备份 → 检查待执行迁移 → 远程迁移 → 部署 → API、桌面、手机和后台验收。

本轮关键迁移:

  • 0015_restore_domain_management_schema.sql:仅作为历史列名兼容桥,为全新安装准备临时文字列并回填权威 CSV;不会恢复被移除的业务表。
  • 0016_remove_registrar_dns_leads.sql:兼容历史线上和全新安装两种 schema,规范化 registrar_name,重建导入暂存表,删除注册商账户、DNS 和求购线索表,并保护分类与通知历史。
  • 0017_domain_keywords_field.sql:为域名和导入暂存记录增加逗号分隔关键词,按中英文逗号与顿号迁移有效简介,同时完整保留原 description
  • 0026_unusedomain_rebrand.sql:统一生产站点名称、Slogan、版权、Logo 与 Favicon,同时保留联系方式、主题色、展示密度和其他管理员设置。

所有远程 Token 只能通过环境变量、CI Secret 或交互式输入提供。不得写入 README、.dev.vars.example、Wrangler 配置、构建产物、Issue 或日志;聊天中暴露过的长期凭据应在发布后轮换。

目录

src/client/            React 公开站点与管理后台
src/worker/            Hono Worker、认证、API 与通知服务
src/shared/            CSV、导入计划、Schema 和共享类型
scripts/               数据导入、验证、备份与安全扫描
migrations/            D1 migrations
data/source/           权威 CSV
tests/                 单元、集成与 Playwright E2E(含 22 张视觉基线截图)
docs/                  部署、导入与安全文档

详细说明见 Cloudflare 部署域名导入安全设计设计规范HANDOFF

About

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages