- NEVER create files or directories that differ only in casing from existing ones (e.g.,
typeTagvsTypeTag). macOS is case-insensitive and this causes persistent git conflicts. - Directory names under
frontend/tiggle/src/components/atoms/must use PascalCase (e.g.,TypeTag, nottypeTag). - The
.githooks/pre-commithook blocks commits with case-duplicate paths. Rungit config core.hooksPath .githooksafter cloning.
- Backend: Spring Boot (Kotlin), port 8080
- Frontend: Vite + React + TypeScript
- DB: MySQL (port 3307)
- Messaging: Kafka
- Deployment: Docker Compose on Synology NAS, nginx reverse proxy
- Unit tests:
./gradlew :tiggle:test(excludes integration tests) - Integration tests (requires Kafka):
./gradlew :tiggle:integrationTest - Controller tests use
@AutoConfigureMockMvc(addFilters = false)to bypass Security filters
- Push to
maintriggers GitHub Actions → SSH deploy to NAS - Frontend: build with
npm run build, deploy to/var/services/web/ - Backend: Docker Compose rebuild
- nginx proxies:
/api/,/oauth2/,/login/oauth2/,/upload/→ backend:8080