A polyglot monorepo demonstrating full-stack development with multiple backends (Spring Boot/Kotlin) and frontends (React/TypeScript), all containerized and ready to run out of the box.
Get everything running in one command:
./run.shThat's it! The script will:
- Check system prerequisites (Docker/Podman)
- Build all projects (Gradle + npm)
- Build Docker images
- Start all services with PostgreSQL and LocalStack
Access your services:
- React Frontend: http://localhost:5173
- Resistors API: http://localhost:8081
- Trading API: http://localhost:8082
- PostgreSQL: localhost:5432
- LocalStack: http://localhost:4566
tinker-with-react/
├── backends/
│ ├── resistors/ # Spring Boot API for resistor calculations
│ └── trading/ # Spring Boot API for trading (backburner)
├── frontends/
│ └── tinker-react/ # React + TypeScript + Vite frontend
├── scripts/ # Helper scripts
│ ├── build.sh # Build all projects
│ ├── docker-orchestrate.sh # Manage containers
│ └── restart-app.sh # Quick restart individual services
├── run.sh # Main entry point
├── test.py # Unified test runner
└── docker-compose.yml # All service definitions
First time or full setup:
./run.shSkip bootstrap if already done:
./run.sh --skip-bootstrapForce rebuild everything:
./run.sh --rebuildRun with tests:
./run.sh --testsRun all tests:
./test.pyRun only backend tests:
./test.py --backend-onlyRun only frontend tests:
./test.py --frontend-onlyContinue on failure (see all results):
./test.py --continueView logs:
docker compose logs -f
docker compose logs -f resistors # specific serviceRestart a service after code changes:
./scripts/restart-app.sh resistors
./scripts/restart-app.sh trading
./scripts/restart-app.sh tinker-reactStop everything:
docker compose downStop and remove volumes:
docker compose down -vBuild everything:
./scripts/build.shBuild only backends:
./scripts/build.sh --backend-onlyBuild only frontends:
./scripts/build.sh --frontend-onlySpring Boot backend for resistor calculations and electronics utilities.
Spring Boot backend for trading operations (currently on backburner).
React + TypeScript frontend with Vite for hot module replacement.
This project works with both regular Docker and Podman installations. The startup scripts automatically detect which is in use.
On Fedora/Podman systems:
- Podman socket is enabled to start on boot:
systemctl --user enable podman.socket - Scripts automatically start the Podman daemon if needed
On other systems:
- Regular Docker daemon should be running
- Scripts verify Docker is accessible before starting services
All services run in containers with:
- Health checks for reliable startup ordering
- Volume persistence for databases
- Hot reload for development (where supported)
- Isolated networks for security
Infrastructure:
- PostgreSQL 17 (database)
- LocalStack (AWS service emulation)
Applications:
- Resistors API (port 8081)
- Trading API (port 8082)
- React Frontend (port 5173)
- All scripts support
-hor--helpfor detailed usage - State tracking in
.temp/state.yamlprevents redundant checks - Logs are accessible via Docker Compose
- Frontend has HMR (Hot Module Replacement) enabled
- Backend changes require container restart (use
restart-app.sh)