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.