Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Employee Creator Spring API + React App
A production-ready HR management system built with Java Spring Boot and React TypeScript
Live Demo: Employee Creator App | ⚡ API: employeecreator.my
Employee Creator is a full-stack CRUD application for managing employee records and contracts. Built over 4 weeks as a solo project, it demonstrates enterprise-level development practices including comprehensive testing, CI/CD deployment, and scalable architecture.
1. For HR Teams: Streamline employee onboarding, track contract history, maintain compliance records查看完整 README ↗A production-ready, full-stack HR management system built with Java Spring Boot and React TypeScript
Live Demo: Employee Creator App | ⚡ API: Employee Creator API
Employee Creator is a full-stack CRUD application for managing employee records and contracts. Built over 4 weeks as a solo project, it demonstrates enterprise-level development practices including comprehensive testing, CI/CD deployment, and scalable architecture.
For HR Teams: Streamline employee onboarding, track contract history, maintain compliance records
For Developers: Reference implementation showcasing modern full-stack patterns, testing strategies, and deployment practices
For Stakeholders: Production-ready system with scalable architecture and comprehensive audit trails
Note: An employee can have multiple contracts. Contracts are immutable by design: no update.
A deliberately boring, industry-standard enterprise stack: scalable by design, with robust automated testing and safety checks at every layer.
| Layer | Technology | Benefit |
|---|---|---|
| DB | PostgreSQL, JPA | Relational integrity, portable data |
| Backend | Spring Boot, Java, Maven | Industry-standard, scalable APIs |
| Frontend | React, TypeScript, Vite | Fewer runtime bugs, fast builds |
| Testing | JUnit, Mockito, REST Assured, H2, Faker (Data seeding) | Catches regressions before release |
| Styling | Tailwind / SCSS | Consistent UI, faster styling |
| Deployment | Render + Neon (current); AWS EC2, S3 + CloudFront (archived) | Free-tier hosting, zero ops |
| CI/CD | GitHub Actions | Automated checks on every push |
| Monitoring | Log4j2 | Faster debugging in production |
flowchart LR
User --> React["React App"]
React -- "GET / POST / PATCH / DELETE /employees" --> API["Spring Boot API"]
API -- "SELECT / INSERT / UPDATE / DELETE" --> DB[(PostgreSQL)]
DB --> API --> React --> User
Employees (1) → Contracts (Many)
Each employee can have multiple contracts over time. Contracts are immutable legal documents.
| Method | Path | Purpose |
|---|---|---|
| GET | /employees | List employees |
| GET | /employees/{id} | Get one employee |
| POST | /employees | Create employee |
| PATCH | /employees/{id} | Update employee |
| DELETE | /employees/{id} | Delete employee |
| GET / POST | /contracts | List / create contracts |
| GET | /contracts/employee/{id} | List contracts for one employee |
| GET / DELETE | /contracts/{id} | Get / delete a contract |
Live site safety
Hosting on a budget
| Type | Tools Used | Implementation |
|---|---|---|
| Spring Unit Tests | JUnit + Mockito | ✅ Service Layers |
| Spring E2E Tests | REST Assured, H2 | ✅ 40+ employees / contracts |
| React Component Tests | Vitest | ⏳ Basic |
To run tests, use the following commands:
./mvnw test # backend
npm run test # frontend (if added)
cd front-end
npm install
npm run dev
# App available at: http://localhost:5173
cd employee
./mvnw clean install
./mvnw spring-boot:run
# API available at: http://localhost:8080
Install PostgreSQL (macOS: brew install postgresql && brew services start postgresql; Windows: download), then:
CREATE DATABASE your_database_name;
Create employee/.env:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database_name
SPRING_DATASOURCE_USERNAME=your_user
SPRING_DATASOURCE_PASSWORD=your_password
Create front-end/.env:
VITE_API_URL=http://localhost:8080
Other front-end commands: npm run build (production build), npm run preview (test the build).
POST /employees
{
"firstName": "Timmy",
"lastName": "Turner",
"email": "[email protected]",
"phone": "0400000000",
"address": "123 Fairy Lane" //opt
}
PATCH /employees/{id} takes the same fields.
POST /contracts
{
"employeeId": 15,
"department": "SALES",
"contractType": "FULL_TIME",
"salaryAmount": 80000,
"hoursPerWeek": 38,
"startDate": "2023-01-10",
"endDate": null //opt
}
# backend
./mvnw clean package -DskipTests
scp -i <key.pem> target/employee-creator.jar ubuntu@<EC2_IP>:/home/ubuntu/apps/employee-creator-spring/
ssh -i <key.pem> ubuntu@<EC2_IP> "sudo systemctl restart employee-creator"
# front-end
npm run build
aws s3 sync dist/ s3://<bucket-name> --delete
aws cloudfront create-invalidation --distribution-id <DIST_ID> --paths "/*"
Archived AWS details: the backend ran as a systemd service behind Nginx with Let's Encrypt TLS and a local PostgreSQL. The front-end ACM certificate had to be requested in us-east-1 (CloudFront requirement).
Backend API is deployed on AWS EC2. The frontend React app is deployed separately on S3 + CloudFront, and communicates with this backend via HTTPS.
| Layer | Service | Domain |
|---|---|---|
| Frontend (React) | S3 static site behind CloudFront | employeecreator.site |
| Backend (Spring Boot) | EC2 (Nginx reverse proxy → systemd service) | api.employeecreator.site |
| Database | PostgreSQL, local to the EC2 instance | — |
Note: Due to AWS costs, the long-term demo deployment has migrated to Render + Neon Postgres (free tier). Config: render.yaml. The AWS details above are kept for reference and the AWS workflows in
.github/workflows/are archived (not in use).
I built this employee management app on my own, as a practice run of how real business software gets made. The goal was to work the way a professional team would:
| Area | Challenge | What I Did |
|---|---|---|
| Connecting the pieces | Frontend and backend wouldn't talk once hosted on AWS | Fixed access rules so only the website could reach the backend |
| Testing | Writing tests first slowed me down | Tried the app by hand first, then wrote tests. Better balance for a solo project |
| Going live | Automated releases were fiddly | Changed one small thing at a time and re-tested |
| Working like a team | Simulating team practice solo | Stable main plus dev, one branch per feature, tidied history before merging |
| Keeping it organised | Documenting a two-part project | Split front and back end by purpose; kept the change log updated |
NEW_HIRE instead of INACTIVE (#55)Full plan: docs/roadmap.md.
MIT License.