perplexity-cli
🧠 A simple command-line client for the Perplexity API. Ask questions and receive answers directly from the terminal! 🚀🚀🚀
AlumNet - AI-powered intelligent school history exhibition & alumni management system | AI 智能校史展示系统 — 校友星图
git clone https://github.com/jungang/alumnet.gitjungang/alumnet
AI-Powered School History Exhibition & Alumni Management System
AI 智能校史展示系统 — 校友星图
The first open-source AI-powered alumni exhibition system designed for school history museums.
🌟 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.
AlumNet is a full-stack open-source system purpose-built for school history museums and alumni associations. It provides:
Built for schools, museums, and education developers. Deploy it for your alma mater today.
┌─────────────────────────────────────────────────────────────┐
│ Nginx (Reverse Proxy) │
├──────────────┬──────────────┬───────────────────────────────┤
│ │ │ │
│ ┌─────────┐ │ ┌──────────┐ │ ┌──────────────────────────┐ │
│ │ Client │ │ │ Admin │ │ │ Server (API) │ │
│ │ (Kiosk) │ │ │ (Manage) │ │ │ Express + TS │ │
│ │ │ │ │ │ │ │ │ │
│ │ Vue 3 │ │ │ Vue 3 │ │ │ ┌──────┐ ┌─────────┐ │ │
│ │ Three.js │ │ │ Element │ │ │ │ Auth │ │ RAG │ │ │
│ │ Tailwind │ │ │ Plus │ │ │ └──────┘ └─────────┘ │ │
│ └─────────┘ │ └──────────┘ │ │ ┌──────┐ ┌─────────┐ │ │
│ │ │ │ │ Alumni│ │ Backup │ │ │
│ Port 5173 │ Port 5174 │ │ └──────┘ └─────────┘ │ │
│ │ │ │ │ │ │ │
└──────────────┴──────────────┘ │ ┌──────┐ ┌─────────┐ │ │
│ │ PG │ │ Qdrant │ │ │
│ └──────┘ └─────────┘ │ │
└──────────────────────────┘ │
Port 3000 │
────────────────┘
| Layer | Technology | Purpose |
|---|---|---|
| Kiosk Frontend | Vue 3 · TypeScript · Three.js · Tailwind CSS | Touch-screen exhibition with 3D visual effects |
| Admin Dashboard | Vue 3 · TypeScript · Element Plus · XLSX | Alumni data management & system administration |
| Backend API | Node.js · Express · TypeScript | RESTful API with JWT authentication |
| Database | PostgreSQL · pgvector | Relational data + vector embeddings |
| Vector Search | Qdrant | High-performance similarity search for RAG |
| AI Engine | GLM-4 · DeepSeek API | LLM-powered natural language Q&A |
| Deployment | Docker · PM2 · Nginx | Production-grade containerized deployment |
| Requirement | Version | Required? |
|---|---|---|
| Node.js | ≥ 18 | ✅ Yes |
| pnpm | ≥ 8 | ✅ Yes |
| PostgreSQL | ≥ 14 | ✅ Yes (with pgvector recommended) |
| Qdrant | latest | ⭕ Optional (for AI search) |
| AI API Key | — | ⭕ Optional (GLM-4 or DeepSeek) |
# 1️⃣ Clone the repository git clone https://github.com/jungang/alumnet.git cd alumnet # 2️⃣ Install dependencies pnpm install # 3️⃣ Configure environment cp server/.env.example server/.env # Edit server/.env with your settings # 4️⃣ Initialize database # Execute server/src/db/init.sql in PostgreSQL # (Optional) Execute server/src/db/seed.sql for sample data # 5️⃣ Start development servers pnpm dev:server # Backend API → http://localhost:3000 pnpm dev:client # Kiosk frontend → http://localhost:5173 pnpm dev:admin # Admin dashboard → http://localhost:5174
| Variable | Description | Default |
|---|---|---|
SCHOOL_NAME |
School name displayed in UI | 示例中学 |
SCHOOL_LOGO_URL |
Path to school logo | /logo.png |
SCHOOL_SINCE |
School founding year | 1917 |
DB_* |
PostgreSQL connection | — |
AI_PROVIDER |
AI provider (glm or deepseek) |
glm |
SCREEN_RESOLUTION |
Target kiosk resolution | 1920x1080 |
# Configure environment cp server/.env.example server/.env # Edit .env with production values... # Launch all services docker compose up -d
pnpm build:server && pnpm build:client && pnpm build:admin pnpm pm2:start # Start all services via PM2 pnpm pm2:status # Check status pnpm pm2:logs # View logs
📖 See DEPLOYMENT.md for detailed deployment guide.
alumnet/
├── client/ # 🖥️ Touch-screen exhibition kiosk
│ └── src/
│ ├── views/ # Galaxy · TimeCorridor · Search · Messages
│ ├── components/ # AIChatDialog · FaceTagOverlay · ThemeToggle
│ └── composables/ # useAutoRefresh · useIdleDetection
├── admin/ # ⚙️ Management dashboard
│ └── src/
│ ├── views/ # 19 views: Alumni · Photos · Backup · Dashboard...
│ └── api/ # Typed API client
├── server/ # 🔌 Backend API service
│ └── src/
│ ├── routes/ # REST API endpoints
│ ├── services/ # Business logic (RAG · Auth · Backup)
│ ├── repositories/ # Data access layer
│ └── db/ # Migrations · Seeds · Import scripts
├── .github/ # 🤖 CI/CD · Issue templates · PR templates
├── docker-compose.yml # 🐳 Production Docker config
├── deploy.sh # 📦 Automated deployment script
└── ecosystem.config.js # ⚡ PM2 process manager
New to the project? Check out these beginner-friendly issues:
| Issue | Description | Skills Needed |
|---|---|---|
good first issue |
Browse all → | Any |
| i18n setup | Add vue-i18n and extract hardcoded strings | Vue 3, TypeScript |
| Unit tests | Add test coverage for services/repositories | Vitest, TypeScript |
| Mobile responsive | Improve touch-screen layouts for tablets | CSS, Vue 3 |
| Accessibility | Add ARIA labels and keyboard navigation | HTML, Vue 3 |
We welcome contributions from the community! Whether it's a bug fix, new feature, or documentation improvement.
# Quick contribution workflow git checkout -b feature/your-feature git commit -m "feat: add your feature" git push origin feature/your-feature # Then open a Pull Request 🎉
📖 See CONTRIBUTING.md for detailed guidelines.
Commit Convention: We follow Conventional Commits — feat:, fix:, docs:, refactor:, etc.
This project is licensed under the MIT License — see LICENSE for details.
Free for personal, educational, and commercial use. Attribution appreciated but not required.
All alumni data included in this project is fictional and for demonstration purposes only. Do not use the sample data in production environments.
Made with ❤️ for school history museums everywhere
more like this
🧠 A simple command-line client for the Perplexity API. Ask questions and receive answers directly from the terminal! 🚀🚀🚀
search projects, people, and tags