A simple Todo application demonstrating k8s-ephemeral-environments with Java 21 (Spring Boot) and Vue 3.
| Layer | Technology |
|---|---|
| Backend | Spring Boot 3.x (Java 21) |
| Frontend | Vue 3 (Composition API) |
| Database | MongoDB |
| Build Tool | Gradle (Kotlin DSL) |
| Styling | Tailwind CSS 3 |
todo-app/
├── todo-api/ # Spring Boot Web API
│ ├── src/main/java/ # Java source files
│ ├── src/main/resources/
│ │ ├── application.yml
│ │ └── static/ # Vue build output
│ └── build.gradle.kts
├── todo-web/ # Vue 3 frontend
│ └── src/ # Vue components and services
├── Dockerfile # Multi-stage build
├── docker-compose.yml # Local development
└── k8s-ee.yaml # PR environment config
- Java 21 (JDK)
- Node.js 22+
- Docker and Docker Compose
cd todo-app
# Start MongoDB
docker compose up -d
# Run API (terminal 1)
cd todo-api
./gradlew bootRun
# Run Vue (terminal 2)
cd todo-web
npm install
npm run dev| Method | Endpoint | Description |
|---|---|---|
| GET | /api/todos |
List all todos |
| GET | /api/todos/{id} |
Get todo by ID |
| POST | /api/todos |
Create todo |
| PATCH | /api/todos/{id} |
Update todo |
| DELETE | /api/todos/{id} |
Delete todo |
| GET | /api/health |
Health check |
Each pull request automatically gets an isolated environment:
- PR opened -> Namespace created
- App + MongoDB deployed
- Preview URL:
todo-app-java-pr-{number}.k8s-ee.genesluna.dev - PR closed -> Environment destroyed
MIT