Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
A production-ready HR management system built with Java Spring Boot and React TypeScript
BusinessJava · TypeScriptGitHub @carriegale2710OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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 recordsRead the full 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.