app/server/ contains the Spring Boot parent with huntly-server, huntly-jpa, huntly-common, and huntly-interfaces. app/client/ serves the React SPA, app/extension/ holds the Chrome/Firefox browser extension, and app/tauri/ ships the desktop app built with Tauri + Vite. Shared static assets live in static/; container manifests sit in Dockerfile* and docker-compose.yml.
- Server:
cd app/serverand use./start-dev.sh(primary dev mode, supports--taskto enable connectors and--sqlto show SQL);./mvnw clean verifybuilds everything; direct maven run:./mvnw spring-boot:run -pl huntly-server -amserveslocalhost:8080. - Web client:
cd app/client && yarn install && yarn start; useyarn buildfor production assets andyarn testfor the Jest suite. - Browser extension:
cd app/extension && yarn install && yarn dev; guard releases withyarn buildandyarn test. Useyarn build:firefoxfor Firefox-specific builds. - Desktop app (Tauri):
cd app/tauri && yarn install && yarn tauri dev;yarn buildcompiles frontend andyarn tauri buildbundles the desktop app. - Containers:
docker-compose up -druns the published image;docker build -t huntly-local -f Dockerfile .produces a workspace-aware image.
Java code uses four-space indentation, com.huntly.* packages, and Lombok DTOs; keep controllers in huntly-server and persistence code in huntly-jpa. TypeScript components and hooks are PascalCase files with camelCase props and co-located Tailwind styles. The React app follows react-scripts ESLint defaults, and the extension formats with yarn style. Name static assets and env samples in kebab-case to match the existing tree.
Java modules rely on JUnit 5 and AssertJ; place tests beside new code under src/test/java and run ./mvnw test (or module-targeted variants) before pushing. The React client uses React Testing Library through yarn test; name files <Component>.test.tsx. Extension suites run with ts-jest via yarn test; provide deterministic fixtures for new parsers or DOM mutations.
Follow Conventional Commits (feat:, fix:, optional scopes) in imperative voice, keeping subjects ≤72 characters. PRs should link issues, describe impact, attach UI captures when relevant, and confirm ./mvnw clean verify, yarn test (client), and yarn test (extension) succeed. Flag schema, Docker, or configuration changes explicitly for reviewers.
Avoid committing SQLite artifacts in app/server/huntly-server/db.sqlite*; persist data through the /data volume when containerised. Store secrets in environment variables or Tauri keychains. Expose the API over HTTPS and review CORS settings before distributing new browser builds.
When updating the project's README, ensure all language versions are updated consistently:
README.md(English)README.zh.md(Chinese)