{"adoption": {"forks": 10159, "observed_at": "2026-08-28T04:11:48.100336+00:00", "stars": 28078}, "canonical_url": "https://ross.abutalabs.com/products/vhr", "card": {"archived": false, "artifact_type": "application", "description": "微人事是一个前后端分离的人力资源管理系统，项目采用SpringBoot+Vue开发。", "domain": ["hr", "web-development", "backend", "frontend", "developer-tools", "tutorials"], "enriched": true, "function": ["auth", "authorization", "web-framework", "websocket", "caching", "message-queue", "orm", "file-upload", "email"], "health_score": 20, "homepage": "http://vhr.javaboy.org", "language": "Java", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["lenve/vhr"], "name": "lenve/vhr", "platform": ["jvm", "self-hosted"], "pushed_at": "2024-11-25T00:07:39+00:00", "repo": "lenve/vhr", "stars": 28078, "tags": ["spring-boot", "vue", "hr-management", "human-resources", "role-based-access-control", "full-stack", "learning-project", "scaffold", "mysql", "redis", "rabbitmq", "element-ui", "flyway", "chinese", "nodejs", "web-server", "docker"], "topics": [], "urls": [], "use_cases": ["manage employee information and departments in an HR system", "learn Spring Boot + Vue full-stack development with a real project", "study role-based permission database design with Spring Security", "self-host a human resources management system", "see how to integrate Redis and RabbitMQ into a Spring Boot app", "learn Excel import/export and file upload in Spring Boot", "understand front-end and back-end separated deployment with Nginx"], "what_it_is": "vhr (微人事) is a full-stack, front-end/back-end separated human resources management system built with Spring Boot and Vue, covering employee records, departments, positions, salary packages, role-based permissions, and online chat. It also serves as a teaching scaffold demonstrating enterprise Java patterns (Spring Security, Redis, RabbitMQ, Flyway, WebSocket) with extensive tutorials.", "when_to_avoid": ["you need a production-ready HR suite with vendor support and licensing", "you need a modern stack - the author recommends the SpringBoot3+Vue3 rewrite (vhr2.0) or TienChin", "you need a small lightweight library rather than a full application", "your team cannot operate MySQL, Redis, and RabbitMQ dependencies"], "when_to_choose": ["you want a reference implementation of an HR system with RBAC in Java", "you are learning Spring Boot + Vue integration and enterprise patterns", "you need a scaffold to base a custom business system on", "you want worked tutorials covering auth, messaging, caching, and deployment"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/vhr", "repo": "lenve/vhr", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:48.100336+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:54:27.579995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "134b664678b508eedee8fc5fe98d42a51fc70011e0b6eda033b88d0d4c14c818", "fetched_at": "2026-08-28T04:11:48.100336+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lenve/vhr"}, {"content_hash": "1e79e53d3f9fee1df7d314b25e738512277f3614691e0c5040f1f6d7ee7f30e7", "fetched_at": "2026-08-29T07:51:06.885563+00:00", "kind": "homepage", "missing": false, "url": "http://vhr.javaboy.org"}, {"content_hash": "9ece6bc1dc7b7712fa96a1d015aa813541c678403fbcccda3de76da474ac1bf4", "fetched_at": "2026-08-29T07:51:06.895122+00:00", "kind": "site_page", "missing": false, "url": "http://vhr.javaboy.org/about.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3163, "days_push": 647, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}