Skip to content

Repository files navigation

OPC 情报站 · OPC Radar

全平台追踪「一人公司」(One Person Company, OPC)热门资讯的静态情报聚合站点。

一个零依赖、单文件的科技感数据看板:所有情报沉淀在 data.json,页面在浏览器端读取并渲染。推送 main 分支后由 Cloudflare Pages 与 GitHub Pages 双通道自动发布。

线上地址:https://opc-radar.pages.dev/ 备用地址:https://wxzhongwang.github.io/opc-radar/


项目定位

OPC(One Person Company,一人公司)指 AI 时代以「一人 + 智能体」为核心组织形态的轻量化创业范式。 本站围绕这一主题,从政策动向、社区落地、创业案例、生态工具、研究报告、赛事活动、风险观察、全球视野、趋势观察九个维度做持续聚合。

特性

  • 九维分类聚合:政策动向、社区落地、创业案例、生态工具、研究报告、赛事活动、风险观察、全球视野、趋势观察,每类独立配色与筛选。
  • 三页协同:资讯流(index.html)+ 找社区 + 找人,顶部导航直达。
  • 地理分布看板:按地区汇总情报数量,纯 SVG 简版示意图(省级着色 + 城市气泡 + 南海诸岛小图)与城市排行联动,点击互相高亮。零 Key、零配额、零外部请求。
  • 找社区 · 按距离排序:授权定位后社区列表由近到远排序(球面直线距离),未授权可按城市浏览;每条附来源链接与地址精度分级
  • 找人 · 开放登记簿:收录社区主动登记的 OPC,支持 GitHub Issue 表单与 Pull Request 两种登记方式,公开范围由登记者自定。
  • 双视图浏览:卡片网格与时间线视图一键切换,支持全文搜索、分类筛选与热度 TOP 10 排行。
  • 零构建静态部署:无打包、无框架、无数据库、无 CDN 依赖,数据与页面分离,推送即发布。
  • 零数据采集:无后端、无注册、无表单落库;定位信息只在本机内存参与计算,统计脚本可一键关闭。

目录结构

opc-radar/
├── index.html                     # 资讯流 + 数据洞察 + 地理分布
├── community.html                 # 找社区(定位 + 距离排序 + 分布示意图)
├── people.html                    # 找人(OPC 登记簿 + 登记引导)
├── geo.js                         # 共享地理工具(城市坐标表 / 距离 / 可选的合规底图加载器)
├── chinamap.js                    # 示意图边界数据(自动生成,勿手改)
├── map-svg.js                     # 简版示意图渲染器(纯 SVG,零依赖)
├── tools/
│   └── build_chinamap.py          # chinamap.js 生成器(含版图完整性自检)
├── data.json                      # 情报数据(唯一数据源)
├── communities.json               # 社区登记簿(名称 / 地址 / 坐标 / 精度 / 来源)
├── people.json                    # OPC 创业者登记簿(PR 方式维护)
├── CONTRIBUTING.md                # 贡献指南(登记、纠错、投递、部署注意)
├── README.md
└── .github/
    ├── ISSUE_TEMPLATE/
    │   ├── opc-register.yml       # OPC 登记表单(自动打 opc-profile 标签)
    │   ├── community-fix.yml      # 社区信息纠错表单
    │   └── config.yml             # 模板选择器配置
    ├── PULL_REQUEST_TEMPLATE.md
    └── workflows/
        ├── deploy.yml             # push main 自动部署 GitHub Pages
        └── label-opc-issue.yml    # 兜底补打 opc-profile 标签

⚠️ 新增页面或数据文件后,必须同步更新 .github/workflows/deploy.yml_site 拷贝清单,否则不会部署到 Pages。

设计要点

  • 零外部依赖:不引用任何 CDN、字体或 JS 库,断网与内网环境同样可用。
  • 数据与页面分离data.json 是唯一数据源;index.html 内嵌同一份数据副本以满足 file:// 直接打开,同时启动后会尝试 fetch("data.json") 刷新为最新版本。
  • 科技感视觉:深色霓虹主题、Canvas 粒子网络背景、扫描线动效、KPI 数字滚动、卡片 / 时间线双视图、详情抽屉与 Markdown 一键复制。
  • 全端响应式:覆盖 1080 / 900 / 640 / 400px 四档断点与横屏矮屏、触屏、超小屏场景;无横向滚动(16 档视口 × 常规/抽屉两种状态实测零溢出)。

响应式设计

断点 布局行为
> 1080px 桌面全量布局:统计区双列、卡片多列网格
≤ 1080px 卡片轨道下限收窄到 300px,环形图间距收紧
≤ 900px 统计区改单列;顶部导航变为可横向滑动的紧凑条(不再整体隐藏)
≤ 640px 单列卡片;KPI 双列;搜索独占一行、分类条横向滚动(粘性控制台高度压缩);搜索框 16px 防 iOS 聚焦缩放;时间线日期换行到标题上方;抽屉全屏
≤ 400px KPI 改单行紧凑式;抽屉按钮纵向堆叠;隐藏时间线分类角标
横屏矮屏 max-height ≤ 520px 时取消控制台粘性定位,避免占满可视区

工程细节:

  • 防撑宽:所有 white-space:nowrap 的 flex 子项(卡片来源、TOP10 标题等)显式声明 min-width:0,grid 轨道一律用 minmax(0,1fr) 而非裸 1fr,杜绝内容把容器撑出横向滚动。
  • 刘海屏安全区viewport-fit=cover + env(safe-area-inset-*),横屏时内容不会被挖孔遮挡。
  • 触屏优化@media(hover:none) 加大点击热区、取消 hover 位移;-webkit-tap-highlight-color 去除点击高亮。
  • 无障碍@media(prefers-reduced-motion:reduce) 关闭粒子背景与全部动画。

数据结构

data.json

{
  "meta": {
    "title": "OPC 情报站 · OPC Radar",
    "subtitle": "全平台追踪「一人公司」热门资讯",
    "updated": "2026-09-10",
    "description": "……",
    "sourceCount": 40,
    "categories": ["政策动向", "社区落地", "创业案例", "生态工具", "研究报告", "赛事活动", "风险观察", "全球视野", "趋势观察"]
  },
  "items": [
    {
      "id": "opc-001",
      "title": "北京发布《支持人工智能 OPC 创新发展行动方案(试行)》",
      "category": "政策动向",
      "date": "2026-07-02",
      "source": "央视网 / 北京市经济和信息化局",
      "region": "北京",
      "heat": 97,
      "tags": ["OPC贷", "开办服务专区", "Token增信", "算力券"],
      "summary": "一句话摘要。",
      "content": "· 要点一\n· 要点二",
      "url": "https://…"
    }
  ]
}

字段说明:

字段 说明
id 唯一标识,格式 opc-NNN
category 必须命中 meta.categories 之一,决定卡片配色与筛选归属
date YYYY-MM-DD,用于排序与月度时间轴
region 地区 / 国家,用于覆盖地区统计
heat 0–100 热度值,用于默认排序与 TOP 10 排行
summary 卡片摘要,建议 40–70 字
content 详情正文,以 \n· 分隔的要点列表
url 原文链接

更新流程

  1. 编辑 data.json,按上表追加条目(id 不重复、category 在分类白名单内)。
  2. 若新增条目需要离线可用,把 data.json 内容重新内嵌回 index.htmlvar EMBEDDED = …(可选;线上环境会自动 fetch 最新数据)。
  3. 提交并推送到 main,Cloudflare Pages 与 GitHub Pages 会自动发布。
git add -A
git commit -m "chore(data): 新增 N 条 OPC 情报"
git push origin main

找社区 · 找人 · 地图合规

三个页面

页面 作用 数据源
index.html 资讯流、数据洞察、地理分布(按地区汇总数量) data.json
community.html 找社区:定位后按距离由近到远排序 + 地图打点 communities.json
people.html 找人:已登记 OPC 卡片 + 登记引导 people.json + GitHub Issues

地图合规(务必遵守)

  • 默认使用矢量示意图,不接地图服务index.htmlcommunity.html 的地图是 map-svg.js 渲染的纯 SVG 简版示意图——只表达「分布大致在哪些省市」,不做精确底图。 因此不需要任何地图 Key、不消耗调用配额、不请求任何地图服务,断网与内网同样可用, 也从根本上绕开了商用授权问题。
  • 边界数据必须可溯源chinamap.jstools/build_chinamap.py 生成,来源为 阿里云 DataV 公开行政区划边界含台湾省、香港特别行政区、澳门特别行政区与南海诸岛(九段线),脚本会先自检这四项、 缺一即拒绝生成。严禁替换为来源不明、缺省台湾省/南海诸岛或边界走向错误的 GeoJSON—— 那属于《地图管理条例》所指的「问题地图」。
  • 如需真实底图(可选)geo.js 保留了合规的腾讯位置服务 GL JS 加载器。 禁止 Google Maps、Apple Maps、Bing 海外版、Mapbox,以及 Leaflet 直连 OpenStreetMap 等任何不合规来源。 启用步骤:① 在 腾讯位置服务 申请 JavaScript GL 类型 Key; ② 在 Key 的「域名白名单」填入 wxzhongwang.github.io;③ 在页面中设置 window.OPCGEO_TMAP_KEY = "你的Key"。个人免费额度 1 万次/日,仅限非商用
  • 疆域与敏感点:不对国界、台湾、南海诸岛等要素自行改写;不标注军事禁区、涉密单位与未公开的敏感坐标。
  • 坐标精度诚实标注communities.jsonlat/lng 为行政区或园区中心点近似值,不是门牌坐标, 仅用于距离估算与分布示意;每条记录带 precision 字段(building / park / district / city),页面上以徽章明示。

定位与隐私

  • 浏览器定位(navigator.geolocation)的结果只存在于页面内存中,用于本地计算直线距离; 不写入 localStorage / Cookie,不上传服务器,不入库,刷新即失效。
  • 符合《个人信息保护法》对位置信息的处理要求:不收集、不存储、不公开他人位置数据。
  • communities.json 收录的是公开机构场所(政府与媒体已公开报道的社区),非个人信息。

OPC 登记流程

  1. Issue 表单(推荐):打开 opc-register.yml 表单填写提交, 模板自带 opc-profile 标签;.github/workflows/label-opc-issue.yml 会兜底补打标签。
  2. Pull Request:在 people.jsonitems 数组末尾追加一条对象(id 留空,合并时分配)。
  3. people.html 启动时读取 people.json,并调用 GitHub Issues API 拉取带 opc-profile 标签的公开 Issue,两者合并去重后展示。

未登录状态调用 GitHub API 有 每小时 60 次 的限额。超限时页面会提示,people.json 中的登记不受影响。

登记字段与注意事项见 CONTRIBUTING.md

本地预览

直接双击 index.html 即可(内嵌数据模式)。若要验证 fetch 刷新链路,需起一个静态服务:

python -m http.server 8000
# 打开 http://localhost:8000

流量统计

站点内置可插拔的统计接入层(见 index.html 底部的 window.ANALYTICS)。所有脚本异步注入,任一服务加载失败都会静默降级,不影响页面任何功能。

默认开启:不蒜子(零注册)

页脚实时显示「总访问 / 独立访客 / 本页浏览」,无需注册任何账号,部署完即有数据。

可接入的服务

服务 免费额度 能力 需注册 配置字段
不蒜子 Busuanzi 免费无上限 PV / UV 计数 否(默认开启) busuanzi.enabled
Microsoft Clarity 免费无上限 热图、会话录制、点击分析 clarity.id
Cloudflare Web Analytics 免费无上限 流量 / 来源 / 地区,无 cookie cloudflare.token
Umami Cloud 免费层 3 站点 / 10 万事件每月 隐私友好、轻量看板 umami.id
GoatCounter 免费托管(非商业) 极轻量 PV 与来源 goatcounter.code
Google Analytics 4 免费 全量流量分析与转化 ga4.id

启用方式

只改 index.html 底部这一处,无需改动其它代码:

window.ANALYTICS.clarity    = { enabled: true, id: "你的项目 ID" };
window.ANALYTICS.cloudflare = { enabled: true, token: "你的 beacon token" };
window.ANALYTICS.ga4        = { enabled: true, id: "G-XXXXXXXXXX" };

推荐组合:不蒜子(页脚即时可见)+ Microsoft Clarity(免费的会话录制与热图,无流量上限)

关闭统计

window.ANALYTICS.busuanzi.enabled = false;

隐私说明

统计脚本由访客浏览器直接向对应服务商发起请求,本站无中间服务器、不采集任何表单数据。若面向欧盟用户或有合规要求,建议只启用无 cookie 的方案(不蒜子 / Cloudflare / Umami / GoatCounter)并相应调整隐私声明。

部署

纯静态、无构建步骤,推送 main 分支后由两条通道自动发布。

主站:Cloudflare Pages

  • 线上地址:https://opc-radar.pages.dev/
  • 关联 GitHub 仓库的 main 分支,推送即触发构建并发布仓库根目录
  • 附带分支预览与构建回滚能力

备用:GitHub Pages

当前使用 Deploy from a branch:Pages 源为 main 分支的 / 根目录,推送即发布,无需构建步骤(纯静态、无外部依赖,Jekyll 不会改动任何文件)。

仓库 Settings → Pages → Source 需为 Deploy from a branch / main / / (root)

可选:升级为 GitHub Actions 发布

若希望走显式构建流程(组装 _site/、写入 .nojekyll、可控 artifact),可将 .github/workflows/deploy.yml 加入仓库,并把 Pages 的 Source 切到 GitHub Actions

该工作流在 push main 或手动 workflow_dispatch 时触发:

  1. actions/configure-pages@v5 初始化 Pages;
  2. 组装 _site/index.html + data.json + .nojekyll);
  3. actions/upload-pages-artifact@v3 打包;
  4. actions/deploy-pages@v4 发布到 GitHub Pages。

注意:推送 .github/workflows/** 需要所用 Token 具备 Workflows: Read and write 权限(classic token 对应 workflow scope),否则 GitHub 会拒绝该文件的推送。

开源协议

本项目基于 MIT License 开源,可自由用于学习、二次开发与商业用途。情报内容整理自公开渠道,版权归原作者所有。


数据整理自公开渠道,仅作信息聚合与研究参考,不构成任何投资或政策建议。

About

OPC 情报站 · 全平台追踪「一人公司」热门资讯的科技感静态站点

Topics

Resources

Contributing

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages