{"id":33427494,"url":"https://github.com/occasional16/researchopia","last_synced_at":"2026-05-04T09:32:05.461Z","repository":{"id":315713624,"uuid":"1054966311","full_name":"occasional16/researchopia","owner":"occasional16","description":"Researchopia - Open academic exchange and knowledge sharing platform. Where Research Meets Community | 研学港 - 开放的学术交流与知识共享平台。研学并进，智慧共享","archived":false,"fork":false,"pushed_at":"2026-03-17T18:05:24.000Z","size":8630,"stargazers_count":18,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-17T20:31:32.871Z","etag":null,"topics":["academic","browser-extension","community","knowledge","research","sharing","website","zotero","zotero-plugin"],"latest_commit_sha":null,"homepage":"https://www.researchopia.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/occasional16.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-11T15:17:49.000Z","updated_at":"2026-03-17T05:58:58.000Z","dependencies_parsed_at":"2025-10-30T23:36:52.711Z","dependency_job_id":null,"html_url":"https://github.com/occasional16/researchopia","commit_stats":null,"previous_names":["occasional15/researchopia","occasional16/researchopia"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/occasional16/researchopia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/occasional16%2Fresearchopia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/occasional16%2Fresearchopia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/occasional16%2Fresearchopia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/occasional16%2Fresearchopia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/occasional16","download_url":"https://codeload.github.com/occasional16/researchopia/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/occasional16%2Fresearchopia/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32601513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["academic","browser-extension","community","knowledge","research","sharing","website","zotero","zotero-plugin"],"created_at":"2025-11-24T06:03:35.713Z","updated_at":"2026-05-04T09:32:05.454Z","avatar_url":"https://github.com/occasional16.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable first-line-h1 --\u003e\n\u003c!-- markdownlint-disable html --\u003e\n\u003c!-- markdownlint-disable no-duplicate-header --\u003e\n\n\n\u003cdiv align=\"center\"\u003e\n\n  \u003ca href=\"https://www.researchopia.com/\" target=\"_blank\"\u003e\n    \u003cimg src=\"./docs/res/icon128.svg\" width=\"40%\" alt=\"Researchopia Homepage\" /\u003e\n  \u003c/a\u003e\n\n  [![Zotero Plugin](https://img.shields.io/github/v/release/occasional16/researchopia?filter=zotero-plugin%2Fv*\u0026label=Zotero%20Plugin\u0026style=flat-square\u0026logo=zotero\u0026logoColor=CC2936\u0026color=green)](https://github.com/occasional16/researchopia/releases?q=zotero-plugin)\n  [![Browser Extension](https://img.shields.io/github/v/release/occasional16/researchopia?filter=extension%2Fv*\u0026label=Browser%20Extension\u0026style=flat-square\u0026logo=googlechrome\u0026color=blue)](https://github.com/occasional16/researchopia/releases?q=extension)\n  [![Website](https://img.shields.io/github/v/release/occasional16/researchopia?filter=website%2Fv*\u0026label=Website\u0026style=flat-square\u0026logo=cloudflare\u0026color=orange)](https://www.researchopia.com)\n\n  [![zotero target version](https://img.shields.io/badge/Zotero-9/8-green?style=flat-square\u0026logo=zotero\u0026logoColor=CC2936)](https://www.zotero.org)\n  [![Using Zotero Plugin Template](https://img.shields.io/badge/Using-Zotero%20Plugin%20Template-blue?style=flat-square\u0026logo=github)](https://github.com/windingwind/zotero-plugin-template)\n  ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/occasional16/researchopia/total?style=flat-square)\n  \u003ca href=\"https://github.com/occasional16/researchopia/blob/main/LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/License-AGPLv3-green.svg?style=flat-square\"/\u003e\u003c/a\u003e\n   [![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat\u0026color=00b0aa\u0026labelColor=000000\u0026logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K\u0026logoColor=ffffff)](https://zread.ai/occasional16/researchopia)\n\n  \u003cfont size=\"6\"\u003e **研学港 | Researchopia** \u003c/font\u003e \n\n  \u003cfont size=\"4\"\u003e **开放的学术交流与知识共享平台 | Open academic exchange and knowledge sharing platform** \u003c/font\u003e \n\n  \u003cfont size=\"4\"\u003e **研学并进，智慧共享 | Where Research Meets Community** \u003c/font\u003e \n\n  [🌐 官方网站](https://www.researchopia.com) | [📄 用户指南](/docs/USER-GUIDE.md) | [🤝 贡献指南](./docs/CONTRIBUTING.md)\n\n\u003c/div\u003e\n\n\n## 🧩 目录 Contents\n\n- [🧩 目录 Contents](#-目录-contents)\n- [📋 项目简介](#-项目简介)\n  - [🌟 项目组成](#-项目组成)\n  - [🤖 AI驱动开发](#-ai驱动开发)\n  - [💬 社区与交流](#-社区与交流)\n- [⚡ 快速开始](#-快速开始)\n  - [✨ 核心功能](#-核心功能)\n  - [🌐 网站平台](#-网站平台)\n  - [📱 浏览器扩展](#-浏览器扩展)\n  - [📚 Zotero 插件](#-zotero-插件)\n- [🚀 开发环境搭建](#-开发环境搭建)\n  - [前置要求](#前置要求)\n  - [快速开始](#快速开始)\n  - [Zotero插件开发 (可选)](#zotero插件开发-可选)\n  - [浏览器扩展开发 (可选)](#浏览器扩展开发-可选)\n- [📝 相关文档](#-相关文档)\n- [🔧 开发指南](#-开发指南)\n  - [🤝 贡献指南](#-贡献指南)\n  - [📁 项目结构](#-项目结构)\n  - [🛠 技术栈](#-技术栈)\n- [📄 许可证](#-许可证)\n- [📞 联系方式](#-联系方式)\n\n\n## 📋 项目简介\n\n欢迎来到 **研学港 Researchopia** ！ **研学港 Researchopia** 是一个开放的学术交流与知识共享平台（开源项目），旨在为研究者提供优质的学术资源和交流环境。我们致力于构建一个研究者的理想国，让学术智慧在这里汇聚和传播。\n\n### 🌟 项目组成\n\n本项目采用**Monorepo架构**，包含三个核心组件：\n\n1. **🌐 网站（Next.js）** ([www.researchopia.com](https://www.researchopia.com))\n   - 在线论文搜索和评价平台\n   - 学术标注社区\n   \n2. **📚 Zotero 插件** (https://www.researchopia.com/updates)\n   - 嵌入 Zotero 8/7 的原生插件\n   - 实时文献共读会话\n   - 自动同步 PDF 标注到云端\n   - 实时会话协作功能\n   \n3. **📱 浏览器扩展** ([Edge Store](https://microsoftedge.microsoft.com/addons/detail/%E7%A0%94%E5%AD%A6%E6%B8%AF-researchopia/hjijphegihgkddcmdmfjpflpcdaadbio))\n   - 智能 DOI 检测\n   - 侧边栏快速预览\n   - 一键搜索论文\n\n具体功能请参考 [用户指南](https://www.researchopia.com/guide)。\n\n### 🤖 AI驱动开发\n\n本项目正式启动于2025-09-08，作者是一名刚博士毕业的科研狗（化学领域），没有编程基础，也没有报过AI课程。**本项目的编程部分100%由AI工具生成** （项目架构、名称、logo和slogan也由AI设计）。\n\n一开始我还不懂什么叫网站前后端也不懂VS code，但第一天时间就完成了网站基本的界面设计和数据库搭建。浏览器扩展和zotero插件的第一版真的是各用一句话直接生成。当然，进一步的细节打磨和bug处理是花了更多的时间。这段时间也渐渐学到了一些编程知识，也积累了一些与AI对话的经验和小窍门。目前项目处于初期阶段，后续会持续优化和完善。\n\n### 💬 社区与交流\n\n想要近距离了解本项目开发意图和计划，有任何开发和使用上的建议和反馈，或者想了解AI开发的细节的小伙伴，欢迎加我的个人微信、微信公众号（观物AI），也欢迎加入用户群：\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://obcblvdtqhwrihoddlez.supabase.co/storage/v1/object/public/qr-codes/wechat-personal.png\" alt=\"个人微信二维码\" width=\"24%\"\u003e\n  \u003cimg src=\"https://obcblvdtqhwrihoddlez.supabase.co/storage/v1/object/public/qr-codes/wechat-official-account.png\" alt=\"微信公众号二维码\" width=\"22.5%\"\u003e\n  \u003cimg src=\"https://obcblvdtqhwrihoddlez.supabase.co/storage/v1/object/public/qr-codes/wechat-group.png\" alt=\"微信群二维码\" width=\"23%\"\u003e  \n  \u003cimg src=\"https://obcblvdtqhwrihoddlez.supabase.co/storage/v1/object/public/qr-codes/qq-group.png\" alt=\"QQ群二维码\" width=\"23.5%\"\u003e\n\u003c/div\u003e \n\n---\n\n## ⚡ 快速开始\n\n### ✨ 核心功能\n\n详细内容请看 [用户指南](/docs/USER-GUIDE.md) 。\n\n**🌐 Next.js 网站平台**\n- **论文搜索与管理**: DOI/关键词搜索，智能推荐\n- **标注共享社区**: 查看和分享学术标注，社交互动\n- **实时协作**: 文献共读会话，多人同步阅读\n- **学术社交**: 关注研究者，评论互动，学术讨论\n\n**📚 Zotero 插件**\n- **无缝集成**: 嵌入 Zotero 8 item pane\n- **标注同步**: 自动同步 PDF 标注到云端\n- **实时会话**: 创建/加入共读会话，实时标注共享\n- **社区互动**: 查看他人标注，点赞评论\n\n**📱 浏览器扩展**\n- **智能 DOI 检测**: 自动识别学术网页中的 DOI\n- **悬浮工具**: 拖拽式浮动图标，快速访问\n- **侧边栏集成**: 在任意网页打开研学港\n- **快速搜索**: 一键搜索检测到的 DOI\n\n### 🌐 网站平台\n\n- **官方网站**: [https://www.researchopia.com](https://www.researchopia.com)\n\n主页：\n\n![主页](./docs/res/zhuye.png)\n\n论文详情页：\n\n![论文详情页](./docs/res/xiangqingye.png)\n\n个人中心页：\n\n![个人中心页](./docs/res/gerenzhongxin.png)\n\n\n### 📱 浏览器扩展\n\n研学港提供 Chrome/Edge 浏览器扩展，支持：\n\n- 自动检测学术论文 DOI\n- 一键搜索论文评价\n- 侧边栏快速预览\n- 浮动图标便捷访问\n\n![浏览器扩展](./docs/res/1.png)\n\n**安装扩展：**\n\n1. 打开浏览器扩展管理页面\n2. 启用\"开发者模式\"\n3. 选择\"加载已解压的扩展程序\"\n4. 选择项目中的 `extension` 文件夹\n\n### 📚 Zotero 插件\n\n集成 Zotero 文献管理器，在 Zotero 中直接查看论文评价。\n\n![Zotero插件](./docs/res/zotero.png)\n\n**安装 Zotero 插件：**\n\n在Zotero插件商店内直接下载安装，或下载xpi文件，在 Zotero \u003e Tools \u003e Plugins 中安装。\n\n---\n\n## 🚀 开发环境搭建\n\n### 前置要求\n- **Node.js**: v18.0.0+ \n- **npm**: v9.0.0+\n- **Zotero**: v7 或 v8 Beta (插件开发)\n\n### 快速开始\n\n```bash\n# 1. 克隆仓库并安装依赖\ngit clone https://github.com/occasional16/researchopia.git\ncd researchopia\nnpm install\n\n# 2. 配置环境变量\ncp .env.example .env.local\n# 编辑 .env.local 填写必填项:\n# - NEXT_PUBLIC_SUPABASE_URL\n# - SUPABASE_SERVICE_ROLE_KEY\n\n# 3. 启动开发服务器\nnpm run dev\n# 访问 http://localhost:3000\n```\n\n### Zotero插件开发 (可选)\n```bash\ncd zotero-plugin\nnpm install\n\n# 配置Zotero路径\ncp .env.template .env\n# 编辑 .env: ZOTERO_PLUGIN_ZOTERO_BIN_PATH=C:\\Program Files\\Zotero\\zotero.exe\n\n# 启动热重载\nnpm start\n```\n\n### 浏览器扩展开发 (可选)\n```bash\n# Chrome/Edge: 扩展管理 → 开发者模式 → 加载已解压的扩展\n# 选择 extension/ 目录\n```\n\n**详细开发指南**: [DEVELOPMENT.md](./docs/DEVELOPMENT.md)  \n**贡献流程**: [CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n\n---\n\n## 📝 相关文档\n\n\u003e **🗂️ 完整文档导航**: [文档索引和规范](./docs/README.md) - 查看所有文档和编写规范\n\n**核心文档：**\n- [架构说明](./docs/ARCHITECTURE.md) - 整体架构、数据库设计、技术栈\n- [开发指南](./docs/DEVELOPMENT.md) - Next.js、Zotero插件、浏览器扩展开发\n- [贡献指南](./docs/CONTRIBUTING.md) - 开发规范、Git工作流、PR流程\n- [用户指南](./docs/USER-GUIDE.md) - 网站、插件、扩展使用教程\n- [API 文档](./docs/API.md) - 所有API端点、认证、错误处理\n- [问题排查](./docs/TROUBLESHOOTING.md) - 常见问题和解决方案\n\n**多语言：**\n- [English README](./docs/README-en.md)\n\n\n## 🔧 开发指南\n\n### 🤝 贡献指南\n欢迎添加作者微信，或提交 Issue 和 Pull Request 来帮助改进项目！请查看 [贡献指南](./docs/CONTRIBUTING.md) 了解详情。\n\n更多信息请参考:\n- [开发指南](./docs/DEVELOPMENT.md) - 详细技术文档\n- [贡献指南](./docs/CONTRIBUTING.md) - 开发流程和规范\n- [架构说明](./docs/ARCHITECTURE.md) - 系统架构和数据库设计\n\n### 📁 项目结构\n\n```\n📁 Researchopia/ (Monorepo)\n├── 📁 src/                  # 🌐 Next.js 网站源码 (278 文件)\n│   ├── 📁 app/              # App Router 页面\n│   ├── 📁 components/       # React 组件\n│   ├── 📁 lib/              # 工具库和配置\n│   ├── 📁 hooks/            # 自定义 Hooks\n│   ├── 📁 utils/            # 工具函数\n│   └── 📁 types/            # TypeScript 类型定义\n├── 📁 zotero-plugin/        # 📚 Zotero 插件 (168 文件) ⭐\n│   ├── 📁 src/              # 插件源码\n│   │   ├── 📁 modules/      # 业务模块 (46+ 子模块)\n│   │   │   ├── 📁 ui/       # UI视图层 (高度模块化)\n│   │   │   ├── 📁 pdf/      # PDF管理 (V2架构)\n│   │   │   └── ...\n│   │   ├── 📁 utils/        # 工具函数\n│   │   ├── 📁 config/       # 配置文件\n│   │   └── 📁 adapters/     # 适配器层\n│   ├── 📁 addon/            # 插件资源文件\n│   ├── package.json         # 插件依赖\n│   └── tsconfig.json        # TypeScript 配置\n├── 📁 extension/            # 📱 浏览器扩展 (12 文件)\n│   ├── manifest.json        # 扩展清单 (MV3)\n│   ├── background.js        # 后台脚本\n│   ├── content.js           # 内容脚本\n│   ├── popup.html/js        # 弹窗界面\n│   ├── sidebar.html/js      # 侧边栏\n│   └── 📁 icons/            # 图标资源\n├── 📁 docs/                 # 📖 项目文档\n│   ├── 📁 docs-dev/         # 开发文档 (架构、重构记录)\n│   ├── ARCHITECTURE.md      # 架构说明\n│   ├── DEVELOPMENT.md       # 开发指南\n│   ├── CONTRIBUTING.md      # 贡献指南\n│   └── USER-GUIDE.md        # 用户指南\n├── 📁 public/               # 静态资源文件\n├── 📁 .github/              # GitHub 配置\n│   └── copilot-instructions.md  # AI开发指南\n├── package.json             # 根依赖 (统一版本管理)\n└── tsconfig.json            # 根 TypeScript 配置\n```\n\n### 🛠 技术栈\n\n**🌐 Next.js 网站**\n- **Next.js 16.0.1** - React 框架，App Router\n- **TypeScript** - 类型安全\n- **Tailwind CSS** - 样式框架\n- **Supabase** - 后端服务 (Auth + Database + Realtime)\n- **React Query** - 数据获取和状态管理\n- **WebSocket** - 实时通信\n- **Cloudflare Workers** - 部署平台\n\n**📚 Zotero 插件**\n- **[Zotero Plugin Template](https://github.com/windingwind/zotero-plugin-template)** - 官方插件模版\n- **TypeScript** - 插件开发语言\n- **Zotero Plugin Toolkit 5.1** - 官方工具库\n- **Mozilla/XUL** - Zotero UI 框架\n- **Supabase JS SDK** - 云端数据同步\n\n**📱 浏览器扩展**\n- **Manifest V3** - Chrome 扩展最新标准\n- **Vanilla JavaScript** - 轻量高效 (计划迁移至 TypeScript + Vite)\n\n---\n\n\n## 📄 许可证\n\n本项目采用 [AGPL-3.0-or-later](LICENSE) 许可证。\n\n---\n\n\n## 📞 联系方式\n\n- **项目维护**: Researchopia Team\n- **技术支持**: 通过 GitHub Issues\n- **反馈建议**: 欢迎在平台上提交\n\n- **网站**: [https://www.researchopia.com](https://www.researchopia.com)\n- **GitHub**: [https://github.com/occasional16/researchopia](https://github.com/occasional16/researchopia)\n- **技术支持 + 反馈建议**: 欢迎添加作者微信，加入项目群，或在平台上反馈。\n\n\n---\n\n**Made with ❤️ for the research community**\n\n**研学港 Researchopia** - 研学并进，智慧共享 | Where Research Meets Community。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foccasional16%2Fresearchopia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foccasional16%2Fresearchopia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foccasional16%2Fresearchopia/lists"}