Learning Lab
Dev Lab — Personal Practice & Tooling Monorepo
- Spring Boot
- Java 21
- MyBatis
- PostgreSQL
- Maven
- Gradle
Project Summary
Problem
Two years of backend practice work — core Java drills, Spring Boot topics by area, and a handful of small full apps — were scattered across four separate repositories with no consistent structure, so old work was hard to find or resume. Dev Lab consolidates that history into one browsable monorepo instead of losing it across dead repos.
Approach
Dev Lab keeps independent learning projects discoverable without presenting them as one production product. Each folder has its own build and documentation.
What I Built
- Core Java exercises covering OOP, collections, generics, and patterns
- Spring Boot practice organized by web, data, security, testing, and messaging
- A MyBatis store-admin application on PostgreSQL
- Focused API, JWT, and engineering-note projects that run independently
Implementation
Each folder is a standalone Java project with its own Maven or Gradle wrapper, so exercises and small applications can be opened, built, and documented independently.
architecture
Backend Evidence
Core data
Key endpoints
- GET
/api/productsPaged product listing (heang-dev-lab store admin)
- POST
/api/productsCreate a product — multipart or JSON body (heang-dev-lab)
- GET
/usersList users (heang-dev-lab)
- GET
/api/pingHealth check (heang-api-center)
Engineering Decisions
Challenge
Organizing unrelated practice projects without coupling their builds
Decision
Kept one independent build wrapper and README per project folder
Challenge
Making older learning work easy to find and resume
Decision
Added a root index that groups the lab by topic and application
Takeaways
- A practice repo needs the same hygiene as a product repo — without one folder per project and a README table, old work becomes unfindable
- Keeping each sub-project on its own build tool and wrapper is what let four repos merge without any of them breaking
H-Phsar — B2B Marketplace API