[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11134":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":39,"readmeContent":40,"aiSummary":41,"trendingCount":14,"starSnapshotCount":14,"syncStatus":42,"lastSyncTime":43,"discoverSource":44},11134,"alumnet","jungang\u002Falumnet","jungang","AlumNet - AI-powered intelligent school history exhibition & alumni management system | AI 智能校史展示系统 — 校友星图",null,"TypeScript",202,16,7,0,121,3.69,"MIT License",false,"master",true,[22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"ai","alumni","docker","education","element-plus","express","museum","open-source","postgresql","qdrant","rag","school","tailwindcss","threejs","touch-screen","typescript","vue3","2026-06-12 02:02:29","\u003Cdiv align=\"center\">\n\n\u003C!-- Banner -->\n\u003Cimg src=\".\u002Fscreenshots\u002Fstandby.png\" alt=\"AlumNet Banner\" width=\"100%\" style=\"border-radius: 12px; margin-bottom: 8px;\" \u002F>\n\n\u003Cbr\u002F>\n\n\u003Ch1>\n  \u003Cimg src=\"https:\u002F\u002Fimg.icons8.com\u002F3d-fluency\u002F94\u002Fconference-call.png\" alt=\"logo\" width=\"42\" style=\"vertical-align: middle;\" \u002F>\n  AlumNet\n\u003C\u002Fh1>\n\n**AI-Powered School History Exhibition & Alumni Management System**\n\n**AI 智能校史展示系统 — 校友星图**\n\n\u003Cp>\n  \u003Cem>The first open-source AI-powered alumni exhibition system designed for school history museums.\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjungang\u002Falumnet\u002Fstargazers\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fjungang\u002Falumnet?style=social\" alt=\"GitHub stars\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjungang\u002Falumnet\u002Fblob\u002Fmain\u002FLICENSE\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fjungang\u002Falumnet?color=blue\" alt=\"License\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjungang\u002Falumnet\u002Freleases\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fjungang\u002Falumnet?color=orange\" alt=\"Latest Release\" \u002F>\n  \u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fjungang\u002Falumnet?color=informational\" alt=\"Last commit\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frepo-size\u002Fjungang\u002Falumnet?color=success\" alt=\"Repo size\" \u002F>\n  \u003Cbr\u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVue-3.4-42b883?logo=vuedotjs&logoColor=white\" alt=\"Vue 3\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-18+-339933?logo=nodedotjs&logoColor=white\" alt=\"Node.js\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.0-3178c6?logo=typescript&logoColor=white\" alt=\"TypeScript\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FThree.js-0.160-black?logo=threedotjs&logoColor=white\" alt=\"Three.js\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPostgreSQL-14+-4169E1?logo=postgresql&logoColor=white\" alt=\"PostgreSQL\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-Ready-2496ED?logo=docker&logoColor=white\" alt=\"Docker\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch4>\n  \u003Ca href=\"#-quick-start\">Quick Start\u003C\u002Fa> ·\n  \u003Ca href=\"#-screenshots\">Screenshots\u003C\u002Fa> ·\n  \u003Ca href=\"#-features\">Features\u003C\u002Fa> ·\n  \u003Ca href=\"#-architecture\">Architecture\u003C\u002Fa> ·\n  \u003Ca href=\"#-deployment\">Deployment\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjungang\u002Falumnet\u002Fissues\">Issues\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjungang\u002Falumnet\u002Fdiscussions\">Discussions\u003C\u002Fa> ·\n  \u003Ca href=\".\u002FCONTRIBUTING.md\">Contributing\u003C\u002Fa>\n\u003C\u002Fh4>\n\n\u003C\u002Fdiv>\n\n---\n\n> **🌟 Highlight**: AlumNet combines an immersive Three.js-powered exhibition kiosk with AI-driven natural language search (RAG), creating a museum-grade interactive experience that any school can deploy in 30 minutes with Docker.\n\n---\n\n## 💡 What is AlumNet?\n\nAlumNet is a full-stack open-source system purpose-built for **school history museums and alumni associations**. It provides:\n\n- 🖥️ A **touch-screen kiosk** with sci-fi visual effects — alumni galaxies, time corridors, vintage museums\n- 🤖 **AI-powered natural language search** — ask \"哪些校友在医疗领域工作？\" and get intelligent answers via RAG\n- ⚙️ A **complete admin dashboard** — manage alumni data, photos, messages, donations, and more\n- 🐳 **One-command Docker deployment** — production-ready out of the box\n\nBuilt for schools, museums, and education developers. Deploy it for your alma mater today.\n\n---\n\n## 📸 Screenshots\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd width=\"50%\">\n      \u003Cimg src=\".\u002Fscreenshots\u002Fstandby.png\" alt=\"Standby Screen\" width=\"100%\" style=\"border-radius: 8px;\" \u002F>\n      \u003Cp align=\"center\">\u003Cb>✨ Standby Screen\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>Sci-fi style kiosk standby with real-time clock\u003C\u002Fsub>\u003C\u002Fp>\n    \u003C\u002Ftd>\n    \u003Ctd width=\"50%\">\n      \u003Cimg src=\".\u002Fscreenshots\u002Fnavigation.png\" alt=\"Main Navigation\" width=\"100%\" style=\"border-radius: 8px;\" \u002F>\n      \u003Cp align=\"center\">\u003Cb>🧭 Main Navigation\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>Five core modules with dark futuristic UI\u003C\u002Fsub>\u003C\u002Fp>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd width=\"50%\">\n      \u003Cimg src=\".\u002Fscreenshots\u002Fai-smart-search.png\" alt=\"AI Smart Search\" width=\"100%\" style=\"border-radius: 8px;\" \u002F>\n      \u003Cp align=\"center\">\u003Cb>🤖 AI Smart Search\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>Natural language query powered by RAG\u003C\u002Fsub>\u003C\u002Fp>\n    \u003C\u002Ftd>\n    \u003Ctd width=\"50%\">\n      \u003Cimg src=\".\u002Fscreenshots\u002Ftime-corridor.png\" alt=\"Time Corridor\" width=\"100%\" style=\"border-radius: 8px;\" \u002F>\n      \u003Cp align=\"center\">\u003Cb>⏳ Time Corridor\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>Chronological photo gallery by graduation year\u003C\u002Fsub>\u003C\u002Fp>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd width=\"50%\">\n      \u003Cimg src=\".\u002Fscreenshots\u002Fmessage-board.png\" alt=\"Message Board\" width=\"100%\" style=\"border-radius: 8px;\" \u002F>\n      \u003Cp align=\"center\">\u003Cb>💬 Interactive Message Board\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>Alumni greetings and memories wall\u003C\u002Fsub>\u003C\u002Fp>\n    \u003C\u002Ftd>\n    \u003Ctd width=\"50%\">\n      \u003Cimg src=\".\u002Fscreenshots\u002Flight-theme.png\" alt=\"Light Theme\" width=\"100%\" style=\"border-radius: 8px;\" \u002F>\n      \u003Cp align=\"center\">\u003Cb>🌗 Light Theme\u003C\u002Fb>\u003Cbr\u002F>\u003Csub>Switchable dark\u002Flight themes for different venues\u003C\u002Fsub>\u003C\u002Fp>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n---\n\n## ✨ Features\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\">\n\n### 🖥️ Touch-screen Exhibition Kiosk\n\nImmersive frontend built with **Vue 3 + Three.js**\n\n- **Alumni Galaxy** — 3D interactive star map of alumni\n- **Time Corridor** — Chronological photo gallery\n- **Vintage Museum** — Digital archive of historical items\n- **Top Scholars** — Honor wall for outstanding alumni\n- Standby screen with real-time clock & wake-on-touch\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\">\n\n### 🤖 AI-Powered Smart Search\n\nNatural language query powered by **RAG architecture**\n\n- Ask questions like \"Who graduated in 1990 and works in tech?\"\n- Context-aware answers with referenced alumni profiles\n- Multi-provider support: GLM-4, DeepSeek, or any OpenAI-compatible API\n- Powered by **Qdrant** vector database + **pgvector** embeddings\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"50%\">\n\n### ⚙️ Admin Dashboard\n\nComplete management backend with **Element Plus**\n\n- Alumni CRUD, batch import\u002Fexport (Excel supported)\n- Graduation photo management with face tagging\n- Content moderation for messages & comments\n- System dashboard with usage analytics\n- One-click database backup & restore\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\">\n\n### 🏗️ Production-Ready Infrastructure\n\nEnterprise-grade deployment out of the box\n\n- **Docker Compose** — One command to production\n- **PM2** — Process management with auto-restart\n- **Nginx** — Reverse proxy with SPA routing\n- **PostgreSQL** — Reliable data storage with pgvector\n- Configurable school name, logo, and branding\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n---\n\n## 🏛️ Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                        Nginx (Reverse Proxy)                 │\n├──────────────┬──────────────┬───────────────────────────────┤\n│              │              │                               │\n│  ┌─────────┐ │ ┌──────────┐ │  ┌──────────────────────────┐ │\n│  │  Client  │ │ │  Admin   │ │  │       Server (API)       │ │\n│  │ (Kiosk)  │ │ │ (Manage) │ │  │      Express + TS       │ │\n│  │          │ │ │          │ │  │                          │ │\n│  │ Vue 3    │ │ │ Vue 3    │ │  │  ┌──────┐  ┌─────────┐ │ │\n│  │ Three.js │ │ │ Element  │ │  │  │ Auth │  │   RAG   │ │ │\n│  │ Tailwind │ │ │ Plus     │ │  │  └──────┘  └─────────┘ │ │\n│  └─────────┘ │ └──────────┘ │  │  ┌──────┐  ┌─────────┐ │ │\n│              │              │ │  │ Alumni│  │ Backup  │ │ │\n│  Port 5173   │  Port 5174   │ │  └──────┘  └─────────┘ │ │\n│              │              │ │             │  │         │ │\n└──────────────┴──────────────┘ │  ┌──────┐  ┌─────────┐ │ │\n                                │  │  PG  │  │ Qdrant  │ │ │\n                                │  └──────┘  └─────────┘ │ │\n                                └──────────────────────────┘ │\n                                             Port 3000       │\n                                             ────────────────┘\n```\n\n---\n\n## 🛠️ Tech Stack\n\n| Layer               | Technology                                   | Purpose                                        |\n| :------------------ | :------------------------------------------- | :--------------------------------------------- |\n| **Kiosk Frontend**  | Vue 3 · TypeScript · Three.js · Tailwind CSS | Touch-screen exhibition with 3D visual effects |\n| **Admin Dashboard** | Vue 3 · TypeScript · Element Plus · XLSX     | Alumni data management & system administration |\n| **Backend API**     | Node.js · Express · TypeScript               | RESTful API with JWT authentication            |\n| **Database**        | PostgreSQL · pgvector                        | Relational data + vector embeddings            |\n| **Vector Search**   | Qdrant                                       | High-performance similarity search for RAG     |\n| **AI Engine**       | GLM-4 · DeepSeek API                         | LLM-powered natural language Q&A               |\n| **Deployment**      | Docker · PM2 · Nginx                         | Production-grade containerized deployment      |\n\n---\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n| Requirement | Version | Required?                          |\n| :---------- | :------ | :--------------------------------- |\n| Node.js     | ≥ 18    | ✅ Yes                             |\n| pnpm        | ≥ 8     | ✅ Yes                             |\n| PostgreSQL  | ≥ 14    | ✅ Yes (with pgvector recommended) |\n| Qdrant      | latest  | ⭕ Optional (for AI search)        |\n| AI API Key  | —       | ⭕ Optional (GLM-4 or DeepSeek)    |\n\n### Installation\n\n```bash\n# 1️⃣ Clone the repository\ngit clone https:\u002F\u002Fgithub.com\u002Fjungang\u002Falumnet.git\ncd alumnet\n\n# 2️⃣ Install dependencies\npnpm install\n\n# 3️⃣ Configure environment\ncp server\u002F.env.example server\u002F.env\n# Edit server\u002F.env with your settings\n\n# 4️⃣ Initialize database\n# Execute server\u002Fsrc\u002Fdb\u002Finit.sql in PostgreSQL\n# (Optional) Execute server\u002Fsrc\u002Fdb\u002Fseed.sql for sample data\n\n# 5️⃣ Start development servers\npnpm dev:server    # Backend API → http:\u002F\u002Flocalhost:3000\npnpm dev:client    # Kiosk frontend → http:\u002F\u002Flocalhost:5173\npnpm dev:admin     # Admin dashboard → http:\u002F\u002Flocalhost:5174\n```\n\n### Key Configuration\n\n| Variable            | Description                       | Default     |\n| :------------------ | :-------------------------------- | :---------- |\n| `SCHOOL_NAME`       | School name displayed in UI       | `示例中学`  |\n| `SCHOOL_LOGO_URL`   | Path to school logo               | `\u002Flogo.png` |\n| `SCHOOL_SINCE`      | School founding year              | `1917`      |\n| `DB_*`              | PostgreSQL connection             | —           |\n| `AI_PROVIDER`       | AI provider (`glm` or `deepseek`) | `glm`       |\n| `SCREEN_RESOLUTION` | Target kiosk resolution           | `1920x1080` |\n\n---\n\n## 🐳 Deployment\n\n### Docker (Recommended for Production)\n\n```bash\n# Configure environment\ncp server\u002F.env.example server\u002F.env\n# Edit .env with production values...\n\n# Launch all services\ndocker compose up -d\n```\n\n### PM2 (Bare Metal)\n\n```bash\npnpm build:server && pnpm build:client && pnpm build:admin\npnpm pm2:start    # Start all services via PM2\npnpm pm2:status   # Check status\npnpm pm2:logs     # View logs\n```\n\n📖 See [DEPLOYMENT.md](.\u002FDEPLOYMENT.md) for detailed deployment guide.\n\n---\n\n## 📁 Project Structure\n\n```\nalumnet\u002F\n├── client\u002F                  # 🖥️ Touch-screen exhibition kiosk\n│   └── src\u002F\n│       ├── views\u002F           # Galaxy · TimeCorridor · Search · Messages\n│       ├── components\u002F      # AIChatDialog · FaceTagOverlay · ThemeToggle\n│       └── composables\u002F     # useAutoRefresh · useIdleDetection\n├── admin\u002F                   # ⚙️ Management dashboard\n│   └── src\u002F\n│       ├── views\u002F           # 19 views: Alumni · Photos · Backup · Dashboard...\n│       └── api\u002F             # Typed API client\n├── server\u002F                  # 🔌 Backend API service\n│   └── src\u002F\n│       ├── routes\u002F          # REST API endpoints\n│       ├── services\u002F        # Business logic (RAG · Auth · Backup)\n│       ├── repositories\u002F    # Data access layer\n│       └── db\u002F              # Migrations · Seeds · Import scripts\n├── .github\u002F                 # 🤖 CI\u002FCD · Issue templates · PR templates\n├── docker-compose.yml       # 🐳 Production Docker config\n├── deploy.sh                # 📦 Automated deployment script\n└── ecosystem.config.js      # ⚡ PM2 process manager\n```\n\n---\n\n## 🗺️ Roadmap\n\n- [ ] **i18n** — Multi-language UI support\n- [ ] **WeChat Integration** — Login via WeChat mini-program\n- [ ] **Photo AI** — Auto face recognition for graduation photos\n- [ ] **Data Visualization** — Interactive alumni statistics dashboard\n- [ ] **Mobile App** — Responsive design for mobile browsers\n- [ ] **Plugin System** — Extensible module architecture\n\n### Good First Issues\n\nNew to the project? Check out these beginner-friendly issues:\n\n| Issue              | Description                                                                    | Skills Needed      |\n| :----------------- | :----------------------------------------------------------------------------- | :----------------- |\n| `good first issue` | [Browse all →](https:\u002F\u002Fgithub.com\u002Fjungang\u002Falumnet\u002Flabels\u002Fgood%20first%20issue) | Any                |\n| i18n setup         | Add vue-i18n and extract hardcoded strings                                     | Vue 3, TypeScript  |\n| Unit tests         | Add test coverage for services\u002Frepositories                                    | Vitest, TypeScript |\n| Mobile responsive  | Improve touch-screen layouts for tablets                                       | CSS, Vue 3         |\n| Accessibility      | Add ARIA labels and keyboard navigation                                        | HTML, Vue 3        |\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions from the community! Whether it's a bug fix, new feature, or documentation improvement.\n\n```bash\n# Quick contribution workflow\ngit checkout -b feature\u002Fyour-feature\ngit commit -m \"feat: add your feature\"\ngit push origin feature\u002Fyour-feature\n# Then open a Pull Request 🎉\n```\n\n📖 See [CONTRIBUTING.md](.\u002FCONTRIBUTING.md) for detailed guidelines.\n\n**Commit Convention**: We follow [Conventional Commits](https:\u002F\u002Fwww.conventionalcommits.org\u002F) — `feat:`, `fix:`, `docs:`, `refactor:`, etc.\n\n---\n\n## 📊 Project Stats\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flanguages\u002Fcount\u002Fjungang\u002Falumnet?color=informational\" alt=\"Languages\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flanguages\u002Ftop\u002Fjungang\u002Falumnet?color=3178c6\" alt=\"Top language\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fjungang\u002Falumnet\" alt=\"Issues\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues-pr\u002Fjungang\u002Falumnet\" alt=\"PRs\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002Fjungang\u002Falumnet\" alt=\"Contributors\" \u002F>\n\u003C\u002Fp>\n\n---\n\n## 📄 License\n\nThis project is licensed under the **MIT License** — see [LICENSE](.\u002FLICENSE) for details.\n\nFree for personal, educational, and commercial use. Attribution appreciated but not required.\n\n---\n\n## ⚠️ Disclaimer\n\nAll alumni data included in this project is **fictional** and for **demonstration purposes only**. Do not use the sample data in production environments.\n\n---\n\n\u003Cdiv align=\"center\">\n\n**Made with ❤️ for school history museums everywhere**\n\n[⬆ Back to Top](#-what-is-alumnet)\n\n\u003C\u002Fdiv>\n","AlumNet 是一个基于 AI 的智能校史展示与校友管理系统。它结合了沉浸式的 Three.js 展示界面和自然语言搜索功能，通过 RAG（Retrieval-Augmented Generation）技术提供智能化的查询体验。项目采用 Vue 3、TypeScript 等现代前端技术栈构建，并支持 Docker 部署，使得任何学校都能在短时间内轻松搭建起具有博物馆级别的互动展览平台。适用于学校历史博物馆、校友会等场景，帮助用户以更直观有趣的方式探索校史资料及校友信息。",2,"2026-06-11 03:31:12","CREATED_QUERY"]